如何使用Python将TXT文件转换为制表符分隔的Excel文件
你遇到的输出为空、打开报错的问题,核心是两个常见原因:一是分隔符判断不准导致读取数据为空,二是100万行数据刚好接近xlsx单sheet最大1048576行的阈值,常规写入方法容易溢出报错。
前置说明
你描述的「按一次退格键两列贴合」的特征,基本可以确认分隔符是制表符\t,下面的方案也会加入自动识别分隔符的逻辑,避免手动判断出错。
依赖安装
使用pandas+xlsxwriter实现大文件稳定写入,执行以下命令安装依赖:pip install pandas xlsxwriter
完整实现代码
import pandas as pd import csv # 自动识别文件分隔符 def detect_delimiter(file_path, sample_count=10): with open(file_path, 'r', encoding='utf-8') as f: sample = ''.join([f.readline() for _ in range(sample_count)]) return csv.Sniffer().sniff(sample).delimiter # 配置参数,替换为你自己的文件路径 INPUT_TXT = "你的源文件.txt" OUTPUT_EXCEL = "转换结果.xlsx" # xlsx单sheet最大支持1048576行,预留1行余量 MAX_SHEET_ROWS = 1048575 # 读取TXT内容,大文件分块读取避免内存溢出 delimiter = detect_delimiter(INPUT_TXT) # 手动指定分隔符可替换为 delimiter = '\t' data_chunks = pd.read_csv( INPUT_TXT, sep=delimiter, header=None, chunksize=20000, skipinitialspace=True, on_bad_lines='skip' ) full_data = pd.concat(data_chunks, ignore_index=True) # 写入Excel,超行数自动拆分多个sheet with pd.ExcelWriter(OUTPUT_EXCEL, engine='xlsxwriter') as writer: total_rows = len(full_data) if total_rows <= MAX_SHEET_ROWS: full_data.to_excel(writer, sheet_name='数据', index=False, header=False) else: for idx, start in enumerate(range(0, total_rows, MAX_SHEET_ROWS), 1): end = start + MAX_SHEET_ROWS full_data.iloc[start:end].to_excel( writer, sheet_name=f'数据_{idx}', index=False, header=False )
异常排查
- 编码报错:把读取文件的
encoding='utf-8'替换为encoding='gbk'或encoding='latin-1'重试 - 内存不足:取消
full_data的合并逻辑,直接将每个读取到的chunk依次写入Excel即可 - 分隔符识别错误:删除自动识别逻辑,手动设置
delimiter = '\t'即可
内容的提问来源于stack exchange,提问作者Ahmet Bilgin
相关产品推荐
相关产品推荐

