QFileDialog インスタンスが、特定のオペレーティング システムに対して間違った区切り文字を持つメンバー関数 selectedFile() の絶対パスを返していることに気付きました。これは、クロスプラットフォーム言語 (python) では想定されていません。
「os.sep」を使用する適切な OS に依存しない python コードの残りの部分が正しくなるように、これを修正するにはどうすればよいですか? どこで使用できるか、どこで使用できないかを覚えておく必要はありません。
QFileDialog インスタンスが、特定のオペレーティング システムに対して間違った区切り文字を持つメンバー関数 selectedFile() の絶対パスを返していることに気付きました。これは、クロスプラットフォーム言語 (python) では想定されていません。
「os.sep」を使用する適切な OS に依存しない python コードの残りの部分が正しくなるように、これを修正するにはどうすればよいですか? どこで使用できるか、どこで使用できないかを覚えておく必要はありません。
You use the os.path.abspath
function:
>>> import os
>>> os.path.abspath('C:/foo/bar')
'C:\\foo\\bar'
答えは、 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