我有一些非常简单的代码:
import csv
out = csv.writer(open('test.csv', 'wb'), delimiter=",")
out.writerow([u"value1", u"value2", u"value3"])
它有时有效,但大多数时候无效!我记得我以前使用过 writerow,它工作得很好,我在这里错过了什么?
为了让问题更清楚:尽管上面的代码执行没有任何错误,但 csv 文件仍然是空的
我将代码修改为如下所示:
import csv
f = open('test.csv', 'wb')
out = csv.writer(f, delimiter=",")
out.writerow([u"value1", u"value2", u"value3"])
f.close()
所以我所做的就是将 分开open('test.csv', 'wb')
并将其分配给f
,以便我可以f.close()
在最后使用。它以这种方式完美运行。
完成您正在做的事情的一种稍微 Pythonic 的方式是使用上下文管理器,它由with
语句指定:
In [1]: import csv
In [2]: with open('test.csv', 'wb') as f:
...: writer = csv.writer(f)
...: writer.writerow([u"value1", u"value2", u"value3"])
当您使用with
时,除其他外,它可确保在代码退出缩进块时正确关闭文件。此外,在使用csv
模块时,默认分隔符是,
,因此您实际上可以从您的writer
(或out
在您的情况下)声明中省略它。
我通过关注如何缩进包含 csv.writer 的块来解决这个问题。我在阅读后进行的其他一些迭代下,将其缩进了更多。
with open('retrans.csv') as csvfile:
file1 = csv.reader(csvfile, delimiter = ',')
print(file1)
next(file1)
count = 0
for row in file1:
while count < 1:
print(row)
count +=1
with open("newfile.csv", 'w', newline = '') as outfile:
csv_writer = csv.writer(outfile, delimiter = ',')
for lines in file1:
csv_writer.writerow(lines)