2013-05-22 1 views
1

러시아 탭으로 구분 된 txt 파일에서 지난 몇 시간 동안 수수께끼가 생겼습니다. 다음은 그 모습입니다.파이썬 - 유니 코드 (러시아어) Txt 파일 처리

CODE AD_GROUP KEYWORD MATCH_TYPE 

009966 Автостраховка автостраховка Broad 
009965 Автостраховка страховкаавто Broad 
009964 Автостраховка страховка автомобиля Broad 

목표는 txt 파일을 구문 분석하여 각 키워드를 별도로 인쇄하는 것입니다.

f = open("struct.txt",encoding="UTF-8",errors='strict') 

for line in f: 
    vals = line.split("\t") 
    print(vals[2]) 

f.close() 

그러나 나는 다음과 같은 오류가 점점 계속 :

지금까지 내가 가진 UnicodeDecodeError

을 'UTF-8'코덱이 위치 0 바이트를 0xFF를 디코딩 할 수 없습니다 무효 시작 바이트

또한 각 목록의 길이를보기 위해 len (vals)을 수행하면 다음과 같이 표시됩니다. 4 1 4 1 아마도 분할 ("\")이 작동하지 않는다는 의미입니까?

저는 Python3.3과 Mac을 사용하고 있습니다.

마지막으로, 키릴 문자가 표시되지 않는 Mac의 명령 줄에 문제가 있다고 생각하지 않습니다. 문제가 발생하지 않고 서양 Windows 버전에서는 실패한 것 같습니다.

내가 뭘 잘못하고 있는지 알려 주시기 바랍니다.

감사합니다.

+0

유니 코드 오류는 명령 줄의 인쇄에만 있습니다. IDLE에서 스크립트를 실행할 수 있습니다. 그런 다음 길이가 예상대로 작동하지 않는 동안 적절한 출력과 디버그를 얻을 수 있습니다. – poke

+0

인쇄 오류가 발생합니다. 터미널 설정을 수정해야합니다. http://wiki.python.org/moin/PrintFails –

+0

을 참조하십시오. 빠른 답장을 보내 주셔서 감사합니다. 그러나 문제는 아닙니다 (내 설명에서 언급 한 것처럼). 난 그냥 IDLE 맥에서 실행하고있어 : UnicodeDecodeError : 'utf - 8'코덱은 위치 0에서 바이트 0xff를 디코딩 할 수 없습니다 : 유효하지 않은 시작 바이트 – Aivoric

답변

2

(나는 그것이 탭을 가지고 있는지 확인하기 위해 편집)이 코드 (Python2.7)

f = open("struct.txt") 

for line in f: 
    vals = [item for item in line.strip().split("\t") if item != ''] 
    if len(vals): 
     print(vals[2]) 

f.close() 

그리고 소스 나는 다음과 같은 출력을 얻을 사용 : 당신은 당신이 확실

> python so_16703270.py 
KEYWORD 
автостраховка 
страховкаавто 
страховка автомобиля 

됩니다 파일 전체에 탭이 있지만 일부 공간에는 탭이 없습니까?

+0

안녕하세요. sberry, 좀 더 파고를했는데 "하지"않고 "작동하지 않는"경우를 발견했습니다. Excel 파일의 데이터를 메모장에 붙여넣고 struct.txt (UTF-8 인코딩)로 저장하면 작동합니다. 그러나 Excel 파일을 유니 코드 txt로 저장하면 작업이 중단되고 파일 크기도 커집니다. 왜 그렇게 생각하니? 또한 처음 열을 작성하는 데 Excel을 사용하는 것처럼 파일을 저장하는 것이 좋습니다. 내가 .csv를 시도하면 키릴 문자가 깨집니다 .--(감사합니다. – Aivoric