2015-10-05 13 views
5

पर लिखने के दौरान वर्ण त्रुटि को एन्कोड नहीं कर सकता है, मुझे पूरी तरह से यकीन नहीं है कि मुझे इस त्रुटि के बारे में क्या करना है। मैंने माना कि इसे .encode ('utf-8') जोड़ने की आवश्यकता के साथ करना था। लेकिन मुझे पूरी तरह से यकीन नहीं है कि मुझे ऐसा करने की ज़रूरत है, न ही मुझे इसे कहां लागू करना चाहिए।पायथन ASCII कोडेक CSV

त्रुटि है:

line 40, in <module> 
writer.writerows(list_of_rows) 
UnicodeEncodeError: 'ascii' codec can't encode character u'\u2013' in position 1 
7: ordinal not in range(128) 

यह मेरा अजगर स्क्रिप्ट का आधार है।

import csv 
from BeautifulSoup import BeautifulSoup 

url = \ 
'https://dummysite' 

response = requests.get(url) 

html = response.content 

soup = BeautifulSoup(html) 

table = soup.find('table', {'class': 'table'}) 

list_of_rows = [] 
for row in table.findAll('tr')[1:]: 
list_of_cells = [] 
for cell in row.findAll('td'): 
    text = cell.text.replace('[','').replace(']','') 
    list_of_cells.append(text) 
list_of_rows.append(list_of_cells) 

outfile = open("./test.csv", "wb") 
writer = csv.writer(outfile) 
writer.writerow(["Name", "Location"]) 
writer.writerows(list_of_rows) 

उत्तर

15

पायथन 2.x सीएसवी लाइब्रेरी टूटा हुआ है। आपके पास तीन विकल्प हैं। जटिलता के आदेश में:

  1. संपादित करें: उपयोग निश्चित पुस्तकालय https://github.com/jdunck/python-unicodecsv ( pip install unicodecsv) नीचे देखें। के रूप में एक ड्रॉप में प्रतिस्थापन का प्रयोग करें - उदाहरण:

    with open("myfile.csv", 'rb') as my_file:  
        r = unicodecsv.DictReader(my_file, encoding='utf-8') 
    

  1. पढ़ें सीएसवी पुस्तिका के बारे में यूनिकोड: https://docs.python.org/2/library/csv.html (नीचे उदाहरण देखें)

    for cell in row.findAll('td'): 
        text = cell.text.replace('[','').replace(']','') 
        list_of_cells.append(text.encode("utf-8")) 
    
  2. 0123:

  3. मैन्युअल UTF-8 के रूप में प्रत्येक आइटम सांकेतिक शब्दों में बदलना

संपादित करें, मैंने पाया कि यूटीएफ -16 पढ़ने पर पाइथन-यूनिकोडेक्सव भी टूटा हुआ है। यह किसी भी 0x00 बाइट्स के बारे में शिकायत करता है।

इसके बजाय, https://github.com/ryanhiebert/backports.csv है, जो और अधिक बारीकी से अजगर 3 कार्यान्वयन जैसा दिखता है और io मॉड्यूल का उपयोग करता है का उपयोग करें ..

स्थापित करें:

pip install backports.csv 

उपयोग:

from backports import csv 
import io 

with io.open(filename, encoding='utf-8') as f: 
    r = csv.reader(f): 
+0

ओह वाह को पता नहीं था कि सीएसवी लाइब्रेरी पायथन में टूट गई थी। आपका बहुत बहुत धन्यवाद! यह एक बड़ी मदद है – paintball247

+2

यह क्यों पर्याप्त नहीं है? मैंने लोगों को हल करने के लिए सभी प्रकार के कामकाज का उपयोग किया है, और ईमानदारी से, कोई भी "यूनिकोडेक्सवी" मॉड्यूल का उपयोग करने से बेहतर काम नहीं करता है। –

0

मैं सबसे आसान विकल्प मिल गया है, Alastair के उत्कृष्ट सुझावों के अलावा, अजगर के बजाय python3 का उपयोग करने के लिए 2. यह सब मेरी scr में आवश्यक है कथन में accordance with Python3's syntax में wb को wb को बदलना था।

संबंधित मुद्दे