2013-04-05 2 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 행] 등 –

+0

Lol, 나는 해충. 하지만, for 루프를 사용하여 파일을 읽을 수 없으며 사용자의 방식이 나에게 익숙하지 않습니다. 나는 인트로 csc 클래스에 속해 있습니다. 원래 기능으로 작업 할 수있는 방법이 있습니까? –

+0

차이점은 무엇입니까? while 루프, for 루프. 둘 중 하나. 이것은 중요하지 않습니다. 중요한 것은이 논리입니다. 올바른 출력을 얻고 있습니까? –

0

그래서 내 코드입니다. 그것은 여기

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

당신이 str.split(' ') 실패

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

일 희망;

+0

그 기능이 작동합니다 .. 이미 선을 정의했습니다 .. 그것은 첫 번째 청크에서만 작동합니다. –

+1

파이썬처럼 보이지 않습니다. – DSM

+0

@DSM이 언급했듯이, 파이썬처럼 보이지 않습니다. 실제로 이것은 Java와 Python 사이의 교차점 인 것으로 보입니다. – pydsigner

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

나는 실제로 read 메소드를 사용할 수 없다. 두 번째 함수를 수정하여 첫 번째 함수가 수행하는 작업을 수행 할 수 있지만 모든 정보 청크에 대해 수행 할 수있는 방법이 있습니까? –

+0

이것은 원하는대로해야합니다. 첫 번째 "휴지통"줄을 건너 뜁니다. – pydsigner