如何将非固定宽度空格分隔文件转为Pandas DataFrame并合并多TXT文件
读取多份TXT记录并合并为CSV的Python方案
1. 单个TXT文件的读取逻辑
每个TXT文件是单条记录的键值对格式,最后一行Name: 0, dtype: object属于无用信息需要忽略。我们可以写一个函数来提取有效键值对并转换为单行DataFrame:
import pandas as pd def read_single_txt(file_path): record = {} with open(file_path, 'r', encoding='utf-8') as f: lines = f.readlines() # 跳过最后一行的冗余信息 for line in lines[:-1]: # 只拆分一次,适配键名含空格的情况(比如"Weather conditions") key, value = line.strip().split(maxsplit=1) # 自动转换数值类型(可选,按需调整) try: value = float(value) # 整数类数值转成int(比如Vehicle_condition) if value.is_integer(): value = int(value) except ValueError: # 非数值类型保持原字符串 pass record[key] = value # 转为单行DataFrame return pd.DataFrame([record])
2. 批量处理所有TXT文件
用glob批量获取目标目录下的所有TXT文件,循环读取并合并成完整的DataFrame:
import glob import os # 替换为你的TXT文件存放目录 txt_directory = "./delivery_dataset" # 获取目录下所有.txt文件的路径 all_txt_files = glob.glob(os.path.join(txt_directory, "*.txt")) # 存储每个文件的DataFrame df_collection = [] for file_path in all_txt_files: single_df = read_single_txt(file_path) df_collection.append(single_df) # 合并所有数据,重置索引 merged_df = pd.concat(df_collection, ignore_index=True)
3. 导出为CSV文件
将合并后的DataFrame保存为单个CSV文件:
# 替换为你想要保存的CSV路径 merged_df.to_csv("./merged_delivery_records.csv", index=False, encoding='utf-8')
额外提示
- 针对45000+文件的场景:现代机器的内存完全能支撑Pandas处理4万+行数据,如果内存吃紧,可以考虑分批次写入CSV,或者使用
dask.dataframe来优化内存占用。 - 编码问题:如果TXT文件读取时出现乱码,尝试修改
open函数的encoding参数为gbk或utf-16等其他编码。 - 数值转换:如果不需要自动转换类型,直接移除函数里的
try-except块即可,所有字段会保留为字符串类型。
内容的提问来源于stack exchange,提问作者Sankhadeep Dutta
相关产品推荐
相关产品推荐

