2017-08-17 92 views
0

我列出了csv中的所有查找和替換條目。我的要求是在所有文本文件的子文件夾中執行查找和替換。使用Python查找和替換子文件夾/ TXT使用CSV文件3

這裏是CSV文件的外觀:

csvfind_replacement.csv 
xxx ;yyy 
111 ;AAA 
222 ;BBB 
333 ;CCC 

操作:

  1. 開放的文本從子文件夾一個文件接一個
  2. 找到xxxx和替換YYY
import os 
import csv 
# CSV file with find and replace format 
with open(r'C:\Users\user\Desktop\csvfind_replacement.csv','rb') as csvfind_replacement.csv: 
    reader = csv.reader(csvfind_replacement, delimiter=';') 

# walk through all file 

for root, dirs, files in os.walk(r'C:\Users\user\Desktop\test'): 
    for name in files: 
     file = open(「name」,」w」) 
      for row in reader: 
       replace(row[], column[]) 
    file.close 

以上是我的不完整/非工作代碼。只是想知道是否有任何輸入來完成從所有子文件夾的CSV查找和替換任務。

+0

所以,要通過「YYY」代替「XXX」的每一次出現,由「222」「111」每一次出現,因此對於每個文件?如果是這樣,只需使用'str.replace()' – saulspatz

+0

我在這裏錯過了一個具體問題‽你到底在問什麼?該代碼甚至沒有通過編譯器。 – BlackJack

回答

0

您的代碼有許多問題。 csv.reader是一個迭代器,所以一旦迭代它,它就是空的。在下面的代碼,我重新在每一個讀者通過循環,但它會更好地做一個清單:

listReader =名單(閱讀器)

一次,循環外面,然後你可以遍歷循環中的每個遍歷列表。我會讓你做到這一點。

我改變了你的CSV文件看起來像這樣:

cat csvfind_replacement.csv 
xxx;yyy 
111;AAA 
222;BBB 
333;CCC 

否則,分號之前的空間是搜索文本,我以爲你不想的一部分。

這裏是我的代碼:

import os 
import csv 

fn = 'csvfind_replacement.csv' 
os.chdir(r'/Users/saul/Desktop') 

for root, dirs, files in os.walk('csvTest'): 
    for name in files: 
     print(name) 
     if not (name.endswith('txt')): 
      continue 
     text = open(os.path.join(root, name)).read() 
     print("Before:") 
     print(text) 
     csvfile = open(fn, newline='') 
     reader = csv.reader(csvfile, delimiter = ';') 
     for row in reader: 
      if row: 
       text=text.replace(row[0], row[1]) 
     print('\nAfter') 
     print(text) 
     file = open(name,'w') 
     file.write(text) 
     file.close 
     csvfile.close()  

我csvTest文件夾中有兩個文本文件,text1.txt和test2.txt,並且還有個叫.DS_Store是MacOS的創建文件。它有一個子文件夾子文件,其中一個文本文件名爲test3.txt。

這裏是我的測試結果:

.DS_Store 
test1.txt 
Before: 
line 1 xxx 
line 2 111 
line 3 222 
line 4 333 


After 
line 1 yyy 
line 2 AAA 
line 3 BBB 
line 4 CCC 

test2.txt 
Before: 
line 1 111 
line 2 222222 
line 3 abcd 
line 4 xxx 
line 5 333111xxx 


After 
line 1 AAA 
line 2 BBBBBB 
line 3 abcd 
line 4 yyy 
line 5 CCCAAAyyy 

test3.txt 
Before: 
line 1 xxxxxxx 
line 2 111111 
line 3 222111 
line 4 3333 


After 
line 1 yyyyyyx 
line 2 AAAAAA 
line 3 BBBAAA 
line 4 CCC3 
+0

謝謝你的大力幫助! – user1582596

+0

這是我的榮幸。 – saulspatz

相關問題