2017-08-17 84 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

相关问题