[英]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.