2017-02-24 99 views
0

当我已经有了能够在本地就好读取文件python程序文件未找到:蟒蛇:使用绝对路径

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

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有我确实看到文件。

+0

'〜'由OS shell扩展。函数'read()'不使用shell来打开文件,也不能执行扩展。您必须首先将以'〜'开头的路径转换为绝对路径。 – DyZ

+0

我错了 - 那是 - 谢谢你! –

回答

1

您需要使用下面的函数来扩大 '〜'

os.path.expanduser(path) 

更新: 在你的情况下,它可能会如下:

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

非常感谢!我完全忽略了〜。我现在已经取代它了,可惜我仍然遇到同样的问题。我会更新上面的描述以摆脱路上的碰撞。 –

1

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

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

+0

如果您尝试回答,请保持建设性。 “你需要”不是建设性的。 – DyZ

+0

我不明白这种批评的理由。你能否给我一个建设性的例子,说明如何在未来更好地解释我的答案? 例如,这与您在大约同一时间做出的评论明显不同:“您必须首先将以'〜'开头的路径转换为绝对路径。”是“必须”与“需要”这两个词的用法吗? 我感谢您的指导。 –

+0

你刚刚改变了你的答案,使其具有建设性。 – DyZ

1

如前所述,您使用的是外壳特殊字符~在您的文件路径中,并且需要在打开之前转换为真实路径。通过这样做,您还可以在路径中允许环境变量:

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

非常感谢!我完全忽略了〜。我现在已经取代它了,可惜我仍然遇到同样的问题。我会更新上面的描述以摆脱路上的碰撞。 –

+0

我错了 - 那是 - 谢谢你! –