我注意到 QFileDialog 实例返回的成员函数 selectedFile() 的绝对路径对于给定的操作系统具有错误的分隔符。这在跨平台语言(python)上是不期望的
我应该怎么做才能纠正这个问题,以便我使用'os.sep'的其他与操作系统无关的python代码可以正确?我不想记住我在哪里可以和不能使用它。
我注意到 QFileDialog 实例返回的成员函数 selectedFile() 的绝对路径对于给定的操作系统具有错误的分隔符。这在跨平台语言(python)上是不期望的
我应该怎么做才能纠正这个问题,以便我使用'os.sep'的其他与操作系统无关的python代码可以正确?我不想记住我在哪里可以和不能使用它。
您使用以下os.path.abspath
功能:
>>> import os
>>> os.path.abspath('C:/foo/bar')
'C:\\foo\\bar'
答案来自另一个线程(HERE),其中提到我需要使用 QDir.toNativeSeparators()
所以我在我的循环中做了以下事情(这可能应该在 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