Python如何按文件名前缀读取目录下多个TXT文件并提取指定列
解决方案
一、前缀匹配读取文件实现
该需求完全可以实现,你原有代码的核心思路是正确的,仅存在参数调用顺序错误、匹配逻辑不够灵活的小问题,优化后的实现如下:
import os import re import pandas as pd def find_files_by_prefix(directory, file_prefix): """ 根据固定前缀匹配目标目录下的文件 返回格式:{实体标识: 对应文件的完整路径} """ entity_file_map = {} for filename in os.listdir(directory): # 仅匹配前缀符合、后缀为txt的有效文件 if filename.startswith(file_prefix) and filename.endswith(".txt"): # 提取实体标识:MH开头的文件取首个下划线前的内容作为实体,无MH前缀默认是MHI主体 if filename.startswith("MH"): entity = re.findall(r"^([A-Z]+)_", filename)[0] else: entity = "MHI" # 用os.path.join拼接路径,避免Windows/Linux路径分隔符兼容问题 entity_file_map[entity] = os.path.join(directory, filename) return entity_file_map
调用示例
# 核心参数顺序:第一个是文件目录,第二个是你要匹配的固定前缀 # 获取所有MHEU主体的交易文件 mheu_trade_map = find_files_by_prefix(CoreMurexFilesLoc, "MHEU_Trade_") # 获取所有MHBK主体的现金交易文件 mhbk_cash_map = find_files_by_prefix(CoreMurexFilesLoc, "MHBK_TradeCash_") # 获取MHI主体的交易文件 mhi_trade_map = find_files_by_prefix(CoreMurexFilesLoc, "Trade_") # 读取MHI交易文件为数据框 if "MHI" in mhi_trade_map: mhi_trade_df = pd.read_csv(mhi_trade_map["MHI"], delimiter="|")
二、指定列数据获取方法
用pd.read_csv读取|分隔的txt文件后,完全支持按列名或者列索引获取指定列数值:
- 按列名取值:
mhi_trade_df["目标列名"] - 按列索引取值(索引从0开始,示例取第2列):
mhi_trade_df.iloc[:, 1] - 批量取多列:
mhi_trade_df[["列名1", "列名3"]]或mhi_trade_df.iloc[:, [0, 2]]
如果你的txt文件没有内置表头,读取时添加header=None参数,还可以自定义列名:
df = pd.read_csv(文件路径, sep="|", header=None, names=["自定义列名1", "自定义列名2", "自定义列名3"])
内容的提问来源于stack exchange,提问作者Bruno Lorena
相关产品推荐
相关产品推荐

