2013-04-05 166 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