以下代码在txt文件的末尾留下一条空白线。我怎能不让作家不终止最后一行呢?
with open(fname, 'wb') as myFile:
# Start the CSV Writer
wr = csv.writer(myFile, delimiter=',', dialect='excel')
wr.writerows(rows)
# Close the file.
myFile.close()
答案 0 :(得分:1)
首先,由于您使用的是with open as myFile
,因此您不需要myFile.close()
,这会在您删除缩进时自动完成。
其次,如果你愿意为你的程序添加另一部分,你可以简单地写一些删除最后一行的东西。这方面的一个例子是Strawberry(略有改动):
with open(fname) as myFile:
lines = myFile.readlines()
with open(fname, "w") as myFile:
myFile.writelines([item for item in lines[:-1]])
注意' w'参数将清除文件,因此我们需要打开文件两次,一次读取,一次写入。
我也相信,您可以使用myFile.write
,它不会添加换行符。使用它的一个例子是:
with open(fname, 'wb') as myFile:
wr = csv.writer(myFile, delimiter=',', dialect='excel')
lines = []
for items in rows:
lines.append(','.join(items))
wr.write('\n'.join(lines))
但是,只有拥有多维数组才能使用,并且应该避免使用。
答案 1 :(得分:1)
我很欣赏这是一个古老的要求,但在寻找相同解决方案时偶然发现了它。我最终在the csv documentation itself中阅读了答案,发现csv.writer有一个lineterminator
格式参数,默认为\r\n
,给出了我们都不想要的新行。
作为一种解决方案,我在代码中添加了格式设置参数newline=''
,它很好用(在下面原位)。
with open(fname, 'wb') as myFile:
# Start the CSV Writer
wr = csv.writer(myFile, delimiter=',', dialect='excel', newline='')
wr.writerows(rows)
# Close the file.
myFile.close()
答案 2 :(得分:0)
我找不到适用于python 3的答案,这也适用于我的情况,所以这是我的解决方案:
def remove_last_line_from_csv(filename):
with open(filename) as myFile:
lines = myFile.readlines()
last_line = lines[len(lines)-1]
lines[len(lines)-1] = last_line.rstrip()
with open(filename, 'w') as myFile:
myFile.writelines(lines)
答案 3 :(得分:0)
感谢wfgeo
,其中一种解决方案的工作原理如下。尽管它需要os
库,但使生活更轻松:
import csv
import os
with open(fileName, 'w', newline='') as f:
writer = csv.writer(f, delimiter=';', dialect='excel')
for row in rows:
row = rows[0].values()
writer.writerow(row)
f.seek(0, os.SEEK_END)
f.seek(f.tell()-2, os.SEEK_SET)
f.truncate()