簡體   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