TypeError: un byte come oggetto è necessario, non e ‘str’ in python e CSV

TypeError: un byte come oggetto è necessario, non e ‘str’

sempre al di sopra di errore durante l’Esecuzione di seguito il codice python per salvare il codice HTML della tabella di dati in file Csv. non so come ottenere rideup.pls help me.

import csv
import requests
from bs4 import BeautifulSoup

url='http://www.mapsofindia.com/districts-india/'
response=requests.get(url)
html=response.content

soup=BeautifulSoup(html,'html.parser')
table=soup.find('table', attrs={'class':'tableizer-table'})
list_of_rows=[]
for row in table.findAll('tr')[1:]:
    list_of_cells=[]
    for cell in row.findAll('td'):
        list_of_cells.append(cell.text)
    list_of_rows.append(list_of_cells)
outfile=open('./immates.csv','wb')
writer=csv.writer(outfile)
writer.writerow(["SNo", "States", "Dist", "Population"])
writer.writerows(list_of_rows)

sopra l’ultima riga.

InformationsquelleAutor ShivaGuntuku | 2015-12-15



4 Replies
  1. 260

    Si utilizza Python 2 metodologia invece di Python 3.

    Modifica:

    outfile=open('./immates.csv','wb')

    A:

    outfile=open('./immates.csv','w')

    e si otterrà un file con il seguente output:

    SNo,States,Dist,Population
    1,Andhra Pradesh,13,49378776
    2,Arunachal Pradesh,16,1382611
    3,Assam,27,31169272
    4,Bihar,38,103804637
    5,Chhattisgarh,19,25540196
    6,Goa,2,1457723
    7,Gujarat,26,60383628
    .....

    In Python 3 csv prende l’input in modalità testo, mentre in Python 2 prese in modalità binaria.

    Modificato per Aggiungere

    Qui è il codice che ho eseguito:

    url='http://www.mapsofindia.com/districts-india/'
    html = urllib.request.urlopen(url).read()
    soup = BeautifulSoup(html)
    table=soup.find('table', attrs={'class':'tableizer-table'})
    list_of_rows=[]
    for row in table.findAll('tr')[1:]:
        list_of_cells=[]
        for cell in row.findAll('td'):
            list_of_cells.append(cell.text)
        list_of_rows.append(list_of_cells)
    outfile = open('./immates.csv','w')
    writer=csv.writer(outfile)
    writer.writerow(['SNo', 'States', 'Dist', 'Population'])
    writer.writerows(list_of_rows)
    • Per l’uso con il csv modulo Python 3 open dovrebbe anche avere newline='' come parametro [rif]
    • Modificare il ‘wb’ stringa ‘w’ per me funziona. Grazie mille
    • Se si utilizza un buffer di vedere vinyll la risposta!
  2. 16

    Ho avuto lo stesso problema con Python3.
    Il mio codice è stato iscritto in io.BytesIO().

    Sostituzione con io.StringIO() risolto.

    • succede anche a me con stringio anche
    • Una considerazione: io.StringIO() è la memoria, l’avidità e può essere un mal di testa con file di grandi dimensioni.
  3. 1
    file = open('parsed_data.txt', 'w')
    for link in soup.findAll('a', attrs={'href': re.compile("^http")}): print (link)
    soup_link = str(link)
    print (soup_link)
    file.write(soup_link)
    file.flush()
    file.close()

    Nel mio caso, ho usato Coherence per scrivere un .txt con Python 3.x. Aveva lo stesso problema. Proprio come @tsduteba detto, il cambiamento il ‘wb’ in prima linea per la ‘w’.

    • Quando si dà una risposta è preferibile dare un po ‘ di spiegazione del PERCHÉ la tua risposta è uno. In questo caso come questo risponde diversi da accettata risposta?
    • Grazie per i vostri commenti. Io sono nuovo qui, e appena hanno iniziato a studiare Python diverse settimane fa. Cercherò di dare una migliore risposta in futuro.
    • È possibile modificare questo post, e aggiungere ulteriori dettagli. Premere il pulsante di modifica in basso a sinistra del post.
    • Grazie per i vostri consigli!

Lascia un commento