странно нет такого файла или каталога в python

Я новичок в python, и следующий фрагмент кода сводит меня с ума. Он перечисляет файлы в каталоге и для каждого файла делает что-то. Я получаю IOError: [Errno2] No such file or directory: my_file_that_is_actually_there!

def loadFile(aFile):
  f_gz = gzip.open(aFile, 'rb')
  data = f_gz.read()
  #do some stuff...
  f_gz.close()
  return data

def main():
  inputFolder = '../myFolder/'
  for aFile in os.listdir(inputFolder):
    data = loadFile(aFile)
    #do some more stuff

Файл существует и не поврежден. Я не понимаю, как это возможно, что python сначала находит файл, когда проверяет содержимое myFolder, а затем уже не может его найти... Это происходит на второй итерации моего цикла for только с любыми файлами.

ПРИМЕЧАНИЕ. Почему это исключение возникает ТОЛЬКО на второй итерации цикла?? Первый файл в папке найден и открыт без проблем...


person Marsellus Wallace    schedule 10.11.2012    source источник
comment
возможный дубликат IOError при попытке открыть существующие файлы   -  person Martijn Pieters    schedule 11.11.2012
comment
Мартейн, пожалуйста, проверьте мое редактирование (я добавил примечание). Эта деталь не рассматривается в вопросе, указанном в вашем комментарии.   -  person Marsellus Wallace    schedule 11.11.2012
comment
Это может произойти только в том случае, если локальный каталог имеет точное имя файла, найденное в ../myFolder/. Вы открываете не тот файл. Таким образом, если есть ../myFolder/foo, также есть ./foo.   -  person Martijn Pieters    schedule 11.11.2012


Ответы (1)


Это связано с тем, что open получает локальное имя (возвращенное от os.listdir). Он не знает, что вы имеете в виду, что он должен искать в ../myFolder. Таким образом, он получает относительный путь и применяет его к текущему каталогу. Чтобы исправить это, попробуйте:

data = loadFile(os.path.join(inputFolder, aFile))
person Lev Levitsky    schedule 10.11.2012
comment
Поскольку inputFolder — это относительный путь, стоит отметить, что он также зависит от того, где выполняется скрипт. Это решение не будет работать при выполнении из неправильного каталога. - person Maehler; 11.11.2012
comment
При запуске из неправильного каталога скрипт, вероятно, завершится ошибкой на этапе os.listdir :) - person Lev Levitsky; 11.11.2012
comment
спасибо, это работает! Но ПОЧЕМУ эта проблема возникает только на второй итерации цикла? Есть ли что-то, что я должен знать конкретно о python? - person Marsellus Wallace; 11.11.2012
comment
@Gevorg Возможно, первая итерация встречает имя файла, которое существует как в текущем каталоге, так и в ../myFolder/. - person user4815162342; 11.11.2012