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

作者:

文章目录
  • 参数 说明 txt_folder TXT 文件所在文件夹路径,建议用绝对路径(如r"E:datatxt"),避免路径错误 target_col_index 目标列索引(从 0 开始),例如第 1 列填 0、第 3 列填 2 sep TXT 分隔符:- 空格分隔:sep="s+"(匹配 1 个或多个空格)- 制表符:sep="t"– 逗号:sep=","– 竖线:`sep=" "` encoding TXT 文件编码,Windows 默认 ANSI 对应gbk,UTF-8 文件填utf-8 header 若 TXT 文件有表头(如第一行是 "序号,姓名,年龄"),设为header=0,否则None
  • 支持子文件夹遍历:若 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的资料请关注风君子博客其它相关文章! 您可能感兴趣的文章: Python读取和写入txt、Excel文件和JSON文件的方法 Python读取txt内容写入xls格式excel中的方法 Python读取pdf、word、excel、ppt、csv和txt文件提取所有文本 python读取和保存为excel、csv、txt文件及对DataFrame文件的基本操作指南 Python实现读取txt文件并转换为excel的方法示例
  • 目录
    • 一、前置准备
      • 1. 安装依赖库
      • 2. 明确 TXT 文件格式
    • 二、核心代码实现
      • 场景 1:所有 TXT 结构一致,提取指定列(合并到 Excel 单个 Sheet)
      • 场景 2:按 TXT 文件分 Sheet 写入 Excel
    • 三、关键参数说明
      • 四、常见问题解决
        • 1. TXT 读取乱码
        • 2. 列索引越界报错
        • 3. 部分行跳过(on_bad_lines="skip")
      • 五、扩展优化

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

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

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

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

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

        适用于所有 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)
        

        若希望每个 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_folder TXT 文件所在文件夹路径,建议用绝对路径(如r"E:datatxt"),避免路径错误
        target_col_index 目标列索引(从 0 开始),例如第 1 列填 0、第 3 列填 2
        sep TXT 分隔符:- 空格分隔:sep="s+"(匹配 1 个或多个空格)- 制表符:sep="t"– 逗号:sep=","– 竖线:`sep=" "`
        encoding TXT 文件编码,Windows 默认 ANSI 对应gbk,UTF-8 文件填utf-8
        header 若 TXT 文件有表头(如第一行是 "序号,姓名,年龄"),设为header=0,否则None

        • 原因:编码不匹配(如文件是 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
        

        • 原因:指定的target_col_index超过 TXT 文件的列数;
        • 解决:先打印 TXT 文件的列数,确认索引:
        df = pd.read_csv("test.txt", sep="s+", header=None)
        print("TXT文件列数:", df.shape[1])  # 输出列数,索引范围0~列数-1
        

        • 原因: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的资料请关注风君子博客其它相关文章!

        您可能感兴趣的文章:

        • Python读取和写入txt、Excel文件和JSON文件的方法
        • Python读取txt内容写入xls格式excel中的方法
        • Python读取pdf、word、excel、ppt、csv和txt文件提取所有文本
        • python读取和保存为excel、csv、txt文件及对DataFrame文件的基本操作指南
        • Python实现读取txt文件并转换为excel的方法示例

        站内搜索