簡體   English   中英

逐行讀取和寫入txt文件問題

[英]Issues reading and writing txt files line by line

該腳本使用PyQt4.10.1和Python2.7編寫

我一直在使用一個簡單的工具來做,允許用戶搜索路徑,然后將其保存到配置文件中,以便另一個程序稍后讀取。 如果已經存在配置文件,則腳本將讀取該文件並顯示現有路徑,以供用戶編輯或添加。 我編寫了一個gui,以使其盡可能易於使用。 我有幾個問題。

首先,當我讀入配置文件時,我正在使用以下代碼:

try:
    self.paths = open(configFile, "r")
    self.data = self.paths.readlines()
    self.paths.close()
except:
    self.data = None

if self.data is not None:
        for line in self.data:
            print line
            #self.listDelegate is the model for my QListView
            self.listDelegate.insertRows(0, 1, line)

當我這樣做時,我在gui中得到以下內容:

初次輸入數據時的樣子

上面是第一次輸入數據時的樣子(在保存數據然后重新打開之前)

這是保存配置文件然后重新打開后數據的外觀

這是保存配置文件然后讀回之后的數據外觀(請注意路徑下方的多余空間)。

僅在首次打開腳本時讀取配置文件。 以下是配置文件被寫出后的外觀。

C:\Program Files
C:\MappedDrives
C:\NVIDIA

現在,所有這些都沒什么大不了的,但是當我打開配置文件以使用此工具對其進行編輯時,gui中的多余空間將被視為另一個換行符。 因此配置文件將被打印為:

C:\Program Files

C:\MappedDrives

C:\NVIDIA

每次我編輯文件時,問題就變得越來越大。

這個問題使我想到第二個問題(我認為可能是罪魁禍首)。 當我將從gui到配置文件的行寫入時,我使用以下代碼:

    rowCount = self.listDelegate.rowCount()

    if rowCount > 0:

        myfile = open(configFile, 'w')

        for i in range(rowCount):
            myfile.write(str(self.listDelegate.index(i).data(role = QtCore.Qt.DisplayRole).toPyObject()))
            myfile.write("\n")

        myfile.close()

我假設多余的換行符是因為我要手動添加換行符。 問題是我需要每個路徑都在其自己的行上,以便以后可以使用配置文件。 我沒有很多寫文本文件的經驗,每個人都說,逐行寫出文本最簡單的方法是手動添加換行符。 如果有人有更好的主意,我希望能聽到。

很抱歉,冗長的解釋。 如果我不夠清楚,請告訴我,我會盡力向自己解釋。

謝謝您的幫助!

問題是,每次您讀取文件時,換行符都保留在該行的末尾。 readline描述中

f.readline()從文件中讀取一行; 換行符( \\n )保留在字符串的末尾,如果文件未以換行符結尾,則僅在文件的最后一行省略。

如果你試試

self.paths = open(configFile, "r")
self.data  = self.paths.readlines()
for line in self.data:
    print repr(line)

它將每行的表示形式打印為python代碼,您將得到類似

'C:\\Program Files\n'
'C:\\MappedDrives\n'
'C:\\NVIDIA\n'

當您以后插入更多的換行符時,最簡單的解決方法可能是刪除尾隨的換行符

for line in self.data:
    strippedLine = line.rstrip('\n')

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM