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

 更新时间:2026年01月18日 16:07:58   作者:普通网友  
这篇文章主要介绍了如何使用Python的pandas和openpyxl库批量读取指定文件夹下的TXT文件,提取指定列的数据,并将结果写入Excel文件,支持按文件分Sheet或合并到单个Sheet,需要的朋友可以参考下

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

一、前置准备

1. 安装依赖库

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

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 中,标注数据来源文件。

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 文件名),修改核心逻辑如下:

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库检测文件编码:
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 文件的列数,确认索引:
df = pd.read_csv("test.txt", sep="\s+", header=None)
print("TXT文件列数:", df.shape[1])  # 输出列数,索引范围0~列数-1

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

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

五、扩展优化

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

for root, dirs, files in os.walk(txt_folder):
    for filename in files:
        if filename.endswith(".txt"):
            txt_path = os.path.join(root, filename)
            # 后续处理逻辑不变

数据去重 / 清洗:提取列后可添加去重逻辑:

target_df = target_df.drop_duplicates()  # 去重
target_df = target_df.dropna()           # 删除空值行

追加写入 Excel:若需向已有 Excel 追加数据,可先读取原有数据,再合并后写入。

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

以上就是Python读取多个TXT文件并提取指定列写入Excel的详细内容,更多关于Python读取多个TXT并写入Excel的资料请关注脚本之家其它相关文章!

相关文章

  • CentOS下Python3的安装及创建虚拟环境的方法

    CentOS下Python3的安装及创建虚拟环境的方法

    这篇文章主要介绍了CentOS下Python3的安装及创建虚拟环境的方法,本文给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
    2018-11-11
  • 如何基于Python实现电子邮件的发送

    如何基于Python实现电子邮件的发送

    这篇文章主要介绍了如何基于Python实现电子邮件的发送,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-12-12
  • 基于Python中request请求得到的response的属性问题

    基于Python中request请求得到的response的属性问题

    这篇文章主要介绍了基于Python中request请求得到的response的属性问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-05-05
  • 利用Python批量循环读取Excel的技巧分享

    利用Python批量循环读取Excel的技巧分享

    这篇文章主要为大家详细介绍了何用Python批量循环读取Excel,文中的示例代码讲解详细,对我们的学习或工作有一定的帮助,感兴趣的可以了解一下
    2023-07-07
  • Python递归函数反转序列的实现

    Python递归函数反转序列的实现

    本文主要介绍了Python递归函数反转序列的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-07-07
  • 总结Python函数参数的六种类型

    总结Python函数参数的六种类型

    这篇文章主要总结了Python函数参数的六种类型,传递参数实现不同场景的灵活使用,下面总结的六种函数参数类型,需要的小伙伴可以参考一下
    2022-03-03
  • python matplotlib实现坐标投影的示例代码

    python matplotlib实现坐标投影的示例代码

    这篇文章主要为大家详细介绍了python matplotlib实现坐标投影,文中的示例代码讲解详细,具有一定的参考价值,感兴趣的小伙伴可以跟随小编一起学习一下
    2024-02-02
  • 使用Python实现屏幕截图工具

    使用Python实现屏幕截图工具

    这篇文章主要为大家详细介绍了如何使用Python实现一个简单的屏幕截图工具,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下
    2025-03-03
  • python基于BeautifulSoup实现抓取网页指定内容的方法

    python基于BeautifulSoup实现抓取网页指定内容的方法

    这篇文章主要介绍了python基于BeautifulSoup实现抓取网页指定内容的方法,涉及Python使用BeautifulSoup模块解析html网页的相关技巧,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-07-07
  • centos下更新Python版本的步骤

    centos下更新Python版本的步骤

    安装完CentOS5.9(Final)后,执行#Python与#python -V,看到版本号是2.4.3,很老了,而且之前写的都是跑在python3.X上面的,3.X和2.X有很多不同,有兴趣的朋友可以参考下这篇文章
    2013-02-02

最新评论