【问题标题】:Python read: file not found when using absolute path [duplicate]Python读取:使用绝对路径时找不到文件[重复]
【发布时间】:2017-07-15 18:25:49
【问题描述】:

我有一个 Python 程序可以很好地在本地读取文件:

在我有这个程序的目录中,有一个名为 path_list 的文件(它是一个文件路径列表),我可以像这样打开和访问它:

test_explicit = open('path_list').read()
print 'Reading local file gives: ' +  test_explicit

然后程序将遍历这些路径并在每个路径上调用以下函数,根据它在上面的版本目录中找到的内容执行操作。不幸的是,当我有绝对路径而不是相对路径时,那些相同的打开/读取操作会给出“没有这样的文件或目录”错误。 (但是当我打印出它试图去的地方并在那里时,我看到了我期望的内容)。

这是我的代码的相关部分:

    def getCommand(path):

      # Grab that trailing /version, strip the v, convert to int
      split_path = path.split("/")
      version = split_path.pop()
      version_num = int (version[1:] )

      # Increment that number, and remake path with a fresh /v(x+1) suffix
      version_num += 1
      new_suffix = '/v' + str(version_num)
      higher_file_path = '/'.join(split_path)
      higher_file_path += new_suffix

      finished_filename = 'finished.txt'
      finished_filepath = os.path.join(higher_file_path, finished_filename)

      result = open(finished_filepath).read()
      print 'Result is: ' + result
[more code]

当我运行它时,openread() 出现故障:

IOError: [Errno 2] No such file or directory: '~/scripts/test/ABC/v4/finished.txt'

但是当我在lscd 那里看到文件时。

【问题讨论】:

  • '~' 由 OS shell 扩展。函数read() 不使用shell 来打开文件并且不能进行扩展。您必须先将以“~”开头的路径转换为绝对路径。
  • 我错了-是的-谢谢!

标签: python


【解决方案1】:

你需要使用下面的函数来扩展'~'

os.path.expanduser(path)

更新: 在您的情况下,它可能如下所示:

result = open(os.path.expanduser(finished_filepath)).read()

【讨论】:

  • 非常感谢!我完全忽略了〜。我现在已经更换了它,遗憾的是我仍然遇到同样的问题。我将更新上面的描述以消除路上的颠簸。
【解决方案2】:

~ 不是 Python 中 /home/username//Users/username/ 的有效快捷方式。您将需要使用完整的扩展路径。

os.path.expanduser() 在这里可能对你有用。

【讨论】:

  • 如果您尝试回答,请保持建设性。 “你将需要”不是建设性的。
  • 我不明白这种批评的原因。你能给我一个建设性的例子,说明将来如何更好地表达我的答案吗?例如,这与您在大约同一时间发表的评论有何显着不同:“您必须首先将以 '~' 开头的路径转换为绝对路径。”是“必须”与“需要”这个词的用法吗?感谢您的指导。
  • 您刚刚更改了答案以使其具有建设性。
  • 我在看到您的评论之前更改了答案,因为我想添加更多信息。我不相信我的回答以前没有建设性。我在解释 ~ 在 Python 中不会自动扩展,而是需要使用扩展路径。
  • 非常感谢!我完全忽略了〜。我现在已经更换了它,遗憾的是我仍然遇到同样的问题。我将更新上面的描述以消除路上的颠簸。
【解决方案3】:

如前所述,您在文件路径中使用了 shell 特殊字符 ~,需要在打开之前将其转换为真实路径。您还可以通过执行以下操作在路径中允许环境变量:

path = os.path.expanduser(os.path.expandvars(path))

【讨论】:

  • 非常感谢!我完全忽略了〜。我现在已经更换了它,遗憾的是我仍然遇到同样的问题。我将更新上面的描述以消除路上的颠簸。
  • 我错了-是的-谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多