如何将目录下所有TXT文件内容合并到Python列表中?
将目录下所有TXT文件内容合并到Python列表的实现方案
优化后的完整代码
可以用更简洁的方式批量获取TXT文件并合并内容,代码如下:
from pathlib import Path def get_all_txt_files(dir_path): # 递归获取目录下所有后缀为.txt的文件 return list(Path(dir_path).rglob("*.txt")) def merge_txt_content(file_list): combined_content = [] for file_path in file_list: # 指定编码避免乱码问题 with open(file_path, encoding="utf-8") as f: # 按行读取并自动去除换行符 lines = f.read().splitlines() # 清理每行前后空格,同时过滤空行(可根据需求移除过滤条件) cleaned_lines = [line.strip() for line in lines if line.strip()] # 将当前文件内容追加到总列表 combined_content.extend(cleaned_lines) return combined_content # 执行示例 if __name__ == "__main__": target_dir = r"C:\num" txt_files = get_all_txt_files(target_dir) final_list = merge_txt_content(txt_files) print(f"合并完成,总共有 {len(final_list)} 条内容")
基于你现有代码的修改方案
如果想保留自己写的递归文件搜索函数,只需添加TXT文件过滤逻辑,再配合读取代码即可:
from pathlib import Path def searching_all_files(): dirpath = Path(r'C:\num') assert dirpath.is_dir() file_list = [] for x in dirpath.iterdir(): # 仅收集后缀为txt的文件 if x.is_file() and x.suffix.lower() == ".txt": file_list.append(x) elif x.is_dir(): file_list.extend(searching_all_files(x)) return file_list def merge_txt_content(file_list): combined_content = [] for file_path in file_list: with open(file_path, encoding="utf-8") as f: lines = f.read().splitlines() cleaned_lines = [line.strip() for line in lines if line.strip()] combined_content.extend(cleaned_lines) return combined_content # 使用示例 txt_files = searching_all_files() final_list = merge_txt_content(txt_files)
关键细节说明
rglob替代手动递归,代码更简洁且不易出错;with open语法确保文件自动关闭,避免资源泄漏;splitlines()比readlines()更干净,自动剔除每行末尾的换行符;- 用
extend而非append:前者将列表元素逐个加入总列表,后者会把整个文件的行列表作为单个元素加入; - 空行过滤为可选操作:如果不需要移除空行,把
cleaned_lines的生成式改为[line.strip() for line in lines]即可。
内容的提问来源于stack exchange,提问作者uncrayon
相关产品推荐
相关产品推荐

