如何使用tkFileDialog获取文件的绝对路径?

6

我正在使用:

file = tkFileDialog.askopenfile(parent=root, mode='rb', 
       filetypes=[('Subrip Subtitle File','*.srt')], title='Choose a subtitle file')

获取用户指定的文件对象。

是否有办法从文件对象中获取该文件的绝对路径?

2个回答

13
file = tkFileDialog.askopenfile(parent=root,mode='rb',filetypes=[('Subrip Subtitle File','*.srt')],title='Choose a subtitle file')
abs_path = os.path.abspath(file.name)

2
只要在这两行代码之间没有 os.chdir() 调用,它就可以正常工作。所以在这个问题的情况下可能是可以的,但并不完美。我想不出一种总是能顺利工作的方法。 - Steve Losh
我不知道在GUI应用程序中使用os.chdir()的任何好理由 - 至少不是那种同时使用线程的方式,而这也是您可以在您控制的源代码的两行“之间”调用chdir()的唯一方式。 - Peter Hansen
这种方法可靠吗?在描述文件对象的.name属性时,Python文档说:“这是一个只读属性,可能不会出现在所有类似文件的对象上。”请参见:https://docs.python.org/2/library/stdtypes.html#file.name - Iron Pillow
@IronPillow 对于实际文件,应该是安全的,但对于StringIO对象(类似于文件),您将会得到一个属性错误。 - Himel Das

3
如果我正确理解你的问题,os.path.abspath应该能够满足你的需求。

如果我传递一个字符串,这可以很好地运行,但是我不知道如何从我的文件对象中获取路径作为字符串 :) - abcde123483
1
file.name 只会返回最初传入的路径。如果使用 open("test/sample.txt"),然后使用 os.chdir("/some/other/path"),则 f.name仍将返回 "test/sample.txt" - Steve Losh
1
@Steve,这有什么问题吗?我并没有说file.name会返回完整路径。我只是在回答OP评论中关于从文件对象获取路径作为字符串的问题。 - Nadia Alramli

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接