import datetime
import os
from win32com.client import DispatchEx
def getname():
file_path = []
path='C:\\新建文件夹'
info = os.listdir(path)
for i in info:
if i[-4:] == 'xlsx':
a = path +'\\'+i[:-5]
file_path.append(a)
return file_path
def test(password):
phonenumber = []
file_path = getname()
for filename in file_path:
excel = DispatchEx("Excel.Application")
excel.Visible = False
demo = excel.Workbooks.Open(filename,UpdateLinks=False,ReadOnly=False,Format=None,Password=password)
ws = demo.Worksheets(1)
Row = len(ws.UsedRange.Rows)
Col = len(ws.UsedRange.Columns)
sheet = {}
for i in range(Col):
key = ws.Cells(1,i+1).Value
list = []
for j in range(1,Row):
list.append(ws.Cells(j+1,i+1).Value)
sheet[key] = list
for index,i in enumerate(sheet['运营商']):
if i =='电信':
phonenumber.append(sheet['手机号码'][index])
demo.Close()
excel.Quit()
str = '\n'
path = 'C:\\新建文件夹'
dtime = datetime.datetime.now().strftime('%Y%m%d%H%M')
txtname = path +'\\'+ dtime+'.txt'
f = open(txtname,'w')
f.write(str.join(phonenumber))
f.close()
if __name__ == '__main__':
print("解析中·····")
password = input('请输入今日文档密码:')
test(password)
input('请复制完毕后,按任意键结束')
#getname()
代码逻辑是这样的:先是获取 C:\新建文件夹 下所有文件的名字,保存后缀是.xslx的文件名字到列表。
然后for循环,根据文件名一个一个打开excel,把excel中的内容放入字典中,字典key为列头(有手机号码、运营商、注册人名字)value为那一列的所有内容,然后获取key为"运营商"中value是“电信”的行,获取那一行的“手机号
码”,放入列表phonenumber[]列表。
最后输出phonenumber成为TXT,保存到 C:\新建文件夹
现在遇到excel多了之后,运行需要一两个小时,才能出结果,效率太慢了,代码有什么可以优化的地方吗
可以优化的地方太多了,你转换了字典又
转换列表,最后只要那一列数据存入txt,不如直接就取那一列,直接存txt
#不用上面那么麻烦直接返回列表就好
def getname(basepath):
return [os.path.join(basepath,i) for i in os.listdir(basepath) if i.endswith("xlsx")]
程序最耗费时间的应该就是读取excel,存字典那部分,