Python将.log转Excel:如何将内容写入B列?(附问题代码)
问题
已成功将.log文件转换为Excel,但希望将日志内容写入B列,尝试用\t实现列切换无效。
当前代码
import xlwt import xlrd import os,sys import glob import keyboard as kb os.chdir(sys.path[0]) scriptlog = [] for file in glob.glob("*.log"): scriptlog.append(file) tab_char = kb.write("\t") book = xlwt.Workbook() for i in scriptlog: ws = book.add_sheet(i) f = open(i, 'r+') data = f.readlines() for j in range(len(data)): row = data[j].split('\n') for k in range(len(row)): ws.write(j, k, "\t" + row[k]) book.save('script '+'.xls') f.close()
当前结果
| 列A | 列B |
|---|---|
| (制表符) text | Cell 2 |
| (制表符) text | Cell 4 |
期望结果
| 列A | 列B |
|---|---|
| Cell 1 | Text |
| Cell 3 | Text |
解决方案
错误分析
- 把
\t拼接到单元格内容中,只会将其作为普通文本存储,无法实现列切换。Excel的列定位是通过ws.write(row, col, value)的第二个参数col指定的,和文本内容无关。 - 引入
keyboard库生成制表符属于多余操作,完全没必要。 data[j].split('\n')会将每行拆分为包含空字符串的列表(因readlines()读取的行末尾带\n),导致无效的空内容写入。
修正代码
import xlwt import os, sys import glob os.chdir(sys.path[0]) scriptlog = glob.glob("*.log") book = xlwt.Workbook() for log_file in scriptlog: ws = book.add_sheet(log_file) with open(log_file, 'r') as f: for row_num, line in enumerate(f): log_content = line.strip() # 写入B列(Excel列索引从0开始,B列对应索引1) ws.write(row_num, 1, log_content) # 若需给A列填充自定义内容,取消注释下面一行 # ws.write(row_num, 0, f"Cell {row_num*2 +1}") book.save('script.xls')
核心修改说明
- 直接通过
ws.write(row_num, 1, log_content)指定列索引1,将日志内容写入B列。 - 使用
with open自动管理文件,避免手动关闭文件的潜在问题。 - 用
enumerate同时获取行号和行内容,代码更简洁高效。 - 移除不必要的
xlrd和keyboard库,减少依赖。 - 用
strip()清除行末尾的换行符和空白字符,保证内容整洁。
内容的提问来源于stack exchange,提问作者babe921
相关产品推荐
相关产品推荐

