268

古い csv ファイルに新しい行を追加しようとしています。基本的に、Python スクリプトを実行するたびに更新されます。

現在、古いcsv行の値をリストに保存してから、csvファイルを削除して、新しいリスト値で再度作成しています。

これを行うためのより良い方法があることを知りたいです。

4

8 に答える 8

304
with open('document.csv','a') as fd:
    fd.write(myCsvRow)

パラメータを使用してファイルを開くと'a'、既存のコンテンツを単純に上書きするのではなく、ファイルの末尾に追加できます。それを試してみてください。

于 2010-03-02T14:25:51.047 に答える
14

「w」ではなく「a」のモードでファイルを開いていますか?

Python ドキュメントのファイルの読み取りと書き込みを参照してください。

7.2. ファイルの読み取りと書き込み

open() はファイル オブジェクトを返し、open(filename, mode) という 2 つの引数と共に使用されるのが最も一般的です。

>>> f = open('workfile', 'w')
>>> print f <open file 'workfile', mode 'w' at 80a0960>

最初の引数は、ファイル名を含む文字列です。2 番目の引数は、ファイルの使用方法を説明するいくつかの文字を含む別の文字列です。モードは、ファイルが読み取り専用の場合は 'r'、書き込み専用の場合は 'w' (同じ名前の既存のファイルは消去されます)、'a' は追加用にファイルを開きます。ファイルに書き込まれたデータは、自動的に末尾に追加されます。'r+' は、読み取りと書き込みの両方でファイルを開きます。モード引数はオプションです。'r' を省略した場合は、'r' と見なされます。

Windows では、モードに「b」を追加するとファイルがバイナリ モードで開かれるため、「rb」、「wb」、「r+b」などのモードもあります。Windows 上の Python は、テキスト ファイルとバイナリ ファイルを区別します。テキスト ファイルの行末文字は、データの読み取りまたは書き込み時に自動的にわずかに変更されます。ファイル データに対するこの裏での変更は、ASCII テキスト ファイルでは問題ありませんが、JPEG や EXE ファイルのようなバイナリ データは破損します。このようなファイルを読み書きするときは、バイナリ モードを使用するように十分注意してください。Unix では、モードに 'b' を追加しても問題ないため、プラットフォームに依存せずにすべてのバイナリ ファイルに使用できます。

于 2010-03-02T14:26:11.777 に答える
12

ファイルが存在し、データが含まれている場合、次のfieldnameパラメータをcsv.DictWriter自動的に生成できます。

# read header automatically
with open(myFile, "r") as f:
    reader = csv.reader(f)
    for header in reader:
        break

# add row to CSV file
with open(myFile, "a", newline='') as f:
    writer = csv.DictWriter(f, fieldnames=header)
    writer.writerow(myDict)
于 2019-02-06T11:52:03.417 に答える