前几天在用pandas处理祝日(1948-2019年)数据的时候,遇到一个非常奇葩的问题,过程非常有趣:

1,用selenium从某网站抓取从1948年到2019年72年间的所有假期的数据。
数据:https://docs.google.com/spreadsheets/d/1l-P_ZqojHwU3zHflqkGMrrXgYqPh8inr8ELLcMKdeTE/edit?usp=sharing

2,「1」的脚本是用python写的,我命名为"calendar.py"(噩梦的源头)。calendar.py所用模块:
import os
import pandas as pd
from selenium import webdriver
from selenium.webdriver.firefox.options import Options
from selenium.webdriver.support.ui import Select
import datetime

3,抓取后的数据保存到同目录下的calendar.xlsx里。

4,数据分析的脚本命名为"calendar分析.py",也保存在同目录下,第一句是:
import pandas as pd
......

5,运行calendar分析.py,出错。错误界面如图:

6,搜索首尾的关键信息,再搜索,三搜索,无解;重启电脑,重装pandas模块,无解。

7,发现奇怪现象:
・其他文件夹下的也用到pandas模块的文件,都可以正常运行
・终端里可以正常import pandas
・重启idle的话,可以正常import pandas
・把"calendar分析.py"移动桌面的话,可以正常import pandas

8,突然注意到同目录下有"__pycache__"文件夹生成,里面有文件:"calendar.cpython-36.pyc"(导入自定义的模块时才会出现)

9,原因:
・pandas依赖一些系统自带的模块,这些模块又与其他一些模块相互依赖,最终会调用到calendar模块里的monthrange函数
・python导入模块时,如果同目录下有与模块同名的py文件,优先导入同目录下的py文件。(calendar.py)

10,结论:
・尽量不用通用的英文名词命名py文件