【发布时间】:2021-04-20 08:58:06
【问题描述】:
我正在尝试删除目录中多个 CSV 文件的最后一行,覆盖原始文件。
输入文件示例:
^AEX,14/04/2021,708.83,713.31,708.44,712.55,70200
^AEX,15/04/2021,713.21,714.98,712.37,713.8,71100
^AEX,16/04/2021,714.48,716.8,712.57,716.8,80786700
^AEX,19/04/2021,717.05,718.5,710.62,711.94,60100
^AEX,20/04/2021,717.05,718.5,710.62,711.94,60100
输出文件示例:(删除最后一行^AEX,20/04/2021)
^AEX,14/04/2021,708.83,713.31,708.44,712.55,70200
^AEX,15/04/2021,713.21,714.98,712.37,713.8,71100
^AEX,16/04/2021,714.48,716.8,712.57,716.8,80786700
^AEX,19/04/2021,717.05,718.5,710.62,711.94,60100
我写了以下代码,但它不起作用:
import csv
import operator
import glob
path="./Original/*.csv"
files=glob.glob(path)
for filename in files:
lines = open(file).readlines()
lines = lines[:-1]
# deletes content of the file
f.truncate(0)
f.seek(0)
# writes the new data to the file
writer = csv.writer(f)
writer.writerows(lists)
【问题讨论】:
-
您没有将文件描述符保存在
f中,因为您是一次性打开和读取文件。另外,请考虑使用with语句并将glob替换为pathlib。 -
必须是 Python 吗?这对
sed来说是微不足道的:sed -i '$d' foo.csv -
正如@JanChristophTerasa 所建议的,也许
head -n-1是一个更简单的选择。 -
@accdias 这是另一种方式,是的。虽然
head没有内置的 in-place 选项。 -
@accdias:因为我无法在这里回复代码作为评论,所以我在下面做了一个答案(对不起,我真的是新手)