首页 > 解决方案 > 创建文件时删除空行

问题描述

我有一个为 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 个输出文件的示例 在此处输入图像描述

这是其读取的 CSV 文件 在此处输入图像描述

标签: pythonpython-3.x

解决方案


问题是 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'

推荐阅读