首頁 > 軟體

PyQt轉換路徑中的斜槓(斜槓(/)與反斜槓(\)轉換)

2022-07-19 18:01:20

1.問題背景        

PyQt是寫Python圖形化使用者介面(Graphical User Interface,簡稱 GUI,又稱圖形使用者介面)的一大利器,但是因為其跨平臺的特性,導致可能在Windows系統上使用的GUI使用的路徑是由斜槓(/)組成的,而Windows系統預設使用的是反斜槓(),如下圖:

這就會導致一些不可預料的錯誤發生,如我在之前的部落格里面所講:

Python提取Word中的圖片

在使用doc2docx進行doc檔案轉為docx檔案時,在獲取使用者需要處理的路徑後呼叫doc2docx,在高版本pywin32中,已經不支援傳入的路徑由斜槓組成了,會引發pywintypes.com_error報錯(老版本221可以支援斜槓組成的檔案路徑):

Traceback (most recent call last):
  File "C:UsersJayceAnaconda3envstf1.7libsite-packagesIPythoncoreinteractiveshell.py", line 3343, in run_code
    exec(code_obj, self.user_global_ns, self.user_ns)
  File "<ipython-input-2-f52e8eccf39d>", line 1, in <module>
    runfile('E:/Code/Python/doc2docx.py', wdir='E:/Code/Python')
  File "C:Program FilesJetBrainsPyCharm 2020.1pluginspythonhelperspydev_pydev_bundlepydev_umd.py", line 197, in runfile
    pydev_imports.execfile(filename, global_vars, local_vars)  # execute the script
  File "C:Program FilesJetBrainsPyCharm 2020.1pluginspythonhelperspydev_pydev_imps_pydev_execfile.py", line 18, in execfile
    exec(compile(contents+"n", file, 'exec'), glob, loc)
  File "E:/Code/Python/doc2docx.py", line 30, in <module>
    doc2docx(doc_path, docx_path)
  File "E:/Code/Python/doc2docx.py", line 15, in doc2docx
    doc = word.Documents.Open(doc_name)
  File "<COMObject <unknown>>", line 8, in Open
pywintypes.com_error: (-2147352567, '發生意外。', (0, 'Microsoft Word', '很抱歉,找不到您的檔案。該專案是否已移動、重新命名或刪除?r (E:\//Win10/Datasets/Test%20sample/提取圖...)', 'wdmain11.chm', 24654, -2146823114), None)

2.解決方案

2.1.斜槓轉反斜槓( / 轉 )

使用QtCore.QDir.toNativeSeparators方法:

from PyQt5 import QtCore
 
# word操作庫只支援反斜槓,所以需要將QT拿到的正斜槓(/)轉反斜槓()
doc_path = r'E:/Win10/Datasets/Test sample/提取圖片/tmp.doc'
print('原始路徑:{}'.format(doc_path))
path = QtCore.QDir.toNativeSeparators(doc_path)
print('轉換後路徑:{}'.format(path))

可以看到成功轉化:

2.2.反斜槓轉斜槓( 轉 / )

使用QtCore.QDir.fromNativeSeparators方法: 

# 反斜槓()轉正斜槓(/)
doc_path = r'E:Win10DatasetsTest sample提取圖片tmp.doc'
print('原始路徑:{}'.format(doc_path))
path = QtCore.QDir.fromNativeSeparators(doc_path)
print('轉換後路徑:{}'.format(path))

可以看到成功轉化:

到此這篇關於PyQt轉換路徑中的斜槓(斜槓(/)與反斜槓()轉換)的文章就介紹到這了,更多相關PyQt轉換路徑斜槓內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!


IT145.com E-mail:sddin#qq.com