2017-09-05 5 views
2

.csvファイルを作成しようとしています。CSVに印刷するときにPythonがスキップする

なんらかの理由で、入力前に行をスキップします。ここで

は出力

enter image description here

しかし、ここでは、私は

以下

enter image description here

がコードで必要なものです。どうやらif line != "":は、(Windowsの場合)

import csv 

#----------------------------------- 
def csv_writer(data,path): 
    """ 
    Write data to a CSV file path 
    """ 
    with open(path, "w") as csv_file: 
     writer = csv.writer(csv_file, delimiter=',') 
     for line in data: 
      if line != "": 
       writer.writerow(line) 

#----------------------------------- 
if __name__ == "__main__": 
    data = ["first_name,last_name,city".split(","), 
      "Tyrese,Hirthe,Strackeport".split(","), 
      "Jules,Dicki,Lake Nickolasville".split(","), 
      "Dedric,Medhurst,Stiedemannberg".split(",") 
      ] 
    path = "output.csv" 
    csv_writer(data,path) 

答えて

3

いくつかのpythonのバージョンを動作することwith open(path, "w") as csv_file:の問題を持っていません。 A spurious carriage return char is inserted、各行の後に空白行を作成します。

ドキュメントに記載されている通り、newline=""を追加する必要があります。 Pythonの3:pythonの2については

with open(path, "w",newline="") as csv_file: 
    writer = csv.writer(csv_file, delimiter=',') 

with open(path, "wb") as csv_file: 
    writer = csv.writer(csv_file, delimiter=',') 

も参照してください。

(つまり最新のPython版に注意してくださいWindows上のシングスはこれ以上必要ではありませんが、ドキュメントにはそれが続きます)

+0

この問題はWindows固有の問題で、[ドキュメント](https://docs.python.org/3/library/csv.html#id3)に記載されています。 – Aaron

2

ファイルを開くときに、キーワード引数newlineに空文字列を渡す必要があります。これにより、行間に改行が追加されなくなります。あなたの機能は次のようにする必要があります。

def csv_writer(data,path): 
""" 
Write data to a CSV file path 
""" 
with open(path, "w", newline = '') as csv_file: 
    writer = csv.writer(csv_file, delimiter=',') 
    for line in data: 
     if line != "": 
      writer.writerow(line) 

これはWindows上の問題です。

関連する問題