2016-09-10 2 views
0

파이썬 newspaper3k 패키지를 사용하여 기사 정보를 추출하려고 시도하고 CSV 파일에 쓰려고합니다. 정보가 올바르게 다운로드되는 동안 CSV에 대한 출력에 문제가 있습니다. 나는 그것에 대해 읽으려는 노력에도 불구하고 유니 코드를 완전히 이해하지 못한다고 생각합니다.파이썬 이상한 유니 코드를 CSV로 작성

from newspaper import Article, Source 
import csv 

first_article = Article(url="http://www.bloomberg.com/news/articles/2016-09-07/asian-stock-futures-deviate-as-s-p-500-ends-flat-crude-tops-46") 

first_article.download() 
if first_article.is_downloaded: 
    first_article.parse() 
    first_article.nlp 

article_array = [] 
collate = {} 

collate['title'] = first_article.title 
collate['content'] = first_article.text 
collate['keywords'] = first_article.keywords 
collate['url'] = first_article.url 
collate['summary'] = first_article.summary 
print(collate['content']) 
article_array.append(collate) 

keys = article_array[0].keys() 
with open('bloombergtest.csv', 'w') as output_file: 
    csv_writer = csv.DictWriter(output_file, keys) 
    csv_writer.writeheader() 
    csv_writer.writerows(article_array) 

output_file.close() 

first_article.text 인 collate [ 'content']를 인쇄하면 콘솔에서 기사의 내용을 잘 출력합니다. 모든 것이 올바르게 표시됩니다. 아포스트로피 및 모든 것. CVS에 쓸 때 콘텐츠 셀 텍스트에 이상한 문자가 있습니다. 예를 들면 다음과 같습니다.

â € œAt 오늘의 끝에서, 유럽의 경제는 훌륭한 형태가 아니며, 인플레이션은 흥미롭지 않습니다. 그리고 많은 정치적 위험이 있습니다.

은 지금까지 나는 시도했다 : 아무 소용이

with open('bloombergtest.csv', 'w', encoding='utf-8') as output_file: 

. 나는 또한 8 대신에 utf-16을 시도했지만, 그저 세포가 이상한 순서로 쓰는 결과를 가져왔다. 출력이 올바른 것으로 보였지만 CSV에서 올바르게 셀을 만들지 않았습니다. 나는 또한 .encode ('utf-8') 다양한 변수를 시도했지만 아무것도 작동하지 않았습니다.

무슨 일 이니? 왜 CSV 파일에 홀수 문자가있는 반면 콘솔에서 텍스트를 올바르게 인쇄합니까? 이 문제를 어떻게 해결할 수 있습니까?

답변

2

CSV 파일을 열거 나 인쇄 할 때 주로 사용하는 소프트웨어에 문제가 있습니다. CSV가 UTF-8로 인코딩되고 ASCII, latin-1, ISO-8859- 1 또는 이와 유사한 인코딩.

파일의 시작 부분에있는 CSV 파일의 인코딩을 placing a BOM sequence (일반적으로 UTF-8에는 권장하지 않음)으로 인식하도록 소프트웨어를 지원할 수 있습니다.

+1

Excel에서 열어 보겠습니다. 보편적 인 문자를 쓸 수있는 방법이 없습니까? – sirryankennedy

+0

@sirryankennedy BOM을 사용하여 UTF-8을 작성하려고 했습니까 (링크 된 답변에 표시된대로)? – Leon

+0

@sirryankennedy : "범용"인코딩이 없습니다. 일반 ASCII조차도 "보편적"이 아닙니다. 1 바이트 인코딩을 사용하려면 Windows-1252와 같이 둥근 따옴표가 포함 된 것으로 변환하십시오. – usr2564301

2

인코딩 utf-8-sig을 사용하십시오. Excel은 BOM이 UTF8을 해석하도록 요구합니다. 그렇지 않으면 기본 지역화 된 인코딩을 사용합니다.

+0

이것은 트릭을 만들었습니다. – sirryankennedy

+0

이것은 나에게도 해줬습니다! <3 –

1

with open('bloombergtest.csv', 'w', encoding='utf-8') as output_file:에서 with open('bloombergtest.csv', 'w', encoding='utf-8-sig') as output_file:으로 변경하면 Leon과 Mark Tolonen의 권장대로 작동합니다.

관련 문제