2014-06-25 2 views
0

모든 줄에 다음 파일이 있습니다. 파일 이름, 목록의 길이, 실제 목록. 그래서파이썬의 파일에서 목록 읽기

a.txt 3 [4,2,9] 
b.txt 5 [1,6,5,2,8] 
c.txt 7 [1,2,3,4,5,6,7] 

하고 : 여기서 예이다. 목록까지 모든 것을 읽을 수 있지만 목록은 문자열로 읽습니다. 예를 들어 첫 번째 경우 출력은 '[4,','3,','4]'이고 일반 목록을 갖고 싶습니다. 이것은 내가 지금까지 가지고있는 코드이지만,이 파일에서 단순한 독서의 :

f = open('example.txt', 'r') 
for eachLine in f: 
    a = eachLine.strip().split() 
    l = a[2] 
print l 
f.close() 

나는 l=a[2]를 사용하지만 내 전체 목록을 저장하지 않습니다, 그것은 단지 그것에서 첫 번째 요소는 저장합니다.

파일의 목록을 파이썬으로 목록에 저장할 수 있습니까?

+0

OUTPUT. html # ast.literal_eval) –

+0

실제로 단순화하고 유연성을 추가하려면 [pickle] (https://docs.python.org/2/library/pickle.html)을 사용하여 데이터를 직렬화하십시오. 그런 다음 데이터를 로딩하는 것은'pickle.load (f)'처럼 간단합니다. 변환을 수행하고 모든 데이터를 현재 형식 대신 피클로 저장해야합니다. – msvalkon

+0

목록 요소 사이에 공백이 있습니까? '.split (maxsplit = 2)'를 시도하십시오. – jonrsharpe

답변

2
with open('example.txt', 'r') as f: 
    for eachLine in f:           
     a = eachLine.strip().split(" ",2)       
     req_list = [int(x) for x in a[2].strip('[]').split(',')] 
     print req_list           

출력 : 평가를 사용하지 않고

[4, 2, 9] 
[1, 6, 5, 2, 8] 
[1, 2, 3, 4, 5, 6, 7] 
+0

이것은 작동하지만'l = a [2]'는 전체 목록을 저장하지 않습니다. 나는이 사실을 포함시키기 위해 나의 질문을 편집했다. – user1956190

+0

@ user1956190, 이해가 안됩니다. 나는 이것을 테스트했고 작동했다. –

+0

'l = a [2]'라는 할당은리스트의 첫 번째 요소 만 반환한다. 예를 들어'[4,'. 목록에서 요소를 하나씩 만 읽습니다. – user1956190

-1

당신은 평가 사용할 수 있습니다

eval('[4,3,4]') 

목록을 반환합니다 [4,3,4]

+4

[ast.literal_eval()] (http://stackoverflow.com/a/15197698/1982962) –

0

당신은 그래서 같이 eval 함수를 사용할 수 있습니다

with open('example.txt', 'r') as f: 
    for eachLine in f: 
     tokens = eachLine.strip().split() 
     theLen = int(tokens[0]) 
     theList = eval(tokens[1]) 

을 평가 사용주의 하나. 신뢰할 수없는 소스에서 데이터를 읽는다면 임의의 파이썬 코드가 포함 된 파일을 전달하여 더러운 일을 처리 할 수 ​​있습니다.

단순한 데이터 구조를 디스크에 읽고 쓰는 데 가능한 json과 같은 파일 형식을 사용해야합니다. 이러한 형식은 이미 이러한 공격으로부터 보호하기 위해 강력한 de/serialization을 사용하고 있기 때문입니다.

+1

Jeff와 동일 답장 eval은 안전하지 않을 수 있으므로 권장하지 않습니다 [ 여기에 (http://stackoverflow.com/a/15197698/1982962) –

+1

확실히 안전하지 않을 수 있지만 때로는 이러한 것들이 안전한 환경 내에 존재하고 평가를 사용하여 완벽하게 실행 가능한 옵션입니다. 문제에 대한 맥락 없이는 알기가 어렵습니다. 이상적으로는 json 또는 이미 존재하는 다른 파일 형식을 사용하여 이러한 문제를 해결할 수 있습니다. – Hamish

+0

그래,하지만 'eval'추천이 부족하여이 질문에 답하는 가장 좋은 방법이 아니기 때문에. –

1

솔루션.

with open('input.txt', 'r') as f: 
    for eachLine in f: 
     a = eachLine.strip().split() 
     l = list(int(x) for x in a[2][1:-1].replace(',',"")) 
     print l 

당신은 [ast.literal_eval] 사용할 수에 대한 파이썬 목록으로 목록 (https://docs.python.org/2/library/ast을 평가해야

[4, 2, 9] 
[1, 6, 5, 2, 8] 
[1, 2, 3, 4, 5, 6, 7] 
관련 문제