CSV-модуль AttributeError

Итак, я скопировал и вставил демо-версию из книги, которую я использую, чтобы узнать Python:

#!/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])

И я получаю сообщение об ошибке:

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'

Почему это происходит? Как это исправить? <Я > Обновить: Исправлено все ошибки Теперь я получаю:

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

Что происходит с CSV.py: У меня был файл с тем же кодом csv.py, который был сохранен в том же каталоге. Я подумал, что тот факт, что он был назван csv.py, закрутил его, поэтому я начал новый файл с именем purchase.py, но забыл удалить csv

Ответы

Ответ 1

Не указывайте свой файл csv.py.
Когда вы это сделаете, Python будет искать в вашем файле код csv вместо стандартного модуля библиотеки csv.

Ответ 2

Существует некорректность между кодом в трассировке вашей ошибки:

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

И код, который вы опубликовали:

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

Итак, что вы используете?

Во всяком случае исправьте эту ошибку отступа в строке 2:

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

И создайте свой объект чтения csv с помощью обработчика контекста, чтобы не открывать дескриптор файла:

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