2017-08-17 12 views
0

私はすべての検索と置換エントリをcsvにリストアップしました。私の要件は、すべてのテキストファイルのサブフォルダ内の検索と置換を実行することです。サブフォルダ内での検索と置換/ TXT CSVファイルからPython 3を使用

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

操作:サブフォルダ1から

  1. オープンテキストファイル
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 
YYY検索xxxの
  • 1でと置き換えるここ

    は、CSVファイルがどのように見えるかです

  • 上記は私の不完全/非動作コードです。すべてのサブフォルダのCSVから検索と置換のタスクを完了するための入力があるかどうか疑問に思うだけです。

    +0

    だから、あなたはそれぞれのために、そう、「YYY」で「222」による「111」のすべての発生を「XXX」のすべての発生を置き換えるとしたいですファイル?もしそうなら、単に '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フォルダは、2つのテキストファイル、text1.txtとtest2.txtという名前の、そしてまた、MacOSのが作成する.DS_Storeという名前のファイルがあります。サブフォルダにはtest3.txtという名前のテキストファイルが1つあります。ここで

    は私のテスト結果は以下のとおりです。

    .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

    関連する問題