1

脚本使用 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()

我假设额外换行符的问题是因为我手动添加换行符。问题是我需要每个路径都在自己的行上,以便以后可以使用配置文件。我没有很多编写文本文件的经验,每个人都说逐行写出它们的最简单方法是手动添加换行符。如果有人有更好的想法,我很想听听。

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

谢谢您的帮助!

4

1 回答 1

1

问题是每次读取文件时,换行符都保留在行尾。从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')
于 2013-08-15T10:30:00.267 回答