【问题标题】:CSV Module AttributeErrorCSV 模块属性错误
【发布时间】:2012-03-14 23:17:06
【问题描述】:

所以我从我用来学习 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

【问题讨论】:

  • 还要确保删除(如果存在)任何可能在导入时创建的 csv.pyc 文件
  • 出现同样的错误,出于同样的原因

标签: python csv


【解决方案1】:

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

编辑:在评论中包含重要说明:如果该目录中遗留有csv.pyc 文件,则必须将其删除。这是 Python 字节码,可用于代替重新运行您的 csv.py 文件。

【讨论】:

  • 我遇到了同样的错误。但是在更改文件名后,我不得不从工作文件夹中删除 csv.pyc。
【解决方案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)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-01-29
    • 2020-11-14
    • 2013-09-19
    • 2021-07-17
    相关资源
    最近更新 更多