You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Python Pandas将多TXT文件数据合并为单个DataFrame并展示

解决方法

你的问题核心是每次循环都覆盖了books变量,导致最后只保留了最后一个文件的DataFrame。要合并成单个DataFrame,你可以先收集所有书籍的数据,最后再统一生成DataFrame,具体有两种常用方式:

方式一:用列表存储字典(推荐,效率更高)

import re
import pandas as pd
from glob import glob

files = glob('dataset/*.txt')
files.sort()

# 创建空列表存储每本书的信息字典
book_list = []

# 提前编译正则表达式,避免循环内重复编译提升效率
title_pattern = re.compile(r'Title: (.*)\n')
author_pattern = re.compile(r'Author: (.*)\n')
release_date_pattern = re.compile(r'Release Date: (.*)\s')
language_pattern = re.compile(r'Language: (.*)\n')

for n in files:
    with open(n, 'r') as text_file:
        text = text_file.read()
    
    # 提取信息,增加异常判断避免个别文件格式异常导致报错
    book_title = title_pattern.search(text).group(1) if title_pattern.search(text) else None
    # 取消下方注释即可启用作者字段提取
    # book_author = author_pattern.search(text).group(1) if author_pattern.search(text) else None
    book_author = None  # 临时占位,可替换为上面的注释行
    book_language = language_pattern.search(text).group(1) if language_pattern.search(text) else None
    book_release = release_date_pattern.search(text).group(1).split(' [')[0] if release_date_pattern.search(text) else None
    
    # 将当前书籍信息存入字典并添加到列表
    book_list.append({
        "Title": book_title,
        "Author": book_author,
        "Release_Date": book_release,
        "Language": book_language
    })

# 将列表转换为单个DataFrame
books_df = pd.DataFrame(book_list)
# 展示结果
books_df

方式二:用列表存储小DataFrame,最后合并

import re
import pandas as pd
from glob import glob

files = glob('dataset/*.txt')
files.sort()

# 创建空列表存储每个文件对应的小DataFrame
df_list = []

title_pattern = re.compile(r'Title: (.*)\n')
author_pattern = re.compile(r'Author: (.*)\n')
release_date_pattern = re.compile(r'Release Date: (.*)\s')
language_pattern = re.compile(r'Language: (.*)\n')

for n in files:
    with open(n, 'r') as text_file:
        text = text_file.read()
    
    book_title = title_pattern.search(text).group(1) if title_pattern.search(text) else None
    # book_author = author_pattern.search(text).group(1) if author_pattern.search(text) else None
    book_author = None
    book_language = language_pattern.search(text).group(1) if language_pattern.search(text) else None
    book_release = release_date_pattern.search(text).group(1).split(' [')[0] if release_date_pattern.search(text) else None
    
    # 生成当前书籍的小DataFrame并添加到列表
    single_book_df = pd.DataFrame({
        "Title": [book_title],
        "Author": [book_author],
        "Release_Date": [book_release],
        "Language": [book_language]
    })
    df_list.append(single_book_df)

# 合并所有小DataFrame
books_df = pd.concat(df_list, ignore_index=True)
# 展示结果
books_df

额外优化提示

  • 把正则表达式编译放在循环外,避免重复编译,处理1000个文件时能明显提升效率
  • 增加的格式异常判断,可防止个别不符合规则的文件导致代码中断

内容的提问来源于stack exchange,提问作者watch dog

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.09 08:05:14