创建文件时删除空白行

时间:2019-03-20 00:48:59

标签: python python-3.x

我有一个脚本,可以为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

有什么方法可以在创建时删除空白行吗?

预先感谢

编辑:

这是正在创建的输出文件中的1个示例 enter image description here

这是其读取的CSV文件 enter image description here

2 个答案:

答案 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:])