2011-11-28 1 views
3

名前が '.alleles.txt'で終わっている多くのフォルダで特定のファイルを開こうとしています。私は、ファイルを検索し、それが発見されたが、それが返されます。Pythonは、re.searchを使用して見つかったファイルを開くときにそのようなファイルやディレクトリを返しません。

例外IOError:[errnoを2]いいえそのようなファイルまたはディレクトリ:「abca3.alleles.txt」

私は試してみて、それを開きます。

folder = 'E:\\All Data' 
folderlisting = os.listdir(folder) 

for eachfolder in folderlisting: 
    print eachfolder 
    if os.path.isdir(folder + '\\' + eachfolder): 
     filelisting = os.listdir(folder + '\\' + eachfolder) 
+0

どのように 'ファイルリスト作成 'を作成しますか? –

+0

@DavidAlber編集済みの記事 – user1050337

+1

また、「\\」セパレータを追加するのではなく、 'os.path.join'を使用してください。それ以外の場合、コードはWindows上でのみ実行されます。 –

答えて

1

どのようにfilelistingを取得しました:

for eachfile in filelisting:      
    if re.search('\.alleles\.txt$', eachfile): 
     allelesfile = open(eachfile, 'r') 
     print '2' 

Directoryがで指定されていますか? filelisting = os.walk(directoryname)を使用した場合は、特別なタプルが返されます。あなたはそれを見ましたか?

そして、filelistingにファイルの完全パスが含まれていますか?ファイルは、スクリプトディレクトリ以外のディレクトリにある場合、それはdirectoryname変数に保存されている、あなたは彼らにこの道を開くために持っていると言う:

allelesfile = open(directoryname + "\\" + eachfile, 'r') 

あなたが情報を入れてまで、私たちは、あなたの質問に関する詳細な情報を与えることができませんここ(実際のfilelisting値など)。

1

ファイル名の一部に非ASCII文字が含まれている疑いがあります。お試しください

folder = u'E:\\All Data' 
folderlisting = os.listdir(folder) 

for eachfolder in folderlisting: 
    print eachfolder 
    if os.path.isdir(os.path.join(folder,eachfolder)): 
     filelisting = os.listdir(os.path.join(folder,eachfolder)) 

接頭辞u'...'に注意してください。それがなければ、os.listdir()はあなたのファイル名にASCII以外の文字を静かに落としたり、ASCIIファイルにしたりすることがあります。 this questionも参照してください。

これはdocs for os.listdir(path)に記載されています

On Windows NT/2k/XP and Unix, if path is a Unicode object, the result will be a list of Unicode objects. Undecodable filenames will still be returned as string objects.

2

あなたはglobを使用する必要があります。あなたがPythonプログラムを実行しているディレクトリからファイルを開こうとしているので、この

import glob 

files = glob.glob('E:\\All Data\\*\\*.alleles.txt') 
+0

ここでの問題は、各ディレクトリからファイルを一度に1つずつ開いてから、同じディレクトリ内の他のファイルを使用して作業したいということです。私はグロブがどのディレクトリから簡単に同じディレクトリにファイルを一致させることができるのかわかりません。 – user1050337

+0

'os.path.dirname'でパスのディレクトリ部分を取得できます –

1

エラーが表示されてみてください。ファイルが存在するディレクトリではありません。

openには、ファイルのフルパス(ディレクトリ名を含む)を指定する必要があります。

関連する問題