[英]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.