Python не возвращает такой файл или каталог при открытии файла, который он только что нашел с помощью re.search - PullRequest
3 голосов
/ 28 ноября 2011

Я пытаюсь открыть определенный файл во многих папках с именем, оканчивающимся на «.alleles.txt». Я ищу файл, и он найден, но затем он возвращает:

IOError: [Errno 2] Нет такого файла или каталога: 'abca3.alleles.txt'

когда я пытаюсь открыть его.

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

Каталог указан:

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)

Ответы [ 4 ]

2 голосов
/ 28 ноября 2011

Вы должны использовать glob. Попробуйте это

import glob

files = glob.glob('E:\\All Data\\*\\*.alleles.txt')
1 голос
/ 28 ноября 2011

Ошибка появляется, потому что она пытается открыть файл из каталога, в котором вы запускаете программу python;а не каталог, в котором находится файл.

Вам необходимо указать open полный путь к файлу (включая имя каталога).

1 голос
/ 28 ноября 2011

У меня есть подозрение, что некоторые из ваших имен файлов содержат не-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() может молча отбрасывать или ASCIIfy не-ASCII-символы в ваших именах файлов, что, конечно, приводит к неправильным именам файлов. Смотри также этот вопрос .

Это указано в документах для os.listdir(path):

В Windows NT / 2k / XP и Unix, если path является объектом Unicode, результат будет список объектов Unicode. Не декодируемые имена файлов по-прежнему будут возвращается как строковые объекты.

1 голос
/ 28 ноября 2011

Как вы получили filelisting? Если вы использовали filelisting = os.walk(directoryname), то он перезапускает специальный кортеж. Вы смотрели на это?

И содержит ли filelisting полный путь к файлам? Если файлы находятся в каталоге, отличном от каталога сценария, скажем, он хранится в переменной directoryname, вы должны открыть их следующим образом:

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

Мы не можем предоставить дополнительную информацию о вашем вопросе, пока вы не укажете здесь информацию (фактическое значение filelisting и т. Д.).

...