日常应用知识点:
1,zip函数使用;
2,Excel读写处理
3,字符串数据处理
4,文件夹的读取
应用场景:
昨天上班产品突然打电话要求帮忙整理一下数据,大概是这样的需求,一个文件夹下有N个设备,每个设备下是这样的组织形式,要求把每条记录导入成Excel.
期望结果:
思路: 整理数据源----> 写入Excel
一,整理数据源:
1,读取文件;files=os.listdir(filepath),
准备四个集合(用于收集输出到excel中的四列数据) a2,a3,a4,a5
2,获取文件中所有设备所在路径,并存入集合a(通过拼接\\);
for i in files: d=dirct+'\\'+i # print(d) a.append(d)
3,获取所有设备下--所有日志文件所在路径,并存入集合a1(通过拼接路径)
for o in a: file1=os.listdir(o) for p in file1: d1=o+'\\'+p # print(d1) a1.append(d1)
!!!获取a1中的设备及文件(通过split 进行路径拆分)各自的集合(不适用于这一步,大家可以思考一下原因!)
4,循环读取a1集合中的所有日志中的内容
for k in a1:(以下全部在循环中进行) with open(k, "r", encoding="UTF-8") as f:
1,对读取到的日志内容进行处理
2,去除空格等
names_list = [line.strip() for line in f if line.strip()]
,3, 抽取需要的日志内容1,日志2
s1=names_list[::2] 日志1集合 s2=names_list[1::2] 日志2集合
4,获取a1中的设备及文件(通过split 进行路径拆分)各自的集合
c=k.split('\\')
每次循环将(设备名称,日志文件,日志1,日志2)等存入相应的集合中
循环结束 --- 验证获取到的每个集合中的数据长度一致
print(len(a1)....)
得到四个集合后需要通过zip组装成最终的数据源集合:
a6=list(zip(a2,a3,a4,a5))
二,Excel 进行写入:
filename = 'log.xlsx' wb = xlsxwriter.Workbook(filename, {'constant_memory': True}) ws = wb.add_worksheet('log') t=1 (行) j=0 列 ws.write_row(0,0,('文件夹名称(设备名称)','日志文件','日志内容1','日志内容2')) for i in a6: ws.write_row(t, j, i) t+=1 wb.close()
补充内容
worksheet.write_row()
write_row(row, col, data[, cell_format])
从(row, col)处开始写入行。
参数:
row(int) - 单元格所在的行(索引从0开始计数)。
col(int) - 单元格所在的列(索引从0开始计数)。
data - 写入单元格的数据。变量类型。
cell_format(Format) - 可选的格式化对象。
write_row()方法可以用于向单元格一次性写入一个列表的数据。在将数据库查询结果转换到Excel工作表时很有用。在写入数据时调用write()方法。例如:
# 一些示例数据。
data = ('Foo', 'Bar', 'Baz')
# 将数据写入单元格序列。
worksheet.write_row('A1', data)
# 上面的例子等价于:
worksheet.write('A1', data[0])
worksheet.write('B1', data[1])
worksheet.write('C1', data[2])