2013-04-05 217 views
0

所以,我想知道如何分割文件的行并将它们放入列表中?我测试了,对于列表中的一个部分而不是其他块工作的代码:分割线条和线条

文件看起来像:

Rank Ballots 

Riding 0 

NDP LIBERAL GREEN CPC 

NDP GREEN LIBERAL CPC 

CPC LIBERAL GREEN NDP 

NDP GREEN LIBERAL CPC 


Riding 1 

NDP LIBERAL GREEN CPC 

LIBERAL GREEN NDP CPC 

NDP GREEN LIBERAL CPC 

LIBERAL GREEN NDP CPC 

NDP GREEN LIBERAL CPC 

等等。

这是用于第一半的代码,骑0:) 线= f.readline(

while line !='': 
    district = str.split(line) 
    line = f.readline() 
    a.append(district) 
print(a) 

这是我为第二半部的代码:

header = f.readline().rstrip() 
riding = f.readline().rstrip() 
riding = f.readline().rstrip() 
votes = [] 

while riding !='': 
    rank = str.split(riding) 
    votes = [] 
    while rank != '': 
     votes.append(rank) 
     rank = str.split(riding) 
     riding = f.readline().rstrip() 

    print(votes) 
    riding = f.readline().rstrip() 

当我打印它只是一个空白。我想知道有没有人可以帮忙。输出应该是每个骑行的列表清单。所以,对于骑术0:它会是[[线1],[线2]等]和骑术1:[[线1],[线2]]等

回答

0

这应该为你解决 -

import re 

f = open('x.txt') 
d = [l.strip() for l in f.readlines() if l.strip()] 

groups = {} 
curr_key = '' 
for line in d: 
    if re.search('Riding [0-9]+', line): 
     curr_key = line 
     groups[curr_key] = [] 
    elif curr_key: 
     groups[curr_key].append([line]) 

print groups 

>>> {'Riding 1': [['NDP LIBERAL GREEN CPC'], ['LIBERAL GREEN NDP CPC'], ['NDP GREEN LIBERAL CPC'], ['LIBERAL GREEN NDP CPC'], ['NDP GREEN LIBERAL CPC']], 'Riding 0': [['NDP LIBERAL GREEN CPC'], ['NDP GREEN LIBERAL CPC'], ['CPC LIBERAL GREEN NDP'], ['NDP GREEN LIBERAL CPC']]} 
+0

输出应该列出的名单,每一个骑,但骑不应该在列表中。所以,对于骑术0:它会是[[第1行],[第2行]等]和骑术1:[[第1行],[第2行]]等。 – 2013-04-05 02:03:01

+0

大声笑,我不是故意的害虫。但是,我不允许使用for循环来读取文件,并且您的方法对我而言并不熟悉。我正在介绍csc类。有什么方法可以让我使用我的原始功能? – 2013-04-05 02:20:33

+0

最新的区别是什么? while循环,for循环。任意一个。这没关系,重要的是这个逻辑好不好?你是否得到正确的输出? – 2013-04-05 02:23:03

0

这就是我的代码。希望它的工作

FileStream f = new Filestream(path,FileMode.Open); 
StreamReader sf = new StreamReader(f); 

这里

while !sf.EndOfStream: 
    district = str.split(' ') 
    line = f.readline() 
    a.append(district) 
print(a) 

您未能在str.split(' ');

+0

该功能工作..我已经定义了行..它只适用于第一个块。 – 2013-04-05 02:11:36

+1

这看起来不像Python。 – DSM 2013-04-05 16:46:02

+0

正如@DSM提到的那样,它看起来不像Python。事实上,它似乎是Java和Python之间的交叉。 – pydsigner 2013-04-06 20:48:12

0
lines = [L.strip() for L in f if L.strip()][1:] 

data = [] 
group = [] 

for L in lines: 
    if L.startswith('Riding'): 
     if group: 
      data.append(group) 
     group = [] 
     continue 
    group.append(L.split()) 

print(data) 

输出:

[[['NDP', 'LIBERAL', 'GREEN', 'CPC'], ['NDP', 'GREEN', 'LIBERAL', 'CPC'], ['CPC', 'LIBERAL', 'GREEN', 'NDP'], ['NDP', 'GREEN', 'LIBERAL', 'CPC']]] 
+0

我实际上不允许使用读取方法。有没有办法修改第二个函数,以便它可以完成第一个函数的功能,但对于所有信息块来说呢? – 2013-04-05 02:13:02

+0

这应该做你想做的。它跳过了第一个“垃圾”线。 – pydsigner 2013-04-05 02:25:04