【问题标题】:Get path from open file in Python从 Python 中打开的文件中获取路径
【发布时间】:2012-03-03 01:05:41
【问题描述】:

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

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

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

【问题讨论】:

    标签: python


    【解决方案1】:

    这里的关键是代表打开文件的f对象的name属性。你是这样理解的:

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

    有帮助吗?

    【讨论】:

    • 对于由tempfile.TemporaryFile(mode='w', prefix='xxx', suffix='.txt')创建的文件不起作用!
    • @Victor:请阅读tempfile 模块的文档,尤其是tempfile.NamedTemporaryFile,就在您提到的tempfile.TemporaryFile 的文档下方。这是临时文件的特定情况,如文档中所见,已经存在解决方案。 tempfile.TemporaryFile 不打算用于您想阅读名称的情况。
    • 如果你使用 open('foo.txt', 'w') 创建一个文件然后执行 f.name,它只会为你提供输出 foo.txt
    • Zans 提供了一种适用于相对路径的解决方案。请参阅下面的答案。
    • 请记住,如果您使用像f = open('some/relative/path') 这样的相对路径,然后像os.chdir('somewhere/esle') 这样更改工作目录,那么f.name 将不会相应更新,并且在您的当前工作目录。
    【解决方案2】:

    我遇到了完全相同的问题。如果您使用的是相对路径 os.path.dirname(path) 将只返回相对路径。 os.path.realpath 成功了:

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

    【讨论】:

    • 这才是真正的答案。
    • 这仅在相对文件路径仍然是正确的文件路径时才有效。如果我从目录“~/Documents/”将文件名指定为“text.txt”,然后将目录更改为“~/”,os.path.realpath 将返回“~/text.txt”而不是“~/Documents/text”。 txt'。
    • 我注意到 realpath 有问题。它不会更正文件字母字符的大小写,而是保留 open 语句中使用的大小写。我曾希望它会返回文件系统上实际存在的文件名。 (当然是 Windows)
    • 请注意f.name 在重命名文件时不会更改,而文件处理程序仍将指向现在位于不同名称下的文件。 (至少在我的 gnu/linux 发行版中是这样的)。所以严格来说f.name不一定返回当前文件名
    • 另一个问题是name 可能类似于<stdin>
    【解决方案3】:

    如果您只想获取目录名而不需要随附的文件名,那么您可以使用os Python 模块以以下常规方式完成。

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

    这样你就可以掌握目录结构了。

    【讨论】:

    • 如果您使用f = open('febROSTER2012.xls'),这将返回一个空字符串。如何才能到达完整路径?
    【解决方案4】:

    你也可以这样得到。

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

    【讨论】:

    • 这会将它附加到当前工作目录,而不是它实际所在的目录。
    猜你喜欢
    • 1970-01-01
    • 2011-07-13
    • 1970-01-01
    • 1970-01-01
    • 2020-02-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多