【发布时间】:2015-03-12 10:36:27
【问题描述】:
我有这段代码循环查找目录中的 excel 文件,将文件添加到 sqlite db 中。 如果表存在,我设法克服了引发的异常,但我发现这不优雅且效率低下,因为循环读取 excel 文件,将其添加到 Dataframe 中,等等...... 理想情况下,我希望在从 excel 创建 df 之前测试表的存在。
response = {}
for f in glob('T:\GESTION\toto\titi\tata\file_201*.xlsx'):
print f
datereg = re.search('T:\\\\GESTION\\\\toto\\\\titi\\\\tata\\\\file_(\d{4})(\d{2})(\d{2}).xlsx', f)
if datereg is not None:
dated = datetime.datetime(int(datereg.group(1)), int(datereg.group(2)), int(datereg.group(3)))
print dated
# ideally test if table in db exists here
xl = pd.ExcelFile(f)
df = xl.parse(sheetname="Sheet1")
df = df[extractFields].drop_duplicates(subset='ISIN')
df = df.set_index('ISIN', verify_integrity=True)
response[dated] = df
# print response
engine = sqlalchemy.create_engine('sqlite:///my_db.sqlite')
try:
df.to_sql(dated.__str__(), engine, if_exists='fail')
except ValueError as err:
print(err)
pass
【问题讨论】:
-
为什么不在生成
dated日期时间并在此时测试之后创建一个空的 df,这是在您读取 excel 文件然后调用df.to_sql之前 -
当你说 test 时,你的意思是使用 try: except 在空的 df 上吗?
-
用
engine.has_table('table_name')可以检查一个表是否已经存在
标签: python excel sqlite pandas sqlalchemy