2010-11-01 3 views
2

Я пытаюсь записать данные (в основном даты, булевы и типы данных с плавающей точкой) в формат файла CSV. Вот отрывок из моего кода:Python: проблемы с csvwriter

# Write data to file 
with open(OUTPUT_DIR + output_filename,'w') as outputfile: 
    wrtr = csv.writer(outputfile, delimiter=',', quotechar='"') 

    for x, y in datarows.items(): 
     a,b,c,d,e,f,g = (somedate.strft('%Y-%m-%d'),0,6058.7,False,1913736200,0,False)      
     rowstr = "{0},{1},{2},{3},{4},{5},{6}".format(a,b,c,d,e,f,g) 
     wrtr.writerow(rowstr) 

    outputfile.close() 

Содержимое файла выглядит следующим образом:

2,0,0,7, -, 10, -, 03, "", 0,» , "6,0,5,8,., 7,", "F, A, L, с, е,", ", 1,9,1,3,7,3,6,2,0 , 0, «», 0, «», F, а, л, с, е

Я в настоящее время используют необработанный объект файла для записи в файл - но я бы предпочел использовать csvwrite - поскольку это то, что предполагается использовать для

+0

Можете ли вы уточнить, что ваша проблема? – Mike

+0

В чем вопрос? – Michael

+0

Это ужасный код, почему вы закрываете 'outputfile', когда используете' with' заявление? для чего этот цикл «datarows'»? – SilentGhost

ответ

3

взгляд на этот пример, возможно, это может помочь вам:

import datetime 

with open('file.csv','w') as outputfile: 
    wrtr = csv.writer(outputfile, delimiter=',', quotechar='"') 
    a = (datetime.datetime.now().strftime('%Y-%m-%d'),0,6058.7,False,1913736200,0,False) 
    wrtr.writerow(a) # pass an iterable here 

    # outputfile.close() you don't have to call close() because you use with 

file.csv

2010-11-01,0,6058.7,False,1913736200,0,False 

надеюсь, что это может помочь вам

5

Попробуйте wrtr.writerow([a,b,c,d,e,f,g]) вместо этого.

writerow() параметр должен быть списком значений, а не текстовой строкой. Идея csv.writer заключается в том, что она будет форматировать значения строк в соответствии с правилами CSV.

Результат, полученный вами, объясняется тем, что writerow() интерпретировал строку rowstr как список символов.

Смежные вопросы