Python读取:使用绝对路径时找不到文件

时间:2017-02-24 19:29:57

标签: python

我有一个能够在本地读取文件的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时,我确实看到了该文件。

3 个答案:

答案 0 :(得分:2)

您需要使用以下功能来扩展'〜'

os.path.expanduser(path)

<强>更新 在您的情况下,它可能如下:

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

答案 1 :(得分:1)

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

os.path.expanduser()可能对您有用。

答案 2 :(得分:1)

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

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