从Python中的打开文件获取路径


113

如果我有一个打开的文件,是否有os调用以字符串的形式获取完整路径?

f = open('/Users/Desktop/febROSTER2012.xls')

f,我将如何获得"/Users/Desktop/febROSTER2012.xls"

Answers:


145

此处的键是代表打开文件namef对象的属性。你得到这样的:

>>> f = open('/Users/Desktop/febROSTER2012.xls')
>>> f.name
'/Users/Desktop/febROSTER2012.xls'

有帮助吗?


4
对于由以下人员创建的文件:tempfile.TemporaryFile(mode='w', prefix='xxx', suffix='.txt')不起作用!
维克多

19
@Victor:请阅读tempfile模块文件的文档,尤其是有关tempfile.NamedTemporaryFile的文档,位于tempfile.TemporaryFile您所提到的文档的正下方。这是临时文件的特定情况,如文档所示,已经存在解决方案。tempfile.TemporaryFile并非要在您要读取名称的情况下使用。
塔德克2012年

12
如果您使用open('foo.txt','w')创建文件,然后执行f.name,则它仅向您提供输出foo.txt
searchengine27

Zans也提供了一种适用于相对路径的解决方案。请参阅下面的答案。
马库斯

如果需要名称,则有tempfile.NamedTemporaryFile。
Apollo Data

96

我有完全相同的问题。如果使用相对路径,则os.path.dirname(path)将仅返回相对路径。os.path.realpath可以解决这个问题:

>>> import os
>>> f = open('file.txt')
>>> os.path.realpath(f.name)

15
这实际上是真正的答案。
BlueTrin

1
仅当相对文件路径仍然是正确的文件路径时,此方法才有效。如果我从目录“〜/ Documents /”中将文件名指定为“ text.txt”,然后将目录更改为“〜/”,os.path.realpath将返回“〜/ text.txt”而不是“〜/ Documents / text.txt”。
尼尔森

1
我注意到realpath存在问题。它不会纠正文件字母字符的大小写,而是会在open语句中保留大小写。我曾希望它能返回文件系统上实际存在的文件名。(当然,这是Windows)
RufusVS

12

而且,如果您只想获取目录名称,而无需使用它附带的文件名,则可以使用osPython模块按照以下常规方式进行操作。

>>> import os
>>> f = open('/Users/Desktop/febROSTER2012.xls')
>>> os.path.dirname(f.name)
>>> '/Users/Desktop/'

这样,您就可以掌握目录结构。


如果使用,则返回空字符串f = open('febROSTER2012.xls')。您怎么能走完整的路?
新西兰元

3

您也可以这样获得它。

filepath = os.path.abspath(f.name)

2
它将附加到当前工作目录,而不是它实际所在的目录。
巴查(Bachsau)
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.