如何批量删除多个TXT文件指定行并重新更新行标签?
批量处理.dat文件:删除指定行并递补标签
我需要处理多个.dat格式的文本文件,文件格式示例如下:
idxs Flujos n_pix
a 0.14610920325775417 25
b 7.749977963857448 88
c 0.4770103911455863 31
d 0.04608552769154015 19
e 0.10887099144089642 23
f 411.3453337879555 535
g 0.19422567525896847 29
h 0.012012563331850717 9
i 0.0 23
j 0.08226740119487924 14
需求是:批量删除所有文件中Flujos列值为0.0的行,删除后后续行的标签要依次递补(比如原j行要改为i行)。我自己写了部分Python代码,但几周都没解决问题,求帮忙。我的代码如下:
labels = ['a','b','c',"d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","w","x","y","z"] # 标签列表 fl = open(f+"/Tabla_"+Names[i]+"_"+f+".dat", "w") fl.write("idxs " "Flujos " "n_pix \n") for M in range(len(idxs)): fl.write(" {} {} {}\n".format(labels[M], Flux_Lines[M], PX[M])) fl.close() txts=sorted(glob.glob(f+"/Tabla_*.dat")) for TXT in txts: df = pd.read_csv(TXT, sep=" ", header = None, skiprows = 1) f_c2 = float(df[df.columns[2]]) d_txt = f_c2 > 0 print(d_txt)
解决方案
可以用pandas结合文件读写实现需求,步骤清晰直接:
- 遍历所有目标.dat文件;
- 正确读取文件内容并过滤掉Flujos为0.0的行;
- 重新生成递补后的标签,覆盖原文件(或写入新文件)。
完整代码示例:
import glob import pandas as pd # 定义完整的标签序列 labels = ['a','b','c',"d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","w","x","y","z"] # 获取所有目标.dat文件路径,根据实际路径调整前缀 txts = sorted(glob.glob("Tabla_*.dat")) for file_path in txts: # 用正则匹配多空格分隔,避免原文件空格不一致导致读取错误 df = pd.read_csv(file_path, sep=r'\s+', header=0) # 过滤Flujos为0.0的行,重置索引保证后续标签顺序正确 filtered_df = df[df['Flujos'] != 0.0].reset_index(drop=True) # 为过滤后的行重新分配递补标签 filtered_df['idxs'] = labels[:len(filtered_df)] # 写入原文件(如需保留原文件,可改为写入带后缀的新文件,比如file_path.replace('.dat', '_processed.dat')) filtered_df.to_csv(file_path, sep=' ', index=False)
关键说明:
- 使用
sep=r'\s+'处理原文件中可能的多空格分隔问题,避免列读取错位; reset_index(drop=True)重置索引,确保标签递补时的顺序对应正确;- 直接覆盖原文件前建议备份数据,或者修改写入路径生成新文件更安全;
- 标签列表
labels需保证长度足够覆盖过滤后的最大行数。
内容的提问来源于stack exchange,提问作者Hache 99
相关产品推荐
相关产品推荐

