【问题标题】:weird no such file or directory in python奇怪的是python中没有这样的文件或目录
【发布时间】:2012-10-30 20:29:57
【问题描述】:

我是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 循环的第二次迭代中,只有任何文件。

注意:为什么这个异常只发生在循环的第二次迭代?找到并打开文件夹中的第一个文件,没有任何问题...

【问题讨论】:

  • Martijn,请检查我的编辑(我添加了注释)。您评论中链接的问题未解决此详细信息。
  • 只有当本地目录恰好具有与../myFolder/ 中相同的文件名时,才会发生这种情况。您打开了错误的文件。所以如果有一个../myFolder/foo,那么也有一个./foo

标签: python ioexception filenotfoundexception


【解决方案1】:

这是因为open 接收本地名称(从os.listdir 返回)。它不知道你的意思是它应该在../myFolder 中查找。所以它接收一个相对路径并将其应用于当前目录。要修复它,请尝试:

data = loadFile(os.path.join(inputFolder, aFile))

【讨论】:

  • 由于inputFolder是相对路径,值得注意的是它还取决于脚本的执行位置。从“错误”目录执行时,此解决方案将不起作用。
  • 当从“错误”目录运行时,脚本可能会在os.listdir 阶段失败:)
  • 谢谢,这行得通!但是为什么这个问题只在循环的第二次迭代中出现呢?关于python,我有什么需要特别了解的吗?
  • @Gevorg 可能是第一次迭代遇到的文件名恰好存在于当前目录和../myFolder/ 中。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-01-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多