2017-09-08 11 views
0

私はこのエラーがあり、なぜ私はそれを得たのかわかりません。 私は私のPythonマニュアルの手順に従いました。私はこれを手に入れました。私は彼らがその奇妙な文字を持っている場合は、列8と9のファイルをクリーンアップしようとしています。 誰かが私を助けることができたら助言してください。Pythonエラーio.UnsupportedOperation:読み取り不可

エラーは、コードの行に表示されます。for row in csv.reader(f):

私のコードの下に見つけてください:

import csv 


file = '/Users/cohen/Desktop/sdn-2.csv' 
newstring = "null" 
newinteger = int(0) 
with open(file, 'r+') as f: 
    for row in csv.reader(f): 
     if row[7] =="-0-": 
      row[7] = newinteger 
     if row[8] == "-0-": 
      row[8] = newinteger 
f.close() 

を*** LATER EDIT私は上記のようにコードを変更しましたが、何もしていないではありません

あなたがR +でファイルを開く必要があります。0

+0

'open(file、 'w')'あなたは読み込みではなく書き込みのためにファイルを開いた。 –

+0

'open'エラーを修正しても、全体的なロジックに問題はあります。行に割り当てても、その変更はファイルに書き戻されません。 –

+0

データを読み取り、必要に応じてcsv行をクリーンアップし、クリーンな行を新しいファイルに書き込み、元のファイルを削除して新しいファイルの名前を元の名前に変更するのが最善の方法です。 –

答えて

0

EDITで-0-を交換します。 wは書き込み専用、r +は書き込みアクセス用、読み取りアクセス用です。 行と==を使用

with open(file, 'r+') as f: 

[7] == newintegerは、等価演算子を呼び出しています。左と右のオペランドの値が同じかどうかをチェックします。 =で新しい値を設定したいとします。

row[7] = newinteger 
0

他のものは私の前にものがあまりにも言っていることが、私はこのエラーは、文字列"-0-"周りの括弧からだと思います。そしておそらく、最初のスペースも同様に使います。

if row[7] ==("-0-"): 

がなければならない: 行[7] == "-0-" 場合:

if row[8] == ("-0-"): 

あるべき: もし行[8] == "-0-"

0

これは私の解決策でした。出力ファイルを作成して書き込むために、ソースファイルから読み込んだものです。 VBAでこれをやるのがさらに簡単で、Pythonでも少し奇妙ですが、これはpythnのcsvモジュール内の解決策です。私は別のファイルを作成しなければならないのが好きではなく、私は基本的には読み込まれたファイルの中に書き込むことができず、新しいファイルに書き込む必要がありますが、これは人生です....新しく開かれた

他の人がこのコードを使用することを希望します。

import csv 
newstring = "null" 
newinteger = (0) 
with open('/Users/cohen/Desktop/sdn-4 2.csv', 'r') as file1, open('/Users/cohen/Desktop/new_sdn.csv', 'w', newline='') as file2: 
    reader = csv.reader(file1, delimiter=',') 
    writer = csv.writer(file2, delimiter=',') 

    for row in reader: 
     replaced1 = row[7].replace('-0-', newstring) 
     row[7]=replaced1 
     replaced2 = row[8].replace('-0-', newinteger) 
     row[8]=replaced2 
     writer.writerow(row) 
関連する問題