我有3万左右个txt数据文件,将内容写进表格中,但是运行后速度极慢,大概5秒才能完成一个文件,下面是我的代码,请问怎们解决?
import os
import shutil
import re
import codecs
import xlwt
src_dir_path = r'G:\\地震动数据\\esm' #源文件路径
ls3 =[] #数值综合列表
ls4 =[]
book = xlwt.Workbook(encoding='utf-8',style_compression=0) #创建excel文件
sheet = book.add_sheet('1',cell_overwrite_ok=True) #创建sheet薄
for file in os.listdir(src_dir_path): #对路径内文件依次赋值(历遍读取)
if os.path.exists(src_dir_path): #判断路径是否存在
if os.path.isfile(src_dir_path+'/'+file): #赋值文件,剔除文件夹类
if 'HNE' in file:
if 'ACC' in file: #选择某类型地震动数据读取,竖向或者水平
with open(src_dir_path+"\\"+file,'r',encoding='utf-8') as f: #打开文件,编码
ls1 = [] #列表1:用于存放地震学参数类别
ls2 = [] #列表2:用于存放单个记录的数值
for num, line in enumerate(f): #enumerate(f)将其组成一个索引序列(元组),
if num < 50: #地震参数采集位置,根据不同数据库可更改
information = line.split(":") #参数类别以及数值的拾取
classification = information[ 0 ]
data = information[1]
classification1 = classification.rstrip()
data1 = data.rstrip()
ls1.append(classification1)
ls2.append(data1)
print(file)
ls3.append(ls2)
ls4.append(file)
name = ls4
for i in range(0,24078): #写入文件名称
sheet.write(i+1,0,name[i])
condition = ls1 #写入地震参数类别
for k in range(1,50):
sheet.write(0,k,condition[k])
datalist = ls3 #写入地震参数数值
for l in range(0,24078):
data = datalist[l]
for j in range(1,50):
sheet.write(l+1,j,data[j])
savepath = 'C:\\Users\\user\\Desktop\\ESM(E,ACC).xlsx' #保存路径以及创建excel
book.save(savepath)
感觉有几个问题:
13行取得src_dir_path下的文件,14行何必要再判断src_dir_path路径存在?
18行-22行,打开文件逐行处理的流程似乎是错误的,估计问题就出在这里了。
针对上述问题,简单写了几行代码替换13-32行。未经测试,仅供题主参考。
for fn in os.listdir(src_dir_path):
file_name = os.path.join(src_dir_path, fn)
if 'HNE' in fn and 'ACC' in fn and os.path.isfile(file_name):
ls1, ls2 = list(), list()
with open(file_name, 'r', encoding='utf-8') as fp:
for line in fp.readlines()[:50]:
information = line.strip().split(":")
classification = information[ 0 ]
data = information[1]
classification1 = classification.rstrip()
data1 = data.rstrip()
ls1.append(classification1)
ls2.append(data1)
print(fn)
ls3.append(ls2)
ls4.append(fn)