2012-02-19 7 views
3

아래 기능에 문제가 있습니다. 이 파일의 벌금을 분할하는 것 같다하지만 하나 개의 요소로서 돌려목록으로 파일을 분할하는 파이썬

기능 :

def splitRoute(): 
    route = [] 
    for line in open("route.txt","r").readlines(): 
    line = line.replace("\r","") 
    line = line.replace("\n","") 
    line = string.split(line, '>') 
    route.append(line) 
    return route 

출력 :

[['B', 'F']] 

route.txt 내용 :

B>F 

인가 파일에 한 줄만 있으므로 한 요소 만 반환합니까? 잘 작동하는 7x7 목록으로 다른 파일을 분할하는 다른 기능이 있지만 7 개의 요소가 있기 때문에 7 개의 요소를 모두 넘나들 수 있습니까?

+0

음, 두 줄의 파일에 대한

def splitRoute(): route = [] with open('route.txt', 'r') as f: for line in f: route.extend(line.strip().split('>')) return route 

출력 ('B>F\nF>X\n') : 더 읽을 들여 쓰기 수준을 with을 사용하고 채택

def splitRoute(): route = [] f = open('route.txt', 'r') for line in f: route.extend(line.strip().split('>')) f.close() return route 

또는, 기대하니? –

답변

3

왜 새줄을 바꾸시겠습니까? 그냥 문자열을 분할 :

def splitRoute(): 
    route = [] 

    for line in open('route.txt', 'r'): 
    route.append(line.strip().split('>')) 

    return route 
+0

완벽하게 고마워했습니다. –

+1

@Schmooo,'+'가 사용될 때마다 목록의 새로운 사본을 생성합니다. 나는'append' 대신에'extend'를 사용할 것을 제안합니다; 그러면'sum'을 전혀 사용할 필요가 없습니다. – senderle

+0

@senderle 연장 감사로 바뀌 었습니다. –

1

split 목록을 만듭니다. 그렇다면 append 다른 목록 (빈) 목록에. 따라서 결과는 목록 안에 목록을 가져 오는 것입니다. 줄이 많으면 긴 목록을 얻을 수 있습니다.

def splitRoute(): 
    route = [] 

당신은 빈 목록을 만들 ... 행에 대해

for line in open("route.txt","r").readlines(): 
    line = line.replace("\r","") 
    line = line.replace("\n","") 

, 당신은 \ r에 빈 문자열 \ n 문자를 대체 : 여기에 코드의 빠른 고장입니다. line.strip() ('apple\n\r'.strip() ->'apple')을 사용하면 더 쉽게이 작업을 수행 할 수 있습니다. 또한 나중에 파일을 닫을 수 있도록 파일을 파일 이름으로 저장해야합니다. 마지막으로, readlines을 사용할 필요가 없습니다. 파일을 직접 반복하면됩니다.

line = string.split(line, '>') 

이제, line가 참조하는 문자열을 목록으로 분할하고, line에 목록을 지정합니다. 지금 line은 다음과 같습니다 : ['B', 'F']. 이제 route-line을 추가 한

route.append(line) 
    return route 

route은 다음과 같습니다 [['B', 'F']].

단일 목록을 만드는 것이 목표 인 경우 append 대신 extend을 사용하십시오. 너 그 밖의 무엇

>>> splitRoute() 
['B', 'F', 'F', 'X'] 
+0

2D 배열로 만들려면 목록 내에서 목록이 필요합니까 아니면 하나의 목록에서만 수행 할 수있는 방법이 있습니까? –

+0

2D 배열을 원하면'extend' 대신'append'를 사용하십시오. 파이썬에서 2D 배열을 만드는 가장 직접적인 방법은 참으로 목록의 목록을 만드는 것입니다. 당신은 또한 dict을 색인하기 위해 튜플을 사용할 수 있습니다; 'd = {}; d [0, 0] = 1; d [0, 1] = 0; d [1, 0] = 1; d [1, 1] = 0' 등이된다. 그러나 이것은 대부분의 경우 목록 목록보다 다소 느립니다. – senderle

관련 문제