Python 逐行读取和写入txt文件的问题

Python 逐行读取和写入txt文件的问题,python,python-2.7,pyqt,Python,Python 2.7,Pyqt,该脚本使用PyQt4.10.1和Python2.7编写 我一直在开发一个简单的工具,允许用户搜索路径,然后将其保存到配置文件中,供其他程序稍后读取。如果已经存在配置文件,则脚本将读取该文件并显示用户要编辑或添加到的现有路径。我编写了一个gui,使它尽可能地对用户友好。我有几个问题 首先,在读取配置文件时,我使用了以下代码: try: self.paths = open(configFile, "r") self.data = self.paths.readlines()

该脚本使用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)
    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()
当我这样做时,我的gui中会出现以下内容:

这是您第一次输入数据时(在数据保存然后重新打开之前)的外观(如上所示)

这(如上)是保存配置文件并读回后数据的外观(请注意路径下方的额外空间)

配置文件仅在脚本首次打开时读取。 以下是写入配置文件时的外观

C:\Program Files
C:\MappedDrives
C:\NVIDIA
现在,所有这些都不是什么大问题,但当我打开配置文件用这个工具编辑它时,gui中的额外空间将被读取为另一个换行符。因此,配置文件随后打印为:

C:\Program Files

C:\MappedDrives

C:\NVIDIA
然后每次我编辑文件时,问题就变得越来越大

这个问题导致了第二个问题(我认为可能是罪魁祸首)。当我将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)
    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()
我假设额外换行符的问题是因为我手动添加换行符。问题是,我需要每个路径都位于自己的行上,以便配置文件稍后可用。我没有写文本文件的很多经验,每个人都说逐行写的最简单的方法是手工添加换行符。如果有人有更好的想法,我很乐意听听

对不起,我的解释太冗长了。如果我不够清楚,请告诉我,我会尽量更好地解释自己


谢谢你的帮助

问题在于每次读取文件时,换行符都会保留在行尾。从:

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'
在以后插入更多新行时,最简单的修复方法可能是:


问题是,每次读取文件时,换行符都保留在行尾。从:

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'
在以后插入更多新行时,最简单的修复方法可能是:


你的屏幕截图不显示,所以我不清楚你有什么问题。顺便说一句:用一个简单的例子提问更容易回答,对其他人以后发现这个问题更有帮助。在这种情况下,你可以用一个简单的列表替换用户界面代码,你也会得到同样的结果。我为这个具体的问题道歉。我以后会尽量抽象和概括。你的屏幕截图不会显示,所以我不清楚你有什么问题。顺便说一句:用一个简单的例子提问更容易回答,对其他人以后发现这个问题更有帮助。在这种情况下,你可以用一个简单的列表替换用户界面代码,你也会得到同样的结果。我为这个具体的问题道歉。我以后会尽量抽象和概括。