странно, че няма такъв файл или директория в 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. Така че получава относителен път и го прилага към текущия dir. За да го поправите, опитайте:

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