47712

[code]

    from PySide import QtGui
    from PySide import QtCore
    import sys
    import os
    
    class DirectoryPrinter(QtGui.QWidget):
        def __init__(self,parent=None):
            super(DirectoryPrinter,self).__init__(parent=None)
    
            self.filedialog_pushbutton = QtGui.QPushButton("filedialog",self)
            self.connect(self.filedialog_pushbutton,QtCore.SIGNAL("clicked()"),self.filename_getter)
    
        def filename_getter(self):
            print("os.getcwd()から得られたディレクトリです。",os.getcwd())
            filename = QtGui.QFileDialog.getOpenFileName(self,"ファイルを選択",os.path.expanduser("~"))[0]
            print("QFileDialogから得られたFileDialogの名前です。",filename)
    
    
    def main():
        try:
            QtGui.QApplication([])
        except Exception as e:
            print(22,e)
        directoryprinter = DirectoryPrinter()
        directoryprinter.show()
    
        sys.exit(QtGui.QApplication.exec_())
    if __name__ == "__main__":
        main()
    
[/code]

**結果**

[code]

    os.getcwd()から得られたディレクトリです。 J:\
    QFileDialogから得られたディレクトリです。 C:/Users/*******/hello.py
    
[/code]

スラッシュが全く逆になる現象です。  
気になるようだったら、(というかこの現象のせいで、ファイルの正確なディレクトリが取得できない問題に当たりました。)`replace`メソッドを行えば改善しますけれども・・・。  
どうしてこんな現象がおきるのでしょうか？  
パイソンにも右利きと左利きがあるのでしょうか。OSによって違うのでしょうか。  
また、皆様の環境ではどのようになりますか？


CC BY-SA 4.0
2018-08-22T00:47:12.230
47709
2018-08-22T01:29:43.057
2018-08-22T01:23:05.410
24284
24284
question
python python3 windows-10 pyqt pyside
ディレクトリを取得すると、場合によっては、スラッシュとバックスラッシュが入り混じるのはどうしてでしょうか？


`Qt` は同一のソースコードを OS によらず動かすためのものなので `Qt` 内の「パス」表記は `Linux` ベースのスラッシュ区切りを使います
(Windows/Linux によらず) 。

`os.getcwd` は実行する OS に固有の「パス」を取得するものなので `print os.getcwd()` の結果は  
- python 2.7.5@hppa2.0w-hp-hpux11.11 上では `/home/john/tmp`  
- python 2.7.3@i686-pc-cygwin 上では `/cygdrive/c/CYGWIN/HOME/john/tmp`  
- python 2.7.14@x86_64-pc-cygwin 上では `/home/john/tmp`  
となりました。 Windows 上でも Linux っぽい機能を使うための cygwin では python もスラッシュ区切りを使うということのようです。

`Qt` 上でパスを扱う上ではパス区切りはスラッシュに統一すればよいです。  
パスの取得には `Qt` の機能だけを使わないとはまります。混ぜるな危険。

Windows にあって Linux にない `\\\\.\COM10` みたいなパスを `Qt` 上で使うと Linux 非互換になっちゃいます。
`Qt` を使う以上は最初からそういうパスを扱わないよう/扱わなくて済むよう設計する必要がありそうです。


CC BY-SA 4.0
2018-08-22T01:29:43.057
47712
2018-08-22T01:29:43.057
8589
47709
answer