我刚刚发现了大熊猫和安装立即购买我的循环迭代文件表现奇怪。这是一个对我来说有问题的最小例子:
#!/usr/bin/env python
import os
PATH=os.environ['HOME']+"/scripts/"
for path_, dir_names, file_names in os.walk(PATH):
for name in file_names:
print(path_+name)
由于我在文件夹中只有一个单个文件(即此脚本),因此输出符合预期:
/home/scripts/parser.py
但是,如果我现在使用import os
(pandas
)扩展import os, pandas
,则会打印两次文件:
/home/scripts/parser.py
/home/scripts/parser.py
我不知道这里发生了什么。我有点搞砸了安装(apt-get install python3-pandas)?
修改
我不知道这是否相关,但是当我导入pandas时会生成一个__pycache__
文件夹。
答案 0 :(得分:2)
这实际上是一个通用的Python东西。这个脚本将在没有pandas的情况下复制问题:
parser.py:
.par-1 {
width: 3px;
color: #fff;
padding: 1px 0;
}
.par-2 {
width: 6px;
color: #000;
padding: 0 2px;
}
.par-3 {
width: 9px;
color: #fff;
padding: 3px 0;
}
.par-4 {
width: 12px;
color: #000;
padding: 0 4px;
}
.par-5 {
width: 15px;
color: #fff;
padding: 5px 0;
}
.par-6 {
width: 18px;
color: #000;
padding: 0 6px;
}
其中tempfile是标准的python包。
现在以bash运行
import tempfile
print 'hello'
print语句执行两次!会发生什么是parser.py导入tempfile,而tempfile尝试导入标准python包“parser”(https://docs.python.org/2/library/parser.html)。但是由于 ”。” (当前目录)在PYTHONPATH中,它再次导入原始脚本,打印“hello”额外的时间。
故事的道德:不要将脚本命名为与标准库包相同的东西,绝对不要乱用PYTHONPATH。