【问题标题】:Batch editing of csv files with Python使用 Python 批量编辑 csv 文件
【发布时间】:2013-10-09 08:30:06
【问题描述】:

我需要编辑几个 csv 文件。实际上,大多数文件都很好,只是需要更改的最后(第 41 列)列。对于该列中每次出现的特定字符串,我需要将其替换为不同的字符串;具体来说,每次出现的“S-D”都需要替换为“S”。我尝试使用 Python 完成此操作,但我认为我需要编写 csv 文件,但我不太确定如何执行此操作:

import os 
import csv


path=os.getcwd()

filenames = os.listdir(path)

for filename in filenames:

    if filename.endswith('.csv'):
        r=csv.reader(open(filename))

        for row in r:
            if row[40] == "S-D":
                row[40] = "S"

有什么帮助吗?此外,如果有人有一个快速、优雅的方式使用 shell 脚本来执行此操作,那可能对我也很有帮助。

【问题讨论】:

  • 旁白:您可能只想遍历glob.glob('*.csv')

标签: python csv scripting


【解决方案1】:

尝试这些方法。现在使用@SaulloCastro 提到的glob 模块和csv 模块。

import glob
import csv

for item in glob.glob(".csv"):
    r = list(csv.reader(open(item, "r")))
    for row in r:
        row[-1] = row[-1].replace("S-D", "S")
    w = csv.writer(open(item, "w"))
    w.writerows(r)

【讨论】:

  • 你可以使用import glob然后for item in glob.glob('*.csv')
  • @SaulloCastro 我总是忘记glob,但这是一个非常棒的模块。感谢提及
  • Downvoter here - 有一个 csv 模块,不要尝试自己解析 csv 文件。如果文件中的任何数据需要转义,您的代码就会中断,例如如果任何列中有换行符或,。 csv 读取器和写入器都会处理此问题,因此请使用它们。
  • 差不多,但是csv阅读器是一个迭代器,而不是一个列表;您应该使用累加器或将阅读器包装在list 中。哦,你的第二个open 电话缺少"w" :)
  • 现在应该都修好了
【解决方案2】:

请务必阅读CSV File Reading and Writing 的 Python 文档。在那里可以学到很多东西。这是基于您的问题的基本示例。只修改最后一列的数据,写出一个修改后的文件,名字中带“_edited”。

import os 
import csv


path=os.getcwd()

filenames = os.listdir(path)

for filename in filenames:

    if filename.endswith('.csv'):
        r=csv.reader(open(filename))
        new_data = []
        for row in r:
            row[-1] = row[-1].replace("S-D", "S")
            new_data.append(row)

        newfilename = "".join(filename.split(".csv")) + "_edited.csv"
        with open(newfilename, "w") as f:
            writer = csv.writer(f)
            writer.writerows(new_data)

【讨论】:

    猜你喜欢
    • 2021-09-28
    • 1970-01-01
    • 2022-11-24
    • 2022-01-04
    • 1970-01-01
    • 2014-01-15
    • 2012-12-24
    • 2020-02-19
    • 1970-01-01
    相关资源
    最近更新 更多