首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python3: csv循环导入

Python3: csv循环导入
EN

Stack Overflow用户
提问于 2021-11-11 08:50:46
回答 1查看 90关注 0票数 0

这是我的代码:

代码语言:javascript
复制
import csv

with open('cars.csv') as csvfile:
    reader = csv.DictReader(csvfile)
    for row in reader:
        print(row['ID'], row['CIP'], row['NAME'])

我得到了这样的信息:

代码语言:javascript
复制
$ python3 csv.py
Traceback (most recent call last):
  File "/home/jeusdi/projects/workarea/salut/load-testing/csv.py", line 1, in <module>
    import csv
  File "/home/jeusdi/projects/workarea/salut/load-testing/csv.py", line 4, in <module>
    reader = csv.DictReader(csvfile)
AttributeError: partially initialized module 'csv' has no attribute 'DictReader' (most likely due to a circular import)

有什么想法吗?

EN

回答 1

Stack Overflow用户

发布于 2021-11-11 09:12:53

正如@buran在评论中指出的那样,您正在覆盖内置的csv模型。事实上,python文件本身就是一个模块。有关这方面的更多信息,请访问here

这只是一个小小的实验来让你的大脑围绕它。尝试修改csv.py中的代码,如下所示:

代码语言:javascript
复制
import csv

print(csv) # tell me something about such a `csv`

现在,如果你运行这样一个文件,你会得到类似这样的结果:

代码语言:javascript
复制
<module 'csv' from '/home/jeusdi/projects/workarea/salut/load-testing/csv.py'>
<module 'csv' from '/home/jeusdi/projects/workarea/salut/load-testing/csv.py'>

这是因为print语句运行了两次:第一次是在import csv时,第二次是在解释器执行模块时。请注意,您的csv模块现在实际上就是您的文件(查看路径)!这不是你想要的。

然后尝试按照@buran的建议将csv.py重命名为my_csv.py,并运行这个重命名的文件。这一次你会得到:

代码语言:javascript
复制
<module 'csv' from '/<built-in-module-path>/csv.py'>

这里有两件事需要注意:

  1. print语句只运行一次。之所以会发生这种情况,是因为这次import csv实际上导入了没有任何打印语句的内置模块。在标准输出中得到的是my_csv.py.
  2. note中的print(csv),这一次csv的路径指向内置Python模块。
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69925476

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档