回答:
with open('document.csv','a') as fd:
fd.write(myCsvRow)
'a'
パラメータを使用してファイルを開くと、既存のコンテンツを単に上書きする代わりに、ファイルの末尾に追加できます。やってみて。
私csv
は標準ライブラリのモジュールとwith
は、ファイルを開いたままにしないようにステートメントをます。
重要なポイントは'a'
、ファイルを開いたときに追加するために使用することです。
import csv
fields=['first','second','third']
with open(r'name', 'a') as f:
writer = csv.writer(f)
writer.writerow(fields)
Python 2.7を使用している場合、Windowsで余分な改行が発生する可能性があります。これの'ab'
代わりに使用することで回避できますが'a'
、TypeErrorが発生します。Pythonでは「str」、Python 3.6ではCSVではなく、バイトのようなオブジェクトが必要です。を追加するnewline=''
と、Natachaが示唆するように、Python 2とPython 3の間で後方互換性がなくなります。
@GMの回答に基づき、@ John La Rooyの警告に注意を払って、ファイルを'a'
モードで開く新しい行を追加することができました。
Windowsでも、改行の問題を回避するために、として宣言する必要があります
newline=''
。これで、ファイルを
'a'
モード(bなし)で開くことができます。
import csv
with open(r'names.csv', 'a', newline='') as csvfile:
fieldnames = ['This','aNew']
writer = csv.DictWriter(csvfile, fieldnames=fieldnames)
writer.writerow({'This':'is', 'aNew':'Row'})
私は通常の作家(Dictなし)は試しませんでしたが、大丈夫だと思います。
「w」ではなく「a」のモードでファイルを開いていますか?
Python docsのファイルの読み取りと書き込みを参照してください。
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 +'は、ファイルを読み取りと書き込みの両方で開きます。mode引数はオプションです。省略した場合は「r」とみなされます。
Windowsでは、モードに追加された「b」はバイナリモードでファイルを開くため、「rb」、「wb」、「r + b」などのモードもあります。Windows上のPythonでは、テキストファイルとバイナリファイルを区別しています。テキストファイルの行末文字は、データの読み取りまたは書き込み時に自動的にわずかに変更されます。ファイルデータに対するこの舞台裏の変更は、ASCIIテキストファイルでは問題ありませんが、JPEGファイルやEXEファイルのようなバイナリデータは破損します。そのようなファイルを読み書きするときは、バイナリモードを使用するように十分注意してください。Unixでは、モードに「b」を追加しても問題ないため、すべてのバイナリファイルに対してプラットフォームに依存せずに使用できます。
ファイルが存在し、データが含まれている場合は、次の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)
# I like using the codecs opening in a with
field_names = ['latitude', 'longitude', 'date', 'user', 'text']
with codecs.open(filename,"ab", encoding='utf-8') as logfile:
logger = csv.DictWriter(logfile, fieldnames=field_names)
logger.writeheader()
# some more code stuff
for video in aList:
video_result = {}
video_result['date'] = video['snippet']['publishedAt']
video_result['user'] = video['id']
video_result['text'] = video['snippet']['description'].encode('utf8')
logger.writerow(video_result)
この方法で、.csvファイルに新しい行を追加します。
pose_x = 1
pose_y = 2
with open('path-to-your-csv-file.csv', mode='a') as file_:
file_.write("{},{}".format(pose_x, pose_y))
file_.write("\n")