1. 读取一个文件夹里所有文件名字
① os.listdir(path)
仅当前路径下的文件名,不包括子目录中的文件
import os
s_path = r'C:\Users\Desktop\标准文件'
os.listdir(s_path)
output:['1.zip', '2.zip', '3.zip', 'Users']
② os.walk()
遍历文件夹下所有的文件,包含子目录下的文件。
上面能够满足需求,暂时不研究这个
2. 打开zip文件
import zipfile
p_file = zipfile.ZipFile('1.zip', "r")
name = p_file.namelist() # 获取比较文件列表
print(name)
p_file.extract(name[1], p_path) # 解压文件
p_file.close() # 关闭文件,必须有,释放内存
>>output: ['Users/LocalAdmin/AppData/Local/Temp/kau2a2212905r02sk-1.zip/', 'Users/LocalAdmin/AppData/Local/Temp/kau2a2212905r02sk-1.zip/kau2a2212905r02sk-1.mdb']
3. 读.mdb文件
3.1 成功运行的代码
首先放出成功运行的代码:
import pypyodbc
p_path = r'C:\Users\kau2a2122900r01sk-1.mdb'
connStr = 'Driver={Microsoft Access Driver (*.mdb, *.accdb)};DBQ='+p_path+';PWD=007'
conn = pypyodbc.win_connect_mdb(connStr) # 链接数据库
cur = conn.cursor() # 创建游标
sql = "SELECT * FROM " + 'ActualValues_T' # 取表 ActualValues_T
print(sql)
cur.execute(sql)
alldata = cur.fetchall() # 取 ActualValues_T 所有数据
total_rows = len(alldata)
total_cols = len(alldata[0])
print("****************Begin to process\"表:ActualValues_T\"****************")
print("\"表:%s\"总行数 = %d" %('ActualValues_T', total_rows))
print("\"表:%s\"总列数 = %d" %('ActualValues_T', total_cols))
print(type(alldata))
print(alldata)
conn.close() # 关闭数据库
3.2 关于win_connet_mdb与connect
看的代码有用win_connet_mdb,也有用connect,我用两个都成功运行了
https://www.jianshu.com/p/00b53a386c2a 这篇博客里提到
大概是这样说的:
1)连本地Access数据库
connStr = 'Driver={Microsoft Access Driver (*.mdb)};DBQ=d:\\test_db.mdb' #同样是绝对路径
conn = pypyodbc.win_connect_mdb(connStr)
# 注意这里使用的win_connect_mdb方法,如果使用connect则会出错,IM002
2)连ODBC数据库
connStr = (
r'Driver={SQL Server};'
r'Server=sqlserver;'
r'Database=testdb;'
r'UID=sa;'
r'PWD=sapassword'
)
conn = pypyodbc.connect(connStr)
作为从未接触过数据库的小白的我很是懵逼,还好代码能够成功运行。我要实现的目的是打开.mdb文件,我猜测属于应该采用win_connect_mdb吧,在此暂时不深入研究这个问题。有大神懂行还望告知,感谢。
3.3 遇到的问题
在成功之前,可是花费了我三个小时的时间,新手的我可太难了
问题1:
报错:Access Driver is not found.
解决方案:https://blog.csdn.net/victor111222/article/details/94598726
问题2:
pypyodbc.Error: ('HY000', '[HY000] [Microsoft][ODBC Microsoft Access Driver]常见错误 无法打开注册表项“Temporary (volatile) Ace DSN for process 0x255c Thread 0x241c DBC 0x2d58008 Jet”。')
这个真是日了够了,找了半天解决办法,最后自己发现原来是这个问题:
connStr = 'Driver={Microsoft Access Driver (*.mdb, *.accdb)};DBQ='+p_path+';PWD = 007' #错误代码
connStr = 'Driver={Microsoft Access Driver (*.mdb, *.accdb)};DBQ='+p_path+';PWD=007' #正确代码
知道真相的我眼泪掉下来
成功运行的结果:
SELECT * FROM ActualValues_T
****************Begin to process"表:ActualValues_T"****************
"表:ActualValues_T"总行数 = 43580
"表:ActualValues_T"总列数 = 4
[(18, 16, 0, '0'), (18, 17, 0, '0'),后面省略了]
参考链接:
https://www.jianshu.com/p/00b53a386c2a
https://www.cnblogs.com/Cong0ks/p/11039889.html
https://blog.csdn.net/LIYUANNIAN/article/details/82937350
https://www.jianshu.com/p/00b53a386c2a
4. 创建空的文件夹
import os
os.mkdir(output_path)
5. 创建空的excel
import xlsxwriter
xls = xlsxwriter.Workbook(path+"\\"+'输出.xlsx')
xls.close()
6. list 转 dataframe
>>> import pandas as pd
>>> a=[[1,2,3],[4,5,6]]
>>> pd.DataFrame(a,columns = ['a','b','c'])
a b c
0 1 2 3
1 4 5 6
原文链接:https://blog.csdn.net/Jackkkkky/article/details/108257650