这是我的代码:
import csv
with open('cars.csv') as csvfile:
reader = csv.DictReader(csvfile)
for row in reader:
print(row['ID'], row['CIP'], row['NAME'])我得到了这样的信息:
$ 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)有什么想法吗?
发布于 2021-11-11 09:12:53
正如@buran在评论中指出的那样,您正在覆盖内置的csv模型。事实上,python文件本身就是一个模块。有关这方面的更多信息,请访问here。
这只是一个小小的实验来让你的大脑围绕它。尝试修改csv.py中的代码,如下所示:
import csv
print(csv) # tell me something about such a `csv`现在,如果你运行这样一个文件,你会得到类似这样的结果:
<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,并运行这个重命名的文件。这一次你会得到:
<module 'csv' from '/<built-in-module-path>/csv.py'>这里有两件事需要注意:
print语句只运行一次。之所以会发生这种情况,是因为这次import csv实际上导入了没有任何打印语句的内置模块。在标准输出中得到的是my_csv.py.print(csv),这一次csv的路径指向内置Python模块。https://stackoverflow.com/questions/69925476
复制相似问题