2013-08-22 3 views
9

現在のディレクトリにとどまっている間、パスを使わずに別のディレクトリからファイルを開く必要があります。異なるディレクトリのすべてのファイルを開くpython

私は以下のコードを実行する場合:

for file in os.listdir(sub_dir): 
    f = open(file, "r") 
    lines = f.readlines() 
    for line in lines: 
     line.replace("dst=", ", ") 
     line.replace("proto=", ", ") 
     line.replace("dpt=", ", ") 

を、それがサブディレクトリにありますので、私は、エラーメッセージFileNotFoundError: [Errno 2] No such file or directory:を取得します。

質問sub_dirにファイルを見つけて開くために使用できるosコマンドはありますか?

ありがとうございます!私はこれが繰り返しであるかどうか知っています。私は検索して見つけられませんでしたが、それを見逃しているかもしれません。

+0

shutil使用してファイルをコピーします。 –

答えて

11

os.listdir()パスがないファイル名をリストします。再びsub_dirでこれらを付加:

for filename in os.listdir(sub_dir): 
    f = open(os.path.join(sub_dir, filename), "r") 

あなたがやっているすべてのファイル自体を超えるファイルから行をループ、単なるループであれば、 withを使用すると、完了したときにファイルが閉じられるようになります。少なくとも最後のではなく、str.replace()戻り新しい文字列値は、値そのものを変更しないで、あなたはその戻り値格納する必要がありますので:

for filename in os.listdir(sub_dir): 
    with open(os.path.join(sub_dir, filename), "r") as f: 
     for line in f: 
      line = line.replace("dst=", ", ") 
      line = line.replace("proto=", ", ") 
      line = line.replace("dpt=", ", ") 
+0

新しい行を 'filename'に書きたいと思ったら' f.write(line) 'を追加して' a'モードで開きますか? – hjames

+0

@hjames:もちろん、 'open()'呼び出しの 'mode'パラメータを調整するだけです。 –

+0

ええと、 'a'または' w'モードにすると、ファイルが読み込めないというエラーが返されます。 'r'モードにすると明らかにファイルに書き込めません。 – hjames

10

をこれらのファイルは、現在にない場合は、フルパスを与える必要がありますディレクトリ:これはPythonでファイルオブジェクトを作成するために使用されているので、私は、変数名、多分filenameとしてfileを使用していないだろう

f = open(os.path.join(sub_dir, file)) 

-1

コードは、あなたがそれを開くことができるようにopen()関数でファイルにsub_dirパスを追加する必要が

import shutil 
import os 

source_dir = "D:\\StackOverFlow\\datasets" 
dest_dir = "D:\\StackOverFlow\\test_datasets" 
files = os.listdir("D:\\StackOverFlow\\datasets") 

if not os.path.exists(dest_dir): 
    os.makedirs(dest_dir) 

for filename in files: 
    if file.endswith(".txt"): 
     shutil.copy(os.path.join(source_dir, filename), dest_dir) 

print os.listdir(dest_dir) 
関連する問題