创建fi时删除空行

2024-04-27 02:21:53 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个为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
<> P>有什么方法可以在创建时删除空白行吗?你知道吗

提前谢谢

编辑:

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

这是CSV文件的读数 enter image description here


Tags: 文件csv代码脚本osaswithopen
2条回答

默认情况下,^{}使用^{}方言,其中'\r\n'作为行终止符。你知道吗

如果确实不需要任何行终止符,可以使用lineterminator参数将其重写为csv.writer()

csv.writer(f, lineterminator='').writerow(item[1:])

由于在每个文件中只写一行,所以在输出中将所有原始行串联在一行中不会有问题。你知道吗

重写的示例代码:

with open(fullCSV, 'r') as finput:
    for item in csv.reader(finput):
        if not os.path.exists(tempLoc + item[0]):
            os.mkdir(tempLoc + item[0])
        with open(tempLoc + item[0] + r"\prm.263", "w+") as foutput:
            csv.writer(foutput, lineterminator='').writerow(item[1:])

问题是csv模块。您可以看到,无法从writerow()的输出中除去行尾字符。毕竟,csv模块假设您可以重复写入行:

 writer.writerow(row1)
 writer.writerow(row2)
 ...

因此,在每一行输出上发出一条新线是使其工作所必需的。但你的问题是删除文件末尾的换行符。因此,您可以考虑在这两者之间添加一个额外的步骤:(使用python3io模块)

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

上面,我们为csv.writer()创建一个StringIOas file-like对象,并要求编写器写入缓冲区而不是文件。写完所有行后,我们按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'

相关问题 更多 >