2012-03-14 13 views
14

Così ho copiato e incollato un programma dimostrativo dal libro che sto usando per imparare Python:CSV Modulo AttributeError

#!/usr/bin/env python 
    import csv 
total = 0 
priciest = ('',0,0,0) 
r = csv.reader(open('purchases.csv')) 
for row in r: 
    cost = float(row[1]) * float(row[2]) 
    total += cost 
    if cost == priciest[3]: 
     priciest = row + [cost] 
print("You spent", total) 
print("Your priciest purchase was", priciest[1], priciest[0], "at a total cost of", priciest[3]) 

E ottengo l'errore:

Traceback (most recent call last): 
     File "purchases.py", line 2, in <module> 
     import csv 
     File "/Users/Solomon/Desktop/Python/csv.py", line 5, in <module> 
     r = csv.read(open('purchases.csv')) 
AttributeError: 'module' object has no attribute 'read' 

Perché succede questo? Come lo aggiusto? Aggiornamento: corretti tutti gli errori Ora sto ricevendo:

Traceback (most recent call last): 
    File "purchases.py", line 6, in <module> 
    for row in r: 
_csv.Error: line contains NULL byte 

Che cosa stava succedendo in termini di CSV.py: ho avuto un file con lo stesso nome in codice csv.py , salvato nella stessa directory. Ho pensato che il fatto che è stato chiamato csv .py è stato avvitamento in su, così ho iniziato un nuovo file chiamato purchases.py, ma ho dimenticato di eliminare csv

+2

Assicurarsi inoltre di eliminare (se presente) qualsiasi file 'csv.pyc' che potrebbe essere stato creato durante l'importazione – bernie

+0

Ho fatto :) Grazie. – Billjk

+0

Aveva lo stesso errore, per lo stesso motivo –

risposta

3

C'è una discrepanza tra il codice nella traceback del vostro errore:

r = csv.read(open('purchases.csv')) 

E il codice che avete inviato:

r = csv.reader(open('purchases.csv')) 

Quindi che stai usando?

In ogni caso, correggere tale errore rientro nella riga 2:

#!/usr/bin/env python 
import csv 
total = 0 

e creare il tuo lettore di oggetto csv con un gestore di contesto, in modo da non lasciare handle aperto il file:

with open('purchases.csv') as f: 
    r = csv.reader(f) 
71

Non nominare il file csv.py.
Quando lo fai, Python cercherà nel tuo file il codice csv invece del modulo standard della libreria csv.

+0

ah, buona individuazione – wim

+0

questo ha corretto il mio errore, grazie! – Drewdin

+5

Ho avuto lo stesso errore. Ma dopo aver cambiato il nome del file ho dovuto rimuovere csv.pyc dalla cartella di lavoro. – Dam

Problemi correlati