2012-03-14 11 views
14

Así que copiar y pegar un programa de demostración del libro que estoy usando para aprender Python:CSV Módulo 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]) 

Y me sale el error:

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' 

Por qué sucede esto? ¿Cómo lo arreglo? Actualizar: Se corrigieron todos los errores Ahora estoy recibiendo:

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

lo que sucedía en términos de la CSV.py: que tenía un archivo con el mismo nombre en código csv.py , guardado en el mismo directorio. Pensé que el hecho de que fue nombrado .py csv se atornilla para arriba, así que empecé un nuevo archivo llamado purchases.py, pero se olvidó de borrar csv

+2

también asegúrese de eliminar (si está presente) cualquier archivo 'csv.pyc' que se haya creado en la importación – bernie

+0

Lo hice :) Gracias. – Billjk

+0

Tenía el mismo error, por la misma razón –

Respuesta

3

Existe una discrepancia entre el código en el rastreo de su de error:

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

Y el código que envió:

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

Entonces, ¿qué se utiliza?

En cualquier caso, corregir ese error hendidura en la línea 2:

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

Y crear su csv lector de objeto con un gestor de contextos, a fin de no dejar el identificador de archivo abierto:

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

No nombre su archivo csv.py.
Cuando lo haga, Python buscará en su archivo el código csv en lugar del módulo csv de la biblioteca estándar.

+0

ah, buena detección – wim

+0

esto corrigió mi error, ¡gracias! – Drewdin

+5

Tuve el mismo error. Pero después de cambiar el nombre del archivo, tuve que eliminar el csv.pyc de la carpeta de trabajo. – Dam

Cuestiones relacionadas