2016-12-02 8 views
1

Pythonを使用してCSVファイル内の特定のセルを書き直そうとしています。Python - csvモジュールを使用して書き直した後にCSVファイルが空になる

ただし、csvファイルの一部を変更しようとすると、csvファイルが空になります(ファイルの内容は空白になります)。

最小限のコード例:

import csv 
ReadFile = open("./Resources/File.csv", "rt", encoding = "utf-8-sig") 
Reader = csv.reader(ReadFile) 
WriteFile = open("./Resources/File.csv", "wt", encoding = "utf-8-sig") 
Writer = csv.writer(WriteFile) 
for row in Reader: 
    row[3] = 4 
    Writer.writerow(row) 
ReadFile.close() 
WriteFile.close() 

このような 'file.csvになり' ルックス:この例では

1,2,3,FOUR,5 
1,2,3,FOUR,5 
1,2,3,FOUR,5 
1,2,3,FOUR,5 
1,2,3,FOUR,5 

は、私が '4' に 'FOUR' を変更しようとしています。

このコードを実行すると、代わりにcsvファイルが空になります。

これまでのところ私が見つけたのは、this oneです。これは、csvファイル内の特定のセルを書き直すのではなく、新しい行をcsvファイルに書き込むことを扱っているようです。

これを読んだ人は誰でも助けてくれてとても感謝しています。

+1

オープンファイルを '+'で代わりに。 –

+0

@ j-darbyshire "rt"と "wt"を "a +"に置き換えましたが、それでもファイルは消去されています。私はそれを間違っているのですか? – Luke25361

+1

リーダーにファイルの先頭を設定します。 'ReadFile = open ...'行の直下に 'ReadFile.seek(0)'という行を追加します。今すぐあなたのコードは期待どおりに実行する必要があります。 –

答えて

2

次のように動作するはずです:

import csv 

with open("./Resources/File.csv", "rt", encoding = "utf-8-sig") as ReadFile: 
    lines = list(csv.reader(ReadFile)) 

with open("./Resources/File.csv", "wt", encoding = "utf-8-sig") as WriteFile: 
    Writer = csv.writer(WriteFile) 
    for line in lines: 
     line[3] = 4 
     Writer.writerow(line) 
+0

これは完璧です、ありがとうございます! :) – Luke25361

2

wオプションのライターを開くと、内容が削除され、新しいファイルの書き込みが開始されます。したがって、ファイルは読み込みを開始する時点で空です。

別のファイル(FileTemp.csvなど)に書き込んで、プログラムの最後にFileTemp.csvの名前をFile.csvに変更してみます。

+0

ありがとうございます、これはこの状況で最も論理的なことです。 :) – Luke25361

関連する問題