繁体   English   中英

Python:查找并替换批处理csv文件中的字符串

[英]Python: Find and replace strings in batch csv files

我有数百个csv文件,我想搜索字符串“ Keyed,Bet”并将其更改为“ KeyedBet”。 该字符串可能在文件中或不在文件中,并且可能在不同文件的不同列中。

我将下面的脚本拼凑在一起,但是它不起作用。 我肯定使用了不正确的replace(),但无法完全弄清楚,并且在我真的不需要时创建新文件-如果它只是更新当前文件并以相同的名称保存,那将是很好(但超出了我的初学者能力)。

我在哪里错了? 谢谢您的帮助!

import os 
import csv


path='.'

filenames = os.listdir(path)

for filename in filenames:

    if filename.endswith('.csv'):
        r=csv.reader(open(filename))
        new_data = []
        for row in r:
            replace("Keyed,Bet","KeyedBet")
        new_data.append(row)   

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

为什么要重新发明轮子? 只需下载sed及其依赖项 ,然后

sed -i 's/Keyed,Bet/KeyedBet/ig' *.csv

编辑:上面的命令应该在Linux上正常工作。 Windows sed要求其带引号的标记被双引号而不是单引号。

sed -i "s/Keyed,Bet,KeyedBet/ig" *.csv

如果要更改原始文件,可以使用带inplace inplace=True fileinput.input实际修改原始文件, glob会在给定目录中找到所有适合您的csv文件:

from glob import iglob
import fileinput

path = '.' 

for line in fileinput.input(iglob(os.path.join(path, "*.csv")),inplace=True):
     print(line.replace("Keyed,Bet", "KeyedBet"),end="")

一行不多,但少于15行。

要创建新文件:

path='.'
from glob import iglob


for filename in  iglob(os.path.join(path,"*.csv")):
    with open(os.path.join(path,filename)) as f,open(os.path.join(path, os.path.splitext(filename)[0]+ "_edited3.csv"), "w") as f2:
        for line in f:
            f2.write(line.replace("Keyed,Bet", "KeyedBet"))

考虑到您要替换字符串,如果不使用csv模块就直接打开文件并使用str.replace会更容易,如果您知道字符串始终出现在同一行中,那么csv模块将是一个更好的选择,但似乎可以出现子字符串任何地方。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM