You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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
(制表符) textCell 2
(制表符) textCell 4

期望结果

列A列B
Cell 1Text
Cell 3Text

解决方案

错误分析

  • 把\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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.03 15:45:10