2013-03-11 2 views
0

Beautifulsoup을 사용하여 url에서 파싱 된 문자열에서 파운드 기호를 제거하고 싶습니다. 파운드 기호에 대해 다음과 같은 오류가 발생했습니다. SyntaxError : 파일에 '\ xa3'의 ASCII가 아닌 문자가 있습니다.£ in 함수를 사용하여 파이썬에서 csv에 쓰기

이 코드는 # -*- coding: utf-8 -*-에 넣으려고했으나 오류가 발생했습니다.

이것은 코드입니다. 내가 float 번호를 얻은 후에, 나는 csv 파일을 쓰고 싶다.

mainTag = SoupStrainer('table', {'class':'item'}) 
    soup = BeautifulSoup(resp,parseOnlyThese=mainTag) 
    tag= soup.findAll('td')[3] 
    price = tag.text.strip() 

    pr = float(price.lstrip(u'£').replace(',', '')) 
+1

문자열을 \ xa3으로 바꿀 수 있습니다. – Vortico

답변

0

문제는 인코딩과 바이트 대 문자 중 하나 일 가능성이 큽니다. CSV 파일을 만들 때 사용한 인코딩은 무엇입니까? £ 기호가있는 파일의 바이트 순서는 무엇입니까? 변수 price에 포함 된 바이트는 무엇입니까? 문자열에서 실제로 발생하는 바이트를 대체해야합니다. 퍼즐의 한 부분은 소스 코드의 데이터 내용입니다. 소스의 맨 위에있는 # -*- coding: utf-8 -*- 마커가 중요합니다 : 이것은 파이썬에게 문자열 리터럴의 바이트를 해석하는 방법을 알려줍니다. 문자를 바꾸기 전에 유니 코드 문자열을 만들기 위해 CSV 파일에서 바이트를 디코딩해야 할 수도 있습니다 (또는 원할 수도 있음).

I는 documentation for the csv module in Python 2.7 말한다 지적 것이다

Note: This version of the csv module doesn’t support Unicode input. Also, there are currently some issues regarding ASCII NUL characters. Accordingly, all input should be UTF-8 or printable ASCII to be safe; see the examples in section Examples.

예 부분은 유니 코드 문자열로 CSV 모듈에 의해 제공되는 바이트들을 디코딩 보여주는 다음 코드를 포함한다.

import csv 

def unicode_csv_reader(unicode_csv_data, dialect=csv.excel, **kwargs): 
    # csv.py doesn't do Unicode; encode temporarily as UTF-8: 
    csv_reader = csv.reader(utf_8_encoder(unicode_csv_data), 
         dialect=dialect, **kwargs) 
    for row in csv_reader: 
     # decode UTF-8 back to Unicode, cell by cell: 
     yield [unicode(cell, 'utf-8') for cell in row] 
관련 문제