从由CSV写入器编写的文件中删除最后一行(及空行)。

17 浏览
0 Comments

从由CSV写入器编写的文件中删除最后一行(及空行)。

我有一个由CSV Writer编写的CSV文件。文件末尾有一行空行,我需要将其删除。我似乎无法摆脱它,而且我的搜索结果中充斥着人们询问为什么每行数据之间会有一个空行(当然可以通过在文件打开语句中添加newline=\"\"来解决)。\n有没有一种干净的方法来做这个?这是代码:\n

with open(r"file.csv", "w", newline="") as f:
    csv_writer = writer(f, delimiter=";")
    for i in range(5):
        csv_writer.writerow([i, uniform(0,500)])

\n这是输出结果(实际上,最后一行为空行似乎不会显示在markdown中):\n

0;479.9182863880229
1;397.35174552864135
2;390.33911360875913
3;243.78955947710557
4;171.04998742391697

\n我不喜欢这个解决方案,这与这个问题的回答类似:\n

lines = file.readlines()
lines = lines[:-1]

\n因为它要求我再次读取整个文件,并且我预计这个文件可能会变得非常大,而且这个特定的代码块可能会被执行很多次。

0
0 Comments

最近我终于找到了一个解决方案,既能正常工作,又不需要再次读取整个文件:
with open(r"file.csv", "w", newline="") as f:
csv_writer = writer(f, delimiter=";")
for i in range(5):
csv_writer.writerow([i, uniform(0, 500)])
f.seek(0, os.SEEK_END)
f.seek(f.tell()-2, os.SEEK_SET)
f.truncate()

[/apcode]

注意,如果你的代码需要在不同平台上运行,你需要计算出换行符的长度,可能是1而不是2。

问题的原因是,当使用CSV writer写入文件时,最后一行会多出一个空行。这是因为CSV writer在写入每一行后都会自动添加一个换行符,而最后一行没有数据,所以只有一个换行符,导致多出一个空行。

解决这个问题的方法是,通过定位到文件末尾,然后倒退两个字符的位置,再进行截断操作。这样就可以删除最后一行的空行了。

以上就是解决这个问题的原因和方法。如果需要在不同平台上运行代码,还需要考虑换行符的长度。

0