Python批处理文件夹中的txt文件

本文介绍使用Python批量处理目录下的TXT文件方法,通过关键词提取特定数据,并将数据存储为列表,最终转换格式并写入新的TXT文件,适用于数据分析与处理。

 1 文件处理形式    

       近期由于处理大量数据,所以对于采用python进行处理文件的一些操作也打算整理一下;接下来主要说一下如何处理目录下的一系列txt文件。首先看一下我们将要处理目录下的15个类似的数据文件,其中提取的数据如图所示,以及在读写文件时所需要的关键词,可以让程序正确读写相应的数据

 

2.代码段-python

      接下来就是贴出相应的python代码,具体一些关键的注释我已经标注好了,具体数据结果就不展示了,如果大家想拿我的数据进行测试联系我就好,但是一般情况下在我标注的地方进行相应的修改就好,希望有啥不懂得大家可以一起交流。

import os
import numpy as np

def eachFile(filepath):
	j=0
	pathDir = os.listdir(filepath)   #获取当前路径下的文件名,返回list
	for s in pathDir:
		newDir=os.path.join(filepath,s)   #将文件名写入到当前文件路径后面
		if os.path.isfile(newDir): #如果是文件
		    if os.path.splitext(newDir)[1]==".txt":  #判断是否是txt
		        readFile(newDir)
		        j=j+1
		        print(j)
		        pass
		    else:
		    	break



def readFile(filepath):
	index=0                  #控制数据存入不同的list
	with open(filepath,"r") as f:
		line=f.readline()
# 		print(line)
		while line:
			if line[:9]==' cell  10':     #根据关键词抽取数据
				f.readline()
				index=index+1
				for i in range(126):       #抽取的数据格式
					energy,f4,error=f.readline().split()
					if(index==1):
						list_total.append(f4)
					elif(index==2):
						list_electron.append(f4)
					else:
						list_positron.append(f4)
			line=f.readline()

def main():
	global list_total,list_electron,list_positron      #定义全局变量,可以将所有数据都存入list中
	fp=r'F:\\MCwork\\MCCM\\scripts\\filesworks' #存放数据的目录
	os.chdir(fp)
	eachFile(fp)
	output =open("flux.txt",'w')    #将list存入相应的文件中,便于后期处理数据
	listdata_total=list(np.reshape(list_total,(15,126)).T)    #改变数组维度,存储
	for i in range(126):                      #数据读入相应文件的第一种方法,第一篇博客有介绍
		for j in range(15):
			output.write(listdata_total[i][j]+' ')
			output.write('\t')
		output.write('\n')
	output.close()

if __name__ == '__main__':
	list_electron=[]
	list_total=[]
	list_positron=[]
	main()

 

3.总结     

     在批处理过程中最关键的我认为是关键词以及要清楚自己数据的格式,对症下药就好;最后就是对于批处理的命令也是参考了网上大神的做法,具体可以参考:

https://blog.youkuaiyun.com/ouening/article/details/70337945

<think> 我们被要求合并不同文件夹中的txt文件。根据引用[3]中的代码,它遍历了一个文件夹及其子文件夹,读取所有txt文件并将内容保存到一个Excel文件中。但是,用户的需求是合并不同文件夹中的txt文件,而不是同一个文件夹下的子文件夹。另外,用户可能有多个不同的文件夹(每个文件夹代表一个类别),需要将这些文件夹中的txt文件合并,并可能希望保留文件夹名称(作为分类标签)。 引用[3]的代码实际上处理了二级目录:它首先在指定目录下获取所有子文件夹(每个子文件夹名称为i),然后进入每个子文件夹,读取该子文件夹下的所有文件。所以,它实际上处理了多个文件夹(每个子文件夹中的txt文件。 但是,用户的需求是合并不同文件夹中的txt文件,这些文件夹可能在同一级目录,也可能在多个不同的路径。我们可以根据引用[3]的思路,进行适当的修改。 假设我们有多个文件夹(folder1, folder2, ...)分布在同一个目录下(或者我们可以指定多个不同的路径?)。用户的需求可能是: 1. 合并多个指定文件夹内的所有txt文件内容到一个文件中(比如每个txt文件内容合并到一个大文件),或者 2. 将每个文件夹内的所有txt文件合并成一个文件(每个文件夹对应一个合并后的文件),或者 3. 将所有文件夹中的所有txt文件内容合并到一个文件中,同时记录每个文件来自哪个文件夹(即打标签)。 根据引用[3],它做了第3种:将每个文件夹下的每个txt文件内容读出来,然后保存到Excel的一行中,并且用一列(result)来记录文件夹名称(即类别标签)。 但是,用户没有明确具体要求。不过,用户说“合并不同文件夹txt文件”,并且引用的内容都是关于合并多个txt文件,所以我们考虑两种情况: 情况1:将多个文件夹中的所有txt文件内容合并成一个总的大txt文件(不区分来源)。 情况2:将每个文件夹内的txt文件合并成一个文件(即每个文件夹生成一个合并文件),同时保留文件夹名称信息(作为文件名或文件内标记)。 然而,引用[3]是生成Excel文件,每行记录一个txt文件的内容和所属文件夹。这可以看作是一种合并(将信息汇总到表格中)。 由于用户引用了[3],并且该代码已经实现了读取多个文件夹(二级目录)下的所有txt文件,并汇总到Excel,我们可以参考这个思路。 但是,用户可能不需要生成Excel,而是需要合并成txt?或者用户希望直接合并所有txt内容到一个txt文件? 由于用户需求不明确,我们可以提供两种方案: 方案A:将所有文件夹中的所有txt文件内容合并到一个txt文件中(顺序不限,也可以按文件夹顺序)。 方案B:将每个文件夹中的txt文件合并成一个txt文件(每个文件夹对应一个合并后的txt文件)。 另外,引用[3]的方案(汇总到Excel)也可以作为一种方案。 我们需要用户明确需求。但根据问题描述“合并不同文件夹txt文件”,以及引用[1]和[2]都是关于合并多个txt文件为一个文件,我们假设用户的需求是方案A:合并所有txt内容到一个文件。 然而,引用[3]的代码中记录了文件夹名称(类别),说明可能希望保留来源信息。因此,在合并时,我们可以在每个txt内容前加上文件名和文件夹路径,以便区分。 所以,我们可以设计两种合并方式: 方式1:简单合并,将所有txt文件内容顺序拼接,不做额外标记。 方式2:在合并时,在每个txt文件内容前加上文件路径(或文件夹名称)和文件名,然后再写入合并文件。 由于用户需求不明确,我们给出一个示例代码,它支持: 1. 指定多个文件夹(可以来自不同路径) 2. 合并这些文件夹下的所有txt文件到一个总文件,并在内容前添加文件路径(可选) 参考引用[3],我们可以这样写: 步骤: 1. 定义要合并的文件夹列表(可以是绝对路径) 2. 指定输出文件(比如all.txt) 3. 遍历每个文件夹遍历文件夹中每个txt文件 4. 读取每个txt文件的内容,写入到输出文件中(可以选择是否添加标记) 下面是一个示例代码: ```python import os # 定义要合并的文件夹列表(多个不同文件夹的路径) folders = [ r'C:\Users\user\folder1', r'C:\Users\user\folder2', r'D:\data\folder3' ] # 输出文件 output_file = 'merged.txt' # 是否在合并时添加文件路径信息 add_file_info = True with open(output_file, 'w', encoding='utf-8') as outfile: for folder in folders: # 遍历每个文件夹 for root, dirs, files in os.walk(folder): for filename in files: if filename.endswith('.txt'): filepath = os.path.join(root, filename) with open(filepath, 'r', encoding='utf-8') as infile: content = infile.read() if add_file_info: # 写入文件路径信息 outfile.write(f'====== File: {filepath} ======\n') outfile.write(content) outfile.write('\n\n') # 两个换行分隔不同文件的内容 print(f'合并完成,输出文件:{output_file}') ``` 这段代码将遍历每个文件夹(包括子文件夹)下的所有txt文件,然后逐个读取,并在合并文件中添加文件路径作为分隔标记(如果不需要标记,设置add_file_info=False即可)。 注意:如果文件夹很多或者文件很大,可能会占用较多内存,但这里是一次处理一个文件,所以内存占用较小。 另外,如果用户希望按照文件夹来分别合并(每个文件夹合并成一个文件),我们可以稍作修改: ```python import os # 定义要合并的文件夹列表(多个不同文件夹的路径) folders = [ r'C:\Users\user\folder1', r'C:\Users\user\folder2', r'D:\data\folder3' ] for folder in folders: # 获取文件夹名称,用于生成输出文件名 folder_name = os.path.basename(folder) output_file = f'{folder_name}_merged.txt' with open(output_file, 'w', encoding='utf-8') as outfile: # 遍历当前文件夹(包括子文件夹)下的所有txt文件 for root, dirs, files in os.walk(folder): for filename in files: if filename.endswith('.txt'): filepath = os.path.join(root, filename) with open(filepath, 'r', encoding='utf-8') as infile: content = infile.read() # 如果需要,可以在这里添加文件信息 # outfile.write(f'====== File: {filename} ======\n') outfile.write(content) outfile.write('\n') # 文件之间加一个换行 print(f'文件夹 {folder} 合并完成,输出文件:{output_file}') ``` 用户可以根据自己的需求选择上述代码。 由于引用[3]中使用的是二级目录结构(即一个主文件夹包含多个子文件夹),而我们这里允许文件夹在不同的路径。因此,我们的代码更灵活。 如果用户希望像引用[3]那样生成一个Excel文件(每个txt文件作为一行,并记录文件夹名称),我们可以修改引用[3]的代码使其支持多个指定文件夹(而不是同一个主文件夹下的子文件夹)。 但是,用户没有明确要求生成Excel,所以我们先提供上述两种txt合并方案。 此外,注意编码问题:我们统一使用utf-8编码,如果遇到不同编码的文件,需要额外处理(比如尝试其他编码)。但这里为了简单,假设都是utf-8。 如果用户需要处理非utf-8编码,可以修改代码,使用try-except或者chardet等库检测编码。但这样会增加复杂度,这里不展开。 最后,根据用户引用的内容,我们提供了多种合并方式,用户可以根据实际需求选择代码片段。 因此,回答如下: </think> 根据您的需求,我将为您提供Python实现批处理合并不同文件夹txt文件的完整解决方案。以下是两种常用方法,您可根据实际需求选择: ### 解决方案1:合并所有txt内容到单个文件(保留文件夹信息) ```python import os import glob # 配置参数 input_folders = ['folder1', 'folder2', 'folder3'] # 替换为您的文件夹路径列表 output_file = 'combined.txt' # 合并后的文件名 # 合并操作 with open(output_file, 'w', encoding='utf-8') as outfile: for folder in input_folders: # 遍历文件夹中所有txt文件 for txt_file in glob.glob(os.path.join(folder, '*.txt')): # 写入文件夹名称和文件名作为分隔标识 outfile.write(f"\n\n===== 来源: {os.path.basename(folder)}/{os.path.basename(txt_file)} =====\n") # 读取并写入文件内容 with open(txt_file, 'r', encoding='utf-8') as infile: outfile.write(infile.read()) print(f"合并完成!共处理 {len(input_folders)} 个文件夹,结果保存在 {output_file}") ``` ### 解决方案2:按文件夹分类合并(每个文件夹生成单独文件) ```python import os import glob # 配置参数 input_folders = ['folder1', 'folder2', 'folder3'] # 替换为您的文件夹路径列表 output_dir = 'merged_results' # 输出目录 # 创建输出目录 os.makedirs(output_dir, exist_ok=True) # 按文件夹合并 for folder in input_folders: folder_name = os.path.basename(folder) output_file = os.path.join(output_dir, f"{folder_name}_combined.txt") with open(output_file, 'w', encoding='utf-8') as outfile: # 遍历当前文件夹中所有txt文件 for txt_file in glob.glob(os.path.join(folder, '*.txt')): # 写入文件名作为分隔标识 outfile.write(f"\n\n===== 文件: {os.path.basename(txt_file)} =====\n") # 读取并写入文件内容 with open(txt_file, 'r', encoding='utf-8') as infile: outfile.write(infile.read()) print(f"文件夹 [{folder_name}] 合并完成 → {output_file}") print(f"\n所有文件夹处理完毕!结果保存在 {output_dir} 目录") ``` ### 关键说明: 1. **路径设置**: - `input_folders`:填写需要合并的文件夹绝对或相对路径列表 - `output_file/output_dir`:指定输出位置 2. **编码处理**: - 默认使用`utf-8`编码,若文件使用其他编码(如GBK),需修改`encoding`参数 3. **文件标识**: - 方案1:合并所有文件到单个文件,并添加`===== 来源: 文件夹名/文件名 =====`分隔标识 - 方案2:每个原始文件夹生成独立合并文件文件名格式`原文件夹名_combined.txt` 4. **异常处理**: - 建议添加`try-except`块处理文件读取错误: ```python try: with open(txt_file, 'r', encoding='utf-8') as infile: outfile.write(infile.read()) except Exception as e: print(f"读取文件失败: {txt_file} | 错误: {str(e)}") ``` ### 使用示例: 假设有三个文件夹: - `data/reports` - `data/notes` - `archive/old_data` 执行方案1: ```python input_folders = [ 'data/reports', 'data/notes', 'archive/old_data' ] output_file = 'all_data_combined.txt' ``` 执行后生成的文件将包含所有txt内容,并清晰标注每个片段的来源路径。
评论 13
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值