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

如何用Python自动将文本文件中的数据写入Excel?

文本数据写入Excel失败问题修复

我需要将文本文件中的数值数据写入Excel文件(由于数据的写入格式问题,Pandas无法使用),但多次尝试均未成功。此前使用openpyxl也未取得成功,最近尝试的代码如下:

wb = w.Workbook('D:\\IJS\\JEFF444.xlsx')
ws = wb.add_worksheet()


with open(trimmed_data, 'r') as file:
    lines = file.readlines()
    row = 8
    for index in range(len(lines)):
        if len(lines[index].split()) != 0:
            lst = lines[index].split()
            print(lst)
            if lst[-1][-3:] == '444':
                print(lst[3].split('/')[0])
                ws.write(f'B{row}', lst[3].split('/')[0])
                ws.write(f'E{row}', float(lines[index + 2].split()[1]))
                ws.write(f'F{row}', float(lines[index + 2].split()[1]) * float(lines[index + 2].split()[2]))
                ws.write(f'J{row}', float(lines[index + 5].split()[1]))
                ws.write(f'K{row}', float(lines[index + 5].split()[1]) * float(lines[index + 5].split()[2]))
                ws.write(f'O{row}', float(lines[index + 8].split()[1]))
                ws.write(f'P{row}', float(lines[index + 8].split()[1]) * float(lines[index + 8].split()[2]))
                ws.write(f'T{row}', float(lines[index + 11].split()[1]))
                ws.write(f'U{row}', float(lines[index + 11].split()[1]) * float(lines[index + 11].split()[2]))
                row += 1
    file.close()

wb.close()

问题分析

  1. Workbook操作错误:如果使用的是xlsxwriter,它的Workbook对象没有close()方法,需用save()完成文件保存;若用openpyxl,初始化和写入方式也和当前代码不匹配。
  2. 索引越界风险:循环中直接使用index + 2、index + 11等索引,当index接近文本末尾时,会超出列表长度导致崩溃。
  3. 冗余操作与格式风险:多次重复调用split(),且未判断拆分后元素数量,一旦数据格式异常就会报错。
  4. 冗余文件关闭:with open会自动关闭文件,无需手动调用file.close()。

修复后的代码(以xlsxwriter为例)

import xlsxwriter

# 初始化Excel工作簿
wb = xlsxwriter.Workbook('D:\\IJS\\JEFF444.xlsx')
ws = wb.add_worksheet()

with open(trimmed_data, 'r') as file:
    lines = file.readlines()
    row = 8
    # 遍历索引时预留足够余量,避免index+11超出列表长度
    for index in range(len(lines) - 11):
        current_line = lines[index].strip()
        if not current_line:
            continue
        line_parts = current_line.split()
        print(line_parts)
        
        # 检查最后一个元素是否以"444"结尾
        if line_parts and line_parts[-1].endswith('444'):
            # 写入B列数据
            ws.write(f'B{row}', line_parts[3].split('/')[0])
            
            # 处理index+2行的数据
            line_2 = lines[index + 2].strip()
            if line_2:
                parts_2 = line_2.split()
                if len(parts_2) >= 3:
                    val = float(parts_2[1])
                    ws.write(f'E{row}', val)
                    ws.write(f'F{row}', val * float(parts_2[2]))
            
            # 处理index+5行的数据
            line_5 = lines[index + 5].strip()
            if line_5:
                parts_5 = line_5.split()
                if len(parts_5) >= 3:
                    val = float(parts_5[1])
                    ws.write(f'J{row}', val)
                    ws.write(f'K{row}', val * float(parts_5[2]))
            
            # 处理index+8行的数据
            line_8 = lines[index + 8].strip()
            if line_8:
                parts_8 = line_8.split()
                if len(parts_8) >= 3:
                    val = float(parts_8[1])
                    ws.write(f'O{row}', val)
                    ws.write(f'P{row}', val * float(parts_8[2]))
            
            # 处理index+11行的数据
            line_11 = lines[index + 11].strip()
            if line_11:
                parts_11 = line_11.split()
                if len(parts_11) >= 3:
                    val = float(parts_11[1])
                    ws.write(f'T{row}', val)
                    ws.write(f'U{row}', val * float(parts_11[2]))
            
            row += 1

# xlsxwriter通过save()完成保存并关闭工作簿
wb.save()

额外注意事项

  • 若改用openpyxl,需调整写法:创建Workbook后获取活动工作表,用ws.cell(row=row_num, column=col_num).value = 数据赋值(行列从1开始)。
  • 确保trimmed_data是正确的文本文件路径,无拼写错误。
  • 文本数据格式不稳定时,需增加更多判断逻辑,避免因数据缺失或格式异常导致报错。

内容的提问来源于stack exchange,提问作者GustavusAdolphus

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 13:36:29