news 2026/3/22 11:04:39

Python 读取多个 TXT 文件并提取指定列写入 Excel

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Python 读取多个 TXT 文件并提取指定列写入 Excel

本文将实现批量读取指定文件夹下的所有 TXT 文件,提取每个文件中指定列的所有值,并将结果写入 Excel(支持按文件分 Sheet、或合并到单个 Sheet)。核心使用pandas(高效处理文本 / 表格数据)和openpyxl(Excel 写入引擎),兼顾简洁性和通用性。

一、前置准备

1. 安装依赖库

执行以下命令安装所需库:

bash

pip install pandas openpyxl
  • pandas:快速读取 TXT 文件、提取列数据;
  • openpyxl:支持写入.xlsx 格式 Excel 文件(pandas 默认依赖)。

2. 明确 TXT 文件格式

需先确认 TXT 文件的分隔符(常见类型):

  • 空格分隔(如1 张三 20);
  • 制表符分隔(\t,如1\t张三\t20);
  • 逗号分隔(如1,张三,20);
  • 其他分隔符(如|;)。

二、核心代码实现

场景 1:所有 TXT 结构一致,提取指定列(合并到 Excel 单个 Sheet)

适用于所有 TXT 文件的列数、列顺序完全相同,提取同一列(如第 2 列)并汇总到 Excel 的一个 Sheet 中,标注数据来源文件。

python

import os import pandas as pd def txt_col_to_excel( txt_folder, # TXT文件所在文件夹路径 excel_path, # 输出Excel文件路径(如"result.xlsx") target_col_index, # 要提取的列索引(从0开始,如第2列填1) sep="\s+", # TXT文件分隔符,默认匹配任意空格(含多个空格/制表符) encoding="utf-8" # TXT文件编码(常见gbk/utf-8) ): """ 批量读取TXT文件,提取指定列写入Excel单个Sheet """ # 初始化汇总数据列表 all_data = [] # 遍历文件夹下所有TXT文件 for filename in os.listdir(txt_folder): # 仅处理.txt后缀文件 if not filename.endswith(".txt"): continue # 拼接完整文件路径 txt_path = os.path.join(txt_folder, filename) print(f"正在处理文件:{filename}") try: # 1. 读取TXT文件为DataFrame # sep="," 对应逗号分隔;sep="\t" 对应制表符;sep="|" 对应竖线分隔 df = pd.read_csv( txt_path, sep=sep, encoding=encoding, header=None, # TXT无表头时设为None,有表头则设为0 on_bad_lines="skip" # 跳过格式错误的行 ) # 2. 提取指定列,添加"来源文件"列便于溯源 target_col = df.iloc[:, target_col_index] # iloc[:,n] 提取第n列(索引从0开始) temp_df = pd.DataFrame({ "来源文件": filename, "目标列数据": target_col }) # 3. 追加到汇总列表 all_data.append(temp_df) except Exception as e: print(f"处理文件 {filename} 失败:{e}") continue # 4. 合并所有数据并写入Excel if all_data: final_df = pd.concat(all_data, ignore_index=True) # index=False 不写入行索引;engine="openpyxl" 支持.xlsx格式 final_df.to_excel(excel_path, sheet_name="汇总数据", index=False, engine="openpyxl") print(f"所有数据已写入Excel:{excel_path}") else: print("未找到有效TXT文件或提取数据为空!") # 示例调用 if __name__ == "__main__": # 配置参数(根据实际情况修改) TXT_FOLDER = r"E:\test_txt" # TXT文件所在文件夹(绝对路径) EXCEL_PATH = "提取结果.xlsx" # 输出Excel路径 TARGET_COL_INDEX = 1 # 提取第2列(索引从0开始) SEP = "\s+" # TXT分隔符(如逗号分隔则改为",") ENCODING = "utf-8" # 若TXT乱码,尝试改为"gbk" # 执行函数 txt_col_to_excel(TXT_FOLDER, EXCEL_PATH, TARGET_COL_INDEX, SEP, ENCODING)

场景 2:按 TXT 文件分 Sheet 写入 Excel

若希望每个 TXT 文件的指定列单独存入 Excel 的一个 Sheet(Sheet 名 = TXT 文件名),修改核心逻辑如下:

python

import os import pandas as pd def txt_col_to_excel_by_sheet( txt_folder, excel_path, target_col_index, sep="\s+", encoding="utf-8" ): # 创建Excel写入器 with pd.ExcelWriter(excel_path, engine="openpyxl") as writer: for filename in os.listdir(txt_folder): if not filename.endswith(".txt"): continue txt_path = os.path.join(txt_folder, filename) print(f"正在处理文件:{filename}") try: df = pd.read_csv( txt_path, sep=sep, encoding=encoding, header=None, on_bad_lines="skip" ) # 提取指定列,重命名列名 target_df = df.iloc[:, [target_col_index]] # 保留列结构 target_df.columns = ["目标列数据"] # Sheet名:去掉.txt后缀 sheet_name = filename.replace(".txt", "") # 写入对应Sheet target_df.to_excel(writer, sheet_name=sheet_name, index=False) except Exception as e: print(f"处理文件 {filename} 失败:{e}") continue print(f"所有文件已分Sheet写入Excel:{excel_path}") # 示例调用 if __name__ == "__main__": TXT_FOLDER = r"E:\test_txt" EXCEL_PATH = "按文件分Sheet结果.xlsx" TARGET_COL_INDEX = 1 SEP = "\s+" ENCODING = "utf-8" txt_col_to_excel_by_sheet(TXT_FOLDER, EXCEL_PATH, TARGET_COL_INDEX, SEP, ENCODING)

三、关键参数说明

参数说明
txt_folderTXT 文件所在文件夹路径,建议用绝对路径(如r"E:\data\txt"),避免路径错误
target_col_index目标列索引(从 0 开始),例如第 1 列填 0、第 3 列填 2
sepTXT 分隔符:- 空格分隔:sep="\s+"(匹配 1 个或多个空格)- 制表符:sep="\t"- 逗号:sep=","- 竖线:`sep=""`
encodingTXT 文件编码,Windows 默认 ANSI 对应gbk,UTF-8 文件填utf-8
header若 TXT 文件有表头(如第一行是 "序号,姓名,年龄"),设为header=0,否则None

四、常见问题解决

1. TXT 读取乱码

  • 原因:编码不匹配(如文件是 gbk 编码,代码用 utf-8 读取);
  • 解决:将encoding改为gbk,或用chardet库检测文件编码:

    python

    import chardet with open("test.txt", "rb") as f: result = chardet.detect(f.read()) print("文件编码:", result["encoding"]) # 输出如gbk/utf-8

2. 列索引越界报错

  • 原因:指定的target_col_index超过 TXT 文件的列数;
  • 解决:先打印 TXT 文件的列数,确认索引:

    python

    df = pd.read_csv("test.txt", sep="\s+", header=None) print("TXT文件列数:", df.shape[1]) # 输出列数,索引范围0~列数-1

3. 部分行跳过(on_bad_lines="skip")

  • 原因:TXT 中部分行格式错误(如列数不一致);
  • 解决:若需保留所有行,可去掉该参数,手动排查格式错误行。

五、扩展优化

  1. 支持子文件夹遍历:若 TXT 文件分布在子文件夹中,用os.walk替换os.listdir

    python

    for root, dirs, files in os.walk(txt_folder): for filename in files: if filename.endswith(".txt"): txt_path = os.path.join(root, filename) # 后续处理逻辑不变
  2. 数据去重 / 清洗:提取列后可添加去重逻辑:

    python

    target_df = target_df.drop_duplicates() # 去重 target_df = target_df.dropna() # 删除空值行
  3. 追加写入 Excel:若需向已有 Excel 追加数据,可先读取原有数据,再合并后写入。

该方案兼顾通用性和易用性,适用于大多数结构化 TXT 文件的列提取场景,可根据实际需求调整分隔符、编码、列索引等参数。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/3/13 18:57:17

Windows美化神器DWMBlurGlass:三步打造专属透明视界

还在忍受Windows系统千篇一律的界面设计吗?想要让电脑桌面焕然一新却不知从何下手?今天我要向你推荐一款改变游戏规则的Windows美化工具——DWMBlurGlass,它能让你的系统界面瞬间升级为高级感十足的透明模糊效果! 【免费下载链接】…

作者头像 李华
网站建设 2026/3/21 16:27:04

Keil与STM32工业控制器集成:系统学习

Keil与STM32工业控制器集成:从入门到实战的系统性探索为什么工业控制离不开Keil STM32?在智能制造加速落地的今天,工厂里的每一条产线、每一台设备背后,都藏着一个“沉默的大脑”——嵌入式控制器。而这个大脑的核心,…

作者头像 李华
网站建设 2026/3/22 8:48:36

FLUX.1 schnell图像生成:开启极速创意之旅

FLUX.1 schnell作为一款革命性的AI绘图工具,将文本转图像的技术推向了新的高度。这款拥有120亿参数的修正流变换器,通过潜在对抗扩散蒸馏训练,能够在1到4步内生成高质量图像,为创作者提供了前所未有的创作效率。 【免费下载链接】…

作者头像 李华
网站建设 2026/3/20 12:03:06

AI设计:从基础入门到商业落地的实战指南

随着生成式AI技术的普及,AI设计已从行业“试用工具”转变为企业日常设计的“基础设施”。但多数从业者面临两大痛点:入门时被复杂的Prompt语法和工具选择绕晕,掌握基础后又难以将AI输出转化为符合商业要求的成果。本文结合实战经验&#xff0…

作者头像 李华
网站建设 2026/3/15 22:55:17

从零构建AutoGLM系统,手把手教你实现开源自主推理(实战指南)

第一章:AutoGLM系统概述AutoGLM 是一个面向生成式语言模型自动化任务处理的智能系统,旨在通过集成大模型能力与自动化流程引擎,实现自然语言理解、任务分解、工具调用与结果生成的一体化闭环。该系统特别适用于需要多轮推理、外部工具协同及动…

作者头像 李华
网站建设 2026/3/22 10:42:31

IDM激活脚本终极指南:轻松实现永久使用的完整教程

IDM激活脚本终极指南:轻松实现永久使用的完整教程 【免费下载链接】IDM-Activation-Script IDM Activation & Trail Reset Script 项目地址: https://gitcode.com/gh_mirrors/id/IDM-Activation-Script 还在为Internet Download Manager的激活问题而烦恼…

作者头像 李华