天天看點

pyqt5 getsavefilename 預設檔案名_實戰PyQt5: 126-使用QFile進行檔案操作QFile簡介測試本文知識點

pyqt5 getsavefilename 預設檔案名_實戰PyQt5: 126-使用QFile進行檔案操作QFile簡介測試本文知識點

在前面的系列文章中,我們已經大量接觸到文章操作,比如打開讀取一個圖像檔案,儲存圖像檔案,編輯文本檔案等等。在本文将詳細介紹Qt中的檔案操作接口類QFile來處理檔案的I/O操作。

QFile簡介

QFile類提供用于讀取和寫入檔案的接口。QFile是用于讀取和寫入文本及二進制檔案的I/O裝置。QFile可以單獨使用,也可以和QTextStream或QDataStream一起使用。

在建立QFile對象的時候,就可以指定檔案名,也可以在建立對象後随時使用setFileName()函數進行設定。不管作業系統是什麼,QFile中的檔案分隔符均為'/'。QFile不支援使用其他分隔符(例如: '')。

下面的示例示範了使用QFile逐行讀取文本檔案:

file = QFile('in.txt')if not file.open(QIODevice.ReadOnly | QIODevice.Text):    return while not file.atEnd():    line = QByteArray(file.readLine())    process_line(line)
           

QIODevice.Text标志告訴Qt将Windows樣式的行終止符(“ r n”)轉換為C ++樣式的終止符(“ n”)。在預設情況下,QFile假定為二進制,它不對檔案中存儲的位元組執行任何轉換。

下面的示例示範使用QTextStream來逐行讀取文本檔案。

file = QFile('in.txt')if not file.open(QIODevice.ReadOnly | QIODevice.Text):    return in = QTextStream(file)while not in.atEnd():    line = in.readLine()    process_line(line)
           

QFile的常用函數:

  • open(self, ...):打開一個檔案裝置。
  • copy(self, newName):将目前由fileName()指定的檔案複制到newName的檔案中。
  • rename(self, newName):将目前由fileName()指定的檔案重命名為newName。
  • rename(oldname, newName):靜态函數,将檔案oldName重命名為newName。
  • setFileName(self, str):設定檔案名。
  • fileName(self):傳回由setFileName()或建立QFile()時設定的檔案名稱。
  • close(self):關閉檔案裝置。

測試

測試代碼示範使用QFile和QTextStream來加載和儲存文本檔案, 完整代碼如下:

import sysfrom PyQt5 import QtCore, QtGui, QtWidgetsfrom PyQt5.QtCore import Qt, QFile, QTextStream, QIODevice, QByteArrayfrom PyQt5.QtWidgets import (QApplication, QMainWindow, QMessageBox,                             QMenuBar, QMenu, QAction, QFileDialog,                              QPlainTextEdit) class DemoFile(QMainWindow):    def __init__(self, parent=None):        super(DemoFile, self).__init__(parent)                    # 設定視窗标題        self.setWindowTitle('實戰Qt for Python: QFile示範')              # 設定視窗大小        self.resize(480, 360)              self.initUi()            def initUi(self):        self.initMenuBar()                self.txtEditor = QPlainTextEdit()        self.setCentralWidget(self.txtEditor)        def initMenuBar(self):        menuBar = self.menuBar()         menuFile = menuBar.addMenu('檔案(&F)')                #打開檔案        actionFileOpen = QAction('打開(&O)...', self)        actionFileOpen.setShortcut(Qt.CTRL + Qt.Key_O)        actionFileOpen.setToolTip('打開一個文本檔案')        actionFileOpen.triggered.connect(self.onFileOpen)                #儲存        actionFileSave = QAction('儲存(&S)', self)         actionFileSave.setShortcut(Qt.CTRL + Qt.Key_S)        actionFileSave.setToolTip('儲存文本檔案')        actionFileSave.triggered.connect(self.onFileSave)                actionFileSaveAs = QAction('另存為(&A)...', self)        actionFileSaveAs.triggered.connect(self.onFileSaveAs)          actionExit = QAction('退出(&X)', self)        actionExit.triggered.connect(QApplication.instance().quit)                menuFile.addAction(actionFileOpen)        menuFile.addAction(actionFileSave)        menuFile.addAction(actionFileSaveAs)        menuFile.addSeparator()        menuFile.addAction(actionExit)              def msgCritical(self, strInfo):        dlg = QMessageBox(self)        dlg.setIcon(QMessageBox.Critical)        dlg.setText(strInfo)        dlg.show()               def onFileOpen(self):        path,_ = QFileDialog.getOpenFileName(self, '打開檔案', '', '文本檔案 (*.txt)')        if path:            f = QFile(path)            if not f.open(QIODevice.ReadOnly | QIODevice.Text):                self.msgCritical('打開檔案失敗')                return False                        self.path = path            self.txtEditor.setPlainText(QTextStream(f).readAll())            f.close() #關閉檔案                      def onFileSave(self):        if self.path is None:            return self.onFileSaveAs()        self._saveToPath(self.path)            def _saveToPath(self, path):        f = QFile(path)        if not f.open(QIODevice.WriteOnly):            self.msgCritical('打開檔案失敗')            return False                    self.path = path        outText = QTextStream(f)        outText <
           

運作結果如下圖:

pyqt5 getsavefilename 預設檔案名_實戰PyQt5: 126-使用QFile進行檔案操作QFile簡介測試本文知識點

測試QFile

本文知識點

  • QFile是用于讀取和寫入文本及二進制檔案的I/O裝置。
  • QFile和QTextStream結合使用打開和儲存文本檔案。

前一篇: 實戰PyQt5: 125-使用配置檔案來儲存和恢複應用的設定

繼續閱讀