2017-03-02 9 views
0

複数の.txtファイルを含むフォルダ内の文字列をpythonで検索しようとしています。
私の目的は、文字列を含むファイルを見つけて別のフォルダに移動/または書き直すことです。 は私がしようとしたことは次のとおりです。複数のtxtファイルを含むフォルダ内の文字列と一致するtxtファイルを移動/書き換え

import os 

for filename in os.listdir('./*.txt'): 
    if os.path.isfile(filename):  
     with open(filename) as f: 
      for line in f: 
      if 'string/term to be searched' in line: 
       f.write 
       break 

おそらくそこにこれと間違って何かがあるものの、当然のことながら、それを把握することはできません。

+1

すべきですか?何が起こるはずですか? – Dschoni

+0

と ':' f.write'は、ファイルに書きたい文字列を 'something'とした' f.write(something) 'でなければなりません。 – Dschoni

答えて

0

os.listdir引数はパターンではなく、パスでなければなりません。アントニオが言うように、それは読み取りモードで開かれているので、あなたがFに書き込むことはできません

import os 
import glob 

for filename in glob.glob('./*.txt'): 
    if os.path.isfile(filename):  
     with open(filename) as f: 
      for line in f: 
       if 'string/term to be searched' in line: 
        # You cannot write with f, because is open in read mode 
        # and must supply an argument. 
        # Your actions 
        break 
0

:あなたは、そのタスクを達成するためにglobを使用することができます。この問題を回避するために 可能な解決策は以下の通りです:

import os 
import shutil 

source_dir = "your/source/path" 
destination_dir = "your/destination/path" 


for top, dirs, files in os.walk(source_dir): 
    for filename in files: 
     file_path = os.path.join(top, filename) 
     check = False 
     with open(file_path, 'r') as f: 
      if 'string/term to be searched' in f.read(): 
       check = True 
     if check is True: 
      shutil.move(file_path, os.path.join(destination_dir , filename)) 

あなたのsource_dirやdestination_dirは、いくつかの「特殊文字」が含まれている場合、あなたは二重のバックスラッシュを入れて持っていることを忘れないでください。

たとえば、この:

source_dir = "C:\documents\test" 

はどうなり

source_dir = "C:\documents\\test" 
関連する問題