最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python讀取多個(gè)TXT文件并提取指定列寫(xiě)入Excel

 更新時(shí)間:2026年01月18日 16:07:58   作者:普通網(wǎng)友  
這篇文章主要介紹了如何使用Python的pandas和openpyxl庫(kù)批量讀取指定文件夾下的TXT文件,提取指定列的數(shù)據(jù),并將結(jié)果寫(xiě)入Excel文件,支持按文件分Sheet或合并到單個(gè)Sheet,需要的朋友可以參考下

本文將實(shí)現(xiàn)批量讀取指定文件夾下的所有 TXT 文件,提取每個(gè)文件中指定列的所有值,并將結(jié)果寫(xiě)入 Excel(支持按文件分 Sheet、或合并到單個(gè) Sheet)。核心使用pandas(高效處理文本 / 表格數(shù)據(jù))和openpyxl(Excel 寫(xiě)入引擎),兼顧簡(jiǎn)潔性和通用性。

一、前置準(zhǔn)備

1. 安裝依賴(lài)庫(kù)

執(zhí)行以下命令安裝所需庫(kù):

pip install pandas openpyxl 
  • pandas:快速讀取 TXT 文件、提取列數(shù)據(jù);
  • openpyxl:支持寫(xiě)入.xlsx 格式 Excel 文件(pandas 默認(rèn)依賴(lài))。

2. 明確 TXT 文件格式

需先確認(rèn) TXT 文件的分隔符(常見(jiàn)類(lèi)型):

  • 空格分隔(如1 張三 20);
  • 制表符分隔(\t,如1\t張三\t20);
  • 逗號(hào)分隔(如1,張三,20);
  • 其他分隔符(如|、;)。

二、核心代碼實(shí)現(xiàn)

場(chǎng)景 1:所有 TXT 結(jié)構(gòu)一致,提取指定列(合并到 Excel 單個(gè) Sheet)

適用于所有 TXT 文件的列數(shù)、列順序完全相同,提取同一列(如第 2 列)并匯總到 Excel 的一個(gè) Sheet 中,標(biāo)注數(shù)據(jù)來(lái)源文件。

import os
import pandas as pd

def txt_col_to_excel(
    txt_folder,       # TXT文件所在文件夾路徑
    excel_path,       # 輸出Excel文件路徑(如"result.xlsx")
    target_col_index, # 要提取的列索引(從0開(kāi)始,如第2列填1)
    sep="\s+",        # TXT文件分隔符,默認(rèn)匹配任意空格(含多個(gè)空格/制表符)
    encoding="utf-8"  # TXT文件編碼(常見(jiàn)gbk/utf-8)
):
    """
    批量讀取TXT文件,提取指定列寫(xiě)入Excel單個(gè)Sheet
    """
    # 初始化匯總數(shù)據(jù)列表
    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="," 對(duì)應(yīng)逗號(hào)分隔;sep="\t" 對(duì)應(yīng)制表符;sep="|" 對(duì)應(yīng)豎線分隔
            df = pd.read_csv(
                txt_path,
                sep=sep,
                encoding=encoding,
                header=None,  # TXT無(wú)表頭時(shí)設(shè)為None,有表頭則設(shè)為0
                on_bad_lines="skip"  # 跳過(guò)格式錯(cuò)誤的行
            )
            
            # 2. 提取指定列,添加"來(lái)源文件"列便于溯源
            target_col = df.iloc[:, target_col_index]  # iloc[:,n] 提取第n列(索引從0開(kāi)始)
            temp_df = pd.DataFrame({
                "來(lái)源文件": filename,
                "目標(biāo)列數(shù)據(jù)": target_col
            })
            
            # 3. 追加到匯總列表
            all_data.append(temp_df)
        
        except Exception as e:
            print(f"處理文件 {filename} 失敗:{e}")
            continue
    
    # 4. 合并所有數(shù)據(jù)并寫(xiě)入Excel
    if all_data:
        final_df = pd.concat(all_data, ignore_index=True)
        # index=False 不寫(xiě)入行索引;engine="openpyxl" 支持.xlsx格式
        final_df.to_excel(excel_path, sheet_name="匯總數(shù)據(jù)", index=False, engine="openpyxl")
        print(f"所有數(shù)據(jù)已寫(xiě)入Excel:{excel_path}")
    else:
        print("未找到有效TXT文件或提取數(shù)據(jù)為空!")

# 示例調(diào)用
if __name__ == "__main__":
    # 配置參數(shù)(根據(jù)實(shí)際情況修改)
    TXT_FOLDER = r"E:\test_txt"  # TXT文件所在文件夾(絕對(duì)路徑)
    EXCEL_PATH = "提取結(jié)果.xlsx"  # 輸出Excel路徑
    TARGET_COL_INDEX = 1         # 提取第2列(索引從0開(kāi)始)
    SEP = "\s+"                  # TXT分隔符(如逗號(hào)分隔則改為",")
    ENCODING = "utf-8"           # 若TXT亂碼,嘗試改為"gbk"
    
    # 執(zhí)行函數(shù)
    txt_col_to_excel(TXT_FOLDER, EXCEL_PATH, TARGET_COL_INDEX, SEP, ENCODING)

場(chǎng)景 2:按 TXT 文件分 Sheet 寫(xiě)入 Excel

若希望每個(gè) TXT 文件的指定列單獨(dú)存入 Excel 的一個(gè) 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"
):
    # 創(chuàng)建Excel寫(xiě)入器
    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]]  # 保留列結(jié)構(gòu)
                target_df.columns = ["目標(biāo)列數(shù)據(jù)"]
                
                # Sheet名:去掉.txt后綴
                sheet_name = filename.replace(".txt", "")
                # 寫(xiě)入對(duì)應(yīng)Sheet
                target_df.to_excel(writer, sheet_name=sheet_name, index=False)
            
            except Exception as e:
                print(f"處理文件 {filename} 失?。簕e}")
                continue
    
    print(f"所有文件已分Sheet寫(xiě)入Excel:{excel_path}")

# 示例調(diào)用
if __name__ == "__main__":
    TXT_FOLDER = r"E:\test_txt"
    EXCEL_PATH = "按文件分Sheet結(jié)果.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)

三、關(guān)鍵參數(shù)說(shuō)明

參數(shù)說(shuō)明
txt_folderTXT 文件所在文件夾路徑,建議用絕對(duì)路徑(如r"E:\data\txt"),避免路徑錯(cuò)誤
target_col_index目標(biāo)列索引(從 0 開(kāi)始),例如第 1 列填 0、第 3 列填 2
sepTXT 分隔符:- 空格分隔:sep="\s+"(匹配 1 個(gè)或多個(gè)空格)- 制表符:sep="\t"- 逗號(hào):sep=","- 豎線:`sep=""`
encodingTXT 文件編碼,Windows 默認(rèn) ANSI 對(duì)應(yīng)gbk,UTF-8 文件填utf-8
header若 TXT 文件有表頭(如第一行是 "序號(hào),姓名,年齡"),設(shè)為header=0,否則None

四、常見(jiàn)問(wèn)題解決

1. TXT 讀取亂碼

  • 原因:編碼不匹配(如文件是 gbk 編碼,代碼用 utf-8 讀取);
  • 解決:將encoding改為gbk,或用chardet庫(kù)檢測(cè)文件編碼:
import chardet
with open("test.txt", "rb") as f:
    result = chardet.detect(f.read())
print("文件編碼:", result["encoding"])  # 輸出如gbk/utf-8

2. 列索引越界報(bào)錯(cuò)

  • 原因:指定的target_col_index超過(guò) TXT 文件的列數(shù);
  • 解決:先打印 TXT 文件的列數(shù),確認(rèn)索引:
df = pd.read_csv("test.txt", sep="\s+", header=None)
print("TXT文件列數(shù):", df.shape[1])  # 輸出列數(shù),索引范圍0~列數(shù)-1

3. 部分行跳過(guò)(on_bad_lines="skip")

  • 原因:TXT 中部分行格式錯(cuò)誤(如列數(shù)不一致);
  • 解決:若需保留所有行,可去掉該參數(shù),手動(dòng)排查格式錯(cuò)誤行。

五、擴(kuò)展優(yōu)化

支持子文件夾遍歷:若 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)
            # 后續(xù)處理邏輯不變

數(shù)據(jù)去重 / 清洗:提取列后可添加去重邏輯:

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

追加寫(xiě)入 Excel:若需向已有 Excel 追加數(shù)據(jù),可先讀取原有數(shù)據(jù),再合并后寫(xiě)入。

該方案兼顧通用性和易用性,適用于大多數(shù)結(jié)構(gòu)化 TXT 文件的列提取場(chǎng)景,可根據(jù)實(shí)際需求調(diào)整分隔符、編碼、列索引等參數(shù)。

以上就是Python讀取多個(gè)TXT文件并提取指定列寫(xiě)入Excel的詳細(xì)內(nèi)容,更多關(guān)于Python讀取多個(gè)TXT并寫(xiě)入Excel的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Python實(shí)現(xiàn)單例模式的最佳方法匯總

    Python實(shí)現(xiàn)單例模式的最佳方法匯總

    單例模式是一種創(chuàng)建型設(shè)計(jì)模式,它確保一個(gè)類(lèi)只有一個(gè)實(shí)例,并提供一個(gè)全局訪問(wèn)點(diǎn)來(lái)獲取這個(gè)實(shí)例,在Python中,有多種方式可以實(shí)現(xiàn)單例模式,不同的實(shí)現(xiàn)方式各有優(yōu)缺點(diǎn),適用于不同的場(chǎng)景,本文給大家匯總了最佳實(shí)現(xiàn)方法,需要的朋友可以參考下
    2025-07-07
  • 對(duì)DJango視圖(views)和模版(templates)的使用詳解

    對(duì)DJango視圖(views)和模版(templates)的使用詳解

    今天小編就為大家分享一篇對(duì)DJango視圖(views)和模版(templates)的使用詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2019-07-07
  • Django全局啟用登陸驗(yàn)證login_required的方法

    Django全局啟用登陸驗(yàn)證login_required的方法

    這篇文章主要介紹了Django全局啟用登陸驗(yàn)證login_required的方法,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-06-06
  • python實(shí)現(xiàn)搜索指定目錄下文件及文件內(nèi)搜索指定關(guān)鍵詞的方法

    python實(shí)現(xiàn)搜索指定目錄下文件及文件內(nèi)搜索指定關(guān)鍵詞的方法

    這篇文章主要介紹了python實(shí)現(xiàn)搜索指定目錄下文件及文件內(nèi)搜索指定關(guān)鍵詞的方法,可實(shí)現(xiàn)針對(duì)文件夾及文件內(nèi)關(guān)鍵詞的搜索功能,需要的朋友可以參考下
    2015-06-06
  • 使用PySide多線程處理圖形界面卡頓問(wèn)題詳解

    使用PySide多線程處理圖形界面卡頓問(wèn)題詳解

    這篇文章主要介紹了使用PySide多線程處理圖形界面卡頓問(wèn)題,在制作圖形界面時(shí),只用一個(gè)線程很容易導(dǎo)致卡頓無(wú)響應(yīng),一旦主線程被阻塞,那么整個(gè)圖形界面都會(huì)無(wú)法繼續(xù)使用,為了解決這個(gè)問(wèn)題,就得使用多線程,需要的朋友可以參考下
    2025-04-04
  • Python使用py2neo操作圖數(shù)據(jù)庫(kù)neo4j的方法詳解

    Python使用py2neo操作圖數(shù)據(jù)庫(kù)neo4j的方法詳解

    這篇文章主要介紹了Python使用py2neo操作圖數(shù)據(jù)庫(kù)neo4j的方法,結(jié)合實(shí)例形式詳細(xì)分析了Python使用py2neo操作圖數(shù)據(jù)庫(kù)neo4j的具體步驟、原理、相關(guān)使用技巧與操作注意事項(xiàng),需要的朋友可以參考下
    2020-01-01
  • python使用paramiko實(shí)現(xiàn)ssh的功能詳解

    python使用paramiko實(shí)現(xiàn)ssh的功能詳解

    這篇文章主要介紹了python使用paramiko實(shí)現(xiàn)ssh的功能詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-03-03
  • 基于python代碼實(shí)現(xiàn)簡(jiǎn)易濾除數(shù)字的方法

    基于python代碼實(shí)現(xiàn)簡(jiǎn)易濾除數(shù)字的方法

    今天小編就為大家分享一篇基于python代碼實(shí)現(xiàn)簡(jiǎn)易濾除數(shù)字的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2018-07-07
  • 決策樹(shù)剪枝算法的python實(shí)現(xiàn)方法詳解

    決策樹(shù)剪枝算法的python實(shí)現(xiàn)方法詳解

    這篇文章主要介紹了決策樹(shù)剪枝算法的python實(shí)現(xiàn)方法,結(jié)合實(shí)例形式較為詳細(xì)的分析了決策樹(shù)剪枝算法的概念、原理并結(jié)合實(shí)例形式分析了Python相關(guān)實(shí)現(xiàn)技巧,需要的朋友可以參考下
    2019-09-09
  • redis-py在Python中連接與使用Redis全過(guò)程

    redis-py在Python中連接與使用Redis全過(guò)程

    文章介紹了如何在Python項(xiàng)目中安裝和使用redis-py庫(kù)連接Redis,包括連接測(cè)試、核心功能、高級(jí)用法和配置優(yōu)化,還提供了官方文檔和示例代碼的鏈接,幫助開(kāi)發(fā)者進(jìn)一步學(xué)習(xí)和深入應(yīng)用Redis
    2025-11-11

最新評(píng)論

澜沧| 泸溪县| 平乡县| 金阳县| 岗巴县| 武功县| 仁布县| 吉隆县| 定襄县| 通道| 马鞍山市| 惠来县| 峨眉山市| 佛山市| 措美县| 霍城县| 东乌珠穆沁旗| 瑞安市| 汝阳县| 栖霞市| 乡城县| 原平市| 六枝特区| 莱西市| 福清市| 三河市| 莲花县| 东山县| 新津县| 师宗县| 重庆市| 隆子县| 晋中市| 缙云县| 丹棱县| 水富县| 通河县| 内丘县| 桓台县| 清涧县| 灵璧县|