2013-05-10 57 views
-1

我注意到QFileDialog实例正在为给定操作系统返回具有错误分隔符的成员函数selectedFile()的绝对路径。这不是预期的跨平台语言(python)QFileDialog返回具有错误分隔符的选定文件

我应该怎么做才能纠正这个问题,以便使用'os.sep'的正确的与操作系统无关的python代码的其余部分可以正确?我不想记住我可以在哪里,不能使用它。

+0

有几乎没有任何理由使用os.sep。正斜杠在任何地方都是可移植的,并且使用os.sep只会导致代码混乱,不能提高可移植性。 – 2016-05-14 09:50:40

回答

-1

答案来自该提到我需要使用QDir.toNativeSeparators()

所以另一个线程(HERE)我没有在我的循环以下(这也许应该在PyQt的本身来为我们做了):

def get_files_to_add(some_directory): 
    addq = QFileDialog() 
    addq.setFileMode(QFileDialog.ExistingFiles) 
    addq.setDirectory(some_directory) 
    addq.setFilter(QDir.Files) 
    addq.setAcceptMode(QFileDialog.AcceptOpen) 
    new_files = list() 
    if addq.exec_() == QDialog.Accepted: 
    for horrible_name in addq.selectedFiles(): 
     ### CONVERSION HERE ### 
     temp = str(QDir.toNativeSeparators(horrible_name) 
     ### 
     # temp is now as the os module expects it to be 
     # let's strip off the path and the extension 
     no_path = temp.rsplit(os.sep,1)[1] 
     no_ext = no_path.split(".")[0] 
     #... do some magic with the file name that has had path stripped and extension stripped 
     new_files.append(no_ext) 
     pass 
    pass 
    else: 
    #not loading anything 
    pass 
    return new_files 
+1

我有兴趣从downvoter听到这个答案有什么错误,值得反对票。特别是因为它解决了我的问题。 – UpAndAdam 2013-05-13 19:12:20

2

您使用os.path.abspath功能:

>>> import os 
>>> os.path.abspath('C:/foo/bar') 
'C:\\foo\\bar' 
+0

这也适用。有趣的是,看到str.split(os.sep)在该字符串上按预期工作。但我认为这是因为在赋值或操作之后,删除了加倍的反斜杠。 – UpAndAdam 2013-05-13 14:23:28

+0

@UpAndAdam:没有双反斜杠。 ''''''当你通过'repr'传递它时,看起来像''''''。 – Blender 2013-05-13 15:28:27