CSV模块AttributeError

Bil*_*ljk 17 python csv

所以我从我用来学习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])
Run Code Online (Sandbox Code Playgroud)

我得到错误:

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'
Run Code Online (Sandbox Code Playgroud)

为什么会这样?我如何解决它? 更新: 修复所有错误 我现在得到:

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

在CSV.py方面发生了什么:我有一个名为csv.py的相同代码的文件,保存在同一目录中.我认为它被命名为csv .py的事实搞砸了,所以我开始了一个名为purchases.py的新文件,但是忘了删除csv

ber*_*nie 77

不要命名您的文件csv.py.
当您这样做时,Python将在您的文件中查找csv代码而不是标准库csv模块.

  • 我有同样的错误.但是在我更改了文件名后,我不得不从工作文件夹中删除csv.pyc. (6认同)

wim*_*wim 3

错误回溯中的代码之间存在差异:

r = csv.read(open('purchases.csv'))
Run Code Online (Sandbox Code Playgroud)

以及您发布的代码:

r = csv.reader(open('purchases.csv'))
Run Code Online (Sandbox Code Playgroud)

那么你用的是哪个?

无论如何,修复第 2 行中的缩进错误:

#!/usr/bin/env python
import csv
total = 0
Run Code Online (Sandbox Code Playgroud)

并使用上下文处理程序创建 csv 读取器对象,以免文件句柄保持打开状态:

with open('purchases.csv') as f:
  r = csv.reader(f)
Run Code Online (Sandbox Code Playgroud)