将.txt文件的交替行添加到wx.ListCtrl的简单方法?

时间:2013-03-05 22:13:45

标签: python wxpython listctrl

我想知道是否有一种简单的方法可以将文本文件中的数据添加到wxPython wx.ListCtrl并设置它,以便交替的行转到三个单独的列。因此,例如,第1,第4,第7和第10行将添加到第1列,第2,5,8和11行将添加到第2列,第3,6,9和12行将添加到第1列3 ......等等,等等。我使用with open("file.txt", 'r') as f:打开了.txt文件 然后使用f.readlines()[1]读取第一行并将其设置为让我们说变量a,然后手动将变量a添加到列表中,但我认为必须有更高效的这样做的方式。

或者,回想起来,还有另一种方法我应该将数据写入.txt文件吗?现在,当用户单击提交按钮时,我正在向文件写入三个项目。这些是应该在三列中显示的项目。现在每个人都在文本文件中单独一行,但也许我应该用逗号或其他东西分开它们?

感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

如果要获取列表中的每个第三项,可以执行myList [:: 3]。

例如,

Python 2.7 (r27:82525, Jul  4 2010, 09:01:59) [MSC v.1500 32 bit (Intel)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> a = []
>>> for i in xrange(1,22):
...     a.append(i)
...
>>> a
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21]
>>> b = a       # start index of b will be the first item
>>> b = b[::3]
>>> b
[1, 4, 7, 10, 13, 16, 19]
>>> c = a[1:]   # start index of c will be the second item
>>> c = c[::3]
>>> c
[2, 5, 8, 11, 14, 17, 20]
>>> d = a[2:]   # start index of d will be the third item
>>> d = d[::3]
>>> d
[3, 6, 9, 12, 15, 18, 21]

因此,您可以将readlines()列表拆分为3个单独的列表,然后将它们添加到ListCtrl中。

Readlines只返回一个列表,其中列表中的每个项目都是文件中的一行。因此,如果您将文件打开为f,它将如下所示,

with open("file.txt", 'r') as f:
    lines = f.readlines()
list1 = lines
list1 = list1[::3]
list2 = lines[1:]
list2 = list2[::3]
list3 = lines[2:]
list3 = list3[::3]

现在list1占据第三行(0,3,6,9),list2成立(1,4,7,10),list3成立(2,5) ,8,11)。