【问题标题】:Delete last line from multiple CSV files within a directory [duplicate]从目录中的多个 CSV 文件中删除最后一行 [重复]
【发布时间】: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:因为我无法在这里回复代码作为评论,所以我在下面做了一个答案(对不起,我真的是新手)

标签: python csv file


【解决方案1】:

这是一个可能的解决方案:

from glob import glob

csv_files = glob('./Original/*.csv')

for csv_file in csv_files:
    with open(csv_file) as f:
        lines = f.readlines()[:-1]

    with open(csv_file, 'w') as f:
        f.writelines(lines)
   

【讨论】:

  • 我的荣幸,@Joao。
猜你喜欢
  • 2020-05-18
  • 1970-01-01
  • 1970-01-01
  • 2019-10-09
  • 1970-01-01
  • 2018-12-13
  • 2016-03-05
  • 2017-09-01
  • 1970-01-01
相关资源
最近更新 更多