Python CSV Writer在文件末尾留下一个空行

时间:2015-03-29 22:20:33

标签: python csv writer

以下代码在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()

4 个答案:

答案 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()