繁体   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