2016-03-28 1 views
0

スクリプトが書き込まれたディレクトリとは異なるディレクトリにあるファイルをループするのに苦労しています。私は理想的には、私のスクリプトがsasaで始まるすべてのファイルに行きたいと思っています。 sasa.1、sasa.2などのフォルダ内にはいくつかのファイルがありますが、doc1.pdf、doc2.pdfなど他のファイルもあります。 私はPython Version 2.7をWindowsで使用しています。Python:別のディレクトリにあるファイルをループしてデータをスキャンする

すべての場所

1)のPythonスクリプトの場所の例:C:Users\user\python_project

2)Main_Directory例:C:Users\user\Desktop\Data

3)Current_Working_Directory例:C:Users\user\python_project

メインディレクトリには、これらの各フォルダは、関心のササファイルを含む多くのファイルが含まれている100個のフォルダ(フォルダA、B、C、Dなど。) が含まれています。 1つのファイル、次の作品のためのスクリプト

を実行している時

試み:スクリプトは次のように実行される

python script1.py

file_path = 'C:Users\user\Desktop\Data\A\sasa.1 

def writing_function(file_path): 
    with open(file_path) as file_object: 
     lines = file_object.readlines() 

for line in lines: 
print(lines) 

writing_function(file_path) 

をただし、以下は

を動作しません。

スクリプトは次のように実行されます。python script1.py A sasa.1

import os 
import sys 
from os.path import join 

dr = sys.argv[1] 
file_name = sys.argv[2] 

file_path = 'C:Users\user\Desktop\Data' 
new_file_path = os.path.join(file_path, dr) 
new_file_path2 = os.path.join(new_file_path, file_name) 

def writing_function(paths): 
    with open(paths) as file_object: 
     lines = file_object.readlines() 

for line in lines: 
    print(line) 

writing_function(new_file_path2) 

は、私は次のエラーを取得する:

with open(paths) as file_object:
IO Error: [Errno 2] No such file or directory:
'C:Users\\user\\Desktop\\A\\sasa.1'

今、私は1つのファイルだけに取り組んでいます、私はすべてをループできるようにしたいのでご注意くださいフォルダ内のsasaファイル

+0

'os.walk'を使用することを検討してください – chapelo

答えて

0

それはのラインで何かすることができます:

import os 
from os.path import join 

def function_exec(file): 
    code to execute on each file 

for root, dirs, files in os.walk('path/to/your/files'): # from your argv[1] 
    for f in files: 
     filename = join(root, f) 
     function_exec(filename) 

変数dirを使用しないでください。それはpythonのキーワードです。 https://docs.python.org/3/library/glob.html

私はあなたがその**魔法を使って、あなたの問題を解決することができると思います。print(dir(os))

dir_ = argv[1] # is preferable 
+0

私はargvでフォルダ名だけを渡すことができますか、それともファイルパス全体を渡す必要がありますか?理想的には、私は引数にフォルダ名を入れたいだけです 私はおそらく、コード内のメインフォルダまでの全パスを持つことができますが、私は単純にそのフォルダ名をフォルダ名にしたいと思いますファイルを含む。 –

+0

あなたはデータ "2)Main_Directory ex:C:Users \ user \ Desktop \ Data"とあなたのユーザが入力したディレクトリを持っているようなベースディレクトリに 'os.path.join()'を使うことができます。次のURLのドキュメントを参照してください。https://docs.python.org/3/library/os.path.html?highlight=join#os.path.join – chapelo

+0

ディレクトリが現在のディレクトリからの相対パスである場合は、 'os.getcwd()'を使用しています – chapelo

0

はまた、あなたは、誰がそう、これまでglobを述べない

os.chdir(path) 
+0

フォルダ名をディレクトリに渡すときにos.chdir(folder_name)を使ってみました。どのように私はそれを知らずにパス全体を渡すだろうか? –

0

を使用してディレクトリの場所を変更することができます注意してみてください:

If recursive is true, the pattern “**” will match any files and zero or more directories and subdirectories. If the pattern is followed by an os.sep, only directories and subdirectories match.

関連する問題