web-dev-qa-db-ja.com

python csvファイルにリストを書き込む、リストごとに1つの新しい行

私は次のソースコードを持っていますが、csvファイルにリストを書き込もうとしています。すべての新しいリストをこのcsvファイルの新しい行に書き込む必要があります。ソースコードは次のとおりです。

import csv
list1=[55,100,'dir1/dir2/dir3/file.txt',0.8]

resultFile = open("output.csv",'wa')
wr = csv.writer(resultFile, dialect='Excel')
wr.writerow(list1)
resultFile.close()

問題は、コードを実行するたびに改行にlist1が挿入されないことです。

簡単なmatlabでは、 '-append'パラメータを指定してdlmwriteを使用するだけです。

しかし、これをPythonで行う方法は?

11
mad

追加モードでファイルを開きます。

import csv
list1=[58,100,'dir1/dir2/dir3/file.txt',0.8]

with open("output.csv", "a") as fp:
    wr = csv.writer(fp, dialect='Excel')
    wr.writerow(list1)

ファイルの詳細 オープンモード

以下を試してください:-

>>> with open('test1','wb') as f: f.write('test')
... 
>>> with open('test1','ab') as f: f.write('koko')
... 
>>> with open('test1','rb') as f: f.read()
... 
'testkoko'
>>> with open('test1','wa') as f: f.write('coco')
... 
>>> with open('test1','rb') as f: f.read()
... 
'coco'
>>> 

これから リンク

モード:説明

  1. r:読み取り専用でファイルを開きます。ファイルポインタはファイルの先頭に置かれます。これがデフォルトのモードです。
  2. rb:バイナリ形式でのみ読み取るためにファイルを開きます。ファイルポインタはファイルの先頭に置かれます。これがデフォルトのモードです。
  3. r +:読み取りと書き込みの両方でファイルを開きます。ファイルポインタはファイルの先頭にあります。
  4. rb +:バイナリ形式で読み取りと書き込みの両方のためにファイルを開きます。ファイルポインタはファイルの先頭にあります。
  5. w:書き込み専用でファイルを開きます。ファイルが存在する場合、ファイルを上書きします。ファイルが存在しない場合は、書き込み用に新しいファイルを作成します。
  6. wb:バイナリ形式でのみ書き込むためにファイルを開きます。ファイルが存在する場合、ファイルを上書きします。ファイルが存在しない場合は、書き込み用に新しいファイルを作成します。
  7. w +:書き込みと読み取りの両方でファイルを開きます。ファイルが存在する場合、既存のファイルを上書きします。ファイルが存在しない場合は、読み取りおよび書き込み用に新しいファイルを作成します。
  8. wb +:ファイルをバイナリ形式で書き込みと読み取りの両方で開きます。ファイルが存在する場合、既存のファイルを上書きします。ファイルが存在しない場合は、読み取りおよび書き込み用に新しいファイルを作成します。
  9. a:追加するファイルを開きます。ファイルが存在する場合、ファイルポインタはファイルの末尾にあります。つまり、ファイルは追加モードです。ファイルが存在しない場合は、書き込み用の新しいファイルを作成します。
  10. ab:追加するファイルをバイナリ形式で開きます。ファイルが存在する場合、ファイルポインタはファイルの末尾にあります。つまり、ファイルは追加モードです。ファイルが存在しない場合は、書き込み用の新しいファイルを作成します。
  11. a +:追加と読み取りの両方のためにファイルを開きます。ファイルが存在する場合、ファイルポインタはファイルの末尾にあります。ファイルは追加モードで開きます。ファイルが存在しない場合は、読み書き用の新しいファイルを作成します。
  12. ab +:バイナリ形式で追加と読み取りの両方のためにファイルを開きます。ファイルが存在する場合、ファイルポインタはファイルの末尾にあります。ファイルは追加モードで開きます。ファイルが存在しない場合は、読み書き用の新しいファイルを作成します。
28
Vivek Sable

Python 3.xを使用する場合は、コードを変更します。

import csv

list1 = [58,100,'dir1/dir2/dir3/file.txt',0.8]

with open("output.csv", "a", newline='') as fp:
    wr = csv.writer(fp, dialect='Excel')
    wr.writerow(list1)

newline=''を追加すると、余分な改行、データのある2つの行の間に空の行が入るのを防ぐことができます。

2
Sergey Solod