我有一个脚本,可以为CSV文件的每一行创建文件。但是,以某种方式将空白行添加到新创建的文件的末尾。
代码:
with open(fullCSV, 'r') as f:
reader = csv.reader(f)
csvList = list(reader)
for item in csvList:
if not os.path.exists(tempLoc + item[0]):
os.mkdir(tempLoc + item[0])
with open(tempLoc + item[0] + r"\prm.263", "w+") as f:
csv.writer(f).writerow(item[1:])
f.close
有什么方法可以在创建时删除空白行吗?
预先感谢
编辑:
答案 0 :(得分:3)
问题是csv模块。您可以看到没有办法摆脱writerow()
输出的行尾字符。毕竟,csv模块假定您可以重复写入行:
writer.writerow(row1)
writer.writerow(row2)
...
因此必须在每行输出上换行,以使其起作用。但是您的问题是删除文件末尾的换行符。因此,您可以考虑在两者之间添加一个额外的步骤:(使用Python 3 io模块)
with open(tempLoc + item[0] + r"\prm.263", "w+") as f:
g = io.StringIO()
csv.writer(g).writerow(item[1:])
f.write(g.getvalue().rstrip())
上面,我们将StringIO
作为csv.writer()
的类似文件的对象,并要求编写者将其写入缓冲区而不是文件。完成所有行的写入后,我们用g.getvalue()
读取缓冲区,然后在末尾去除空格(即换行符),然后写入文件。
如果您有兴趣,这是csv模块为每一行提供的内容:
>>> import io
>>> f = io.StringIO()
>>> import csv
>>> csv.writer(f).writerow([1,2,3,4])
9
>>> f.getvalue()
'1,2,3,4\r\n'
答案 1 :(得分:1)
csv.writer
默认情况下使用excel
方言,其中'\r\n'
作为换行符。
如果您确实不希望使用任何行终止符,则可以使用lineterminator
的{{1}}参数覆盖它:
csv.writer()
由于每个文件只写1条单行,所以所有原始行最终以1条单行连接在一起不会有问题。
您的示例代码被重写:
csv.writer(f, lineterminator='').writerow(item[1:])