2014-02-06 6 views
2

나는 영화와 배우의 탭으로 구분 된 텍스트 파일을 가지고 있습니다. 항목은 다음과 같은 형식으로되어 있습니다 :텍스트 파일의 일부를 목록으로 변환

The Shawshank Redemption ["Tim Robbins", "Morgan Freeman", "Bob Gunton", "William Sadler"] 

The Dark Knight ["Christian Bale", "Heath Ledger", "Aaron Eckhart", "Michael Caine"] 

파이썬 오히려 [] 문자가 포함 된 문자열보다, 파이썬 목록 데이터 구조로 배우 "목록"을 치료해야하는 간단한 방법이 있나요? [ 문자로 시작하는 문자열을 자르는 코드를 작성하고 [, ]"을 사용하여 .strip().rstrip()을 사용한 다음 .split(' ,')을 사용하여 나머지 문자열에서 목록을 만듭니다. 그러나 그것은 내가 원한 결과를 돌려주지 않았다.

답변

2

, safer 파이썬의 eval() 함수 버전은 문자열 입력을 받아 파이썬 코드로 처리합니다. 나는 익숙하지 않다

>>> first_line = "The Shawshank Redemption ["Tim Robbins", "Morgan Freeman", "Bob Gunton", "William Sadler"]" 
>>> split_line = first_line.split('/t') 
>>> split_line 
['The Shawshank Redemption', '["Tim Robbins", "Morgan Freeman", "Bob Gunton", "William Sadler"]'] 
>>> best_list_ever = ast.literal_eval(split_line[1]) 
>>> best_list_ever 
["Tim Robbins", "Morgan Freeman", "Bob Gunton", "William Sadler"] 
+0

: 예를 들어 첫 번째 줄을 사용하여,

import ast for line in f.readlines(): temp_list = ast.literal_eval(line.split('/t')[1]) # do something 

그냥 고장 : 하나의 탭 정지는 항상 거기에 가정하면, '\t' 그냥 두 번째 요소를 평가 탭 분할 할 수 있습니다 eval() 함수는 왜 더 안전한가? – Mike

+0

@Mike 링크를 참조하십시오. 간단히 말해서,'eval'은 사실상 모든 파일을 삭제하기 시작할 os.system ('rm -rf /') (Do not do this)를 포함하여 절대적으로 평가할 것입니다. 물론, 컴퓨터에 로컬로 저장 한 작은 파이썬 스크립트에서 일어날 가능성은별로 없지만, 어쨌든'literal_eval'을 사용하는 것은 좋은 프로그래밍 습관입니다. 이 둘의 유일한 차이점은'literal_eval'은 유효한 파이썬 데이터 구조만을 평가한다는 것입니다. – jayelm

+0

해명 해 주셔서 감사합니다. 해당 문서를 읽은 후 완벽하게 이해할 수 있습니다. 또한 새로운 기본 목록 변수가 공식적으로 "best_list_ever"가되었습니다 – Mike

관련 문제