2016-06-24 2 views
1

Я пытаюсь прочитать файл csv-style и создать еще один. Адрес (упрощенный) код.Python: Запись в csv-файл

import os 
import csv 
import sys 

fn = 'C:\mydird\Temp\xyz' 
ext = '.txt' 
infn = fn+ext 
outfn = fn+'o'+ext 


infile = open(infn, newline='') 
outfile = open(outfn, 'w', newline='') 

try: 
    reader = csv.reader(infile, delimiter=',', quotechar='"') # creates the reader object 
    writer = csv.writer(outfile, delimiter=',', quotechar='"', quoting=csv.QUOTE_MINIMAL) 

    for row in reader: # iterates the rows of the file in orders 
     if reader.line_num == 1 : 
      print("Header") 
      writer.writerow(['Date', 
       'XY'])      # ####### Does not work 
     else: 
#   Do something 
      print(row[0], 
       row[3])      # ####### Works 
      writer.writerow([row[0], 
       row[3]])     # ####### Does not work 
finally: 
    infile.close()  # closing 

sys.exit(0)) 

Ни один из операторов writow не генерирует результат.

Файл создан, но он пуст.

Оператор печати создает ожидаемый вывод.

Я также пробовал уже csv.DictWriter без успеха.

Я рассмотрел различные вопросы simlar, но не вижу никакой разницы.

Я использую Py 3.3.3 на машине с выигрышем 7.

EDIT:

писатель заблудился быть кодом упрощения

+1

Вы не определяете 'writer' или закрываете' outfile' –

ответ

4

Ваш код не определяет писателя.

Добавить writer = csv.writer(outfile), а затем закрыть outfile, и он должен работать. Использование идиомы with делает код чище.

import csv 

fn = 'C:\mydird\Temp\xyz' 
ext = '.txt' 
infn = fn+ext 
outfn = fn+'o'+ext 

with open(infn) as rf, open(outfn, 'w') as wf: 
    reader = csv.reader(rf, delimiter=',', quotechar='"') 
    writer = csv.writer(wf) 
    for row in reader: # iterates the rows of the file in orders 
     if reader.line_num == 1 : 
      print("Header") 
      writer.writerow(['Date', 'XY']) 
     else: 
      # do something 
      print(row[0], row[3]) 
      writer.writerow([row[0], row[3]]) 
+0

. Это было близко. –