2016-04-19 13 views
0

4番目の列のロット「DOT」を持つ行を使用して大きなファイルのサブセットを作成し、新しいファイルに出力したいと考えています。大きなCSVファイルのサブセットを作成して新しいCSVファイルに書き込む

import csv 
outfile = open('DOT.csv','w') 
with open('Service_Requests_2015_-_Present.csv', newline='', encoding='utf-8') as f: 
    reader = csv.reader(f) 
    for row in reader: 
     if row[3] == "DOT": 
      outfile.write(row) 
outfile.close() 

エラーがある:私はちょうどまっすぐに書き込みを行うことができるようになりますように

outfile.write(row) 
TypeError: must be str, not list 

がどのように行を操作することができます(行)

この

は、私が現在持っているコードです。もしそうでなければ、最も簡単な方法は何ですか?

答えて

0

声明で次のように、複数の引数を受け入れるようあなたは、あなたの二つの開放文を組み合わせることができます。

import csv 

infile = 'Service_Requests_2015_-_Present.csv' 
outfile = 'DOT.csv' 

with open(infile, encoding='utf-8') as f, open(outfile, 'w') as o: 
    reader = csv.reader(f) 
    writer = csv.writer(o, delimiter=',') # adjust as necessary 
    for row in reader: 
     if row[3] == "DOT": 
      writer.writerow(row) 

# no need for close statements 
print('Done') 
+0

このエラーが発生しました:UnicodeEncodeError: 'ascii'コーデックは文字「\ xe9」を位置119にエンコードできません:序数は範囲外です(128) – Bob

0

outfilecsv.writerとし、書き込みの代わりにwriterowを使用してください。

私はそれを行うだろうかある
outcsv = csv.writer(outfile, ...other_options...) 
... 
outcsv.writerow(row) 

... OR

outfile.write(",".join(row)) # comma delimited here... 
+0

改行文字も同様に書く必要があります。 –

0

上記のコードでは、ファイルオブジェクトのリストを書き込もうとしていますが、 "TypeError:リストではなくstrでなければなりません"というリストを書き込むことはできません。リストを文字列形式に変換してファイルに書き込むことができます。 outfile.write(STR(行))

又は

import csv 
def csv_writer(input_path,out_path): 
    with open(out_path, 'ab') as outfile: 
     writer = csv.writer(outfile) 
     with open(input_path, newline='', encoding='utf-8') as f: 
      reader = csv.reader(f) 
      for row in reader: 
       if row[3] == "DOT": 
        writer.writerow(row) 
     outfile.close() 

csv_writer(input_path、out_path) [Pythonの3バージョンのためのこのコード。 Python 2.7では、open関数は改行引数をとりません。したがって、TypeError。]

関連する問題