在R中按条件删除文件:保留同类连续文件的前两个
按规则筛选时序文件的实现方案
需求梳理
给定一批按时间顺序排列的时序文件名,需实现:
- 仅保留连续出现的同结尾(A/B/C)文件中的前2个
- 若连续同结尾文件达到3个及以上,删除第3个及之后的同类文件(如示例中的
L1_0101_0619_A、L1_0101_0649_A)
实现思路
- 确保输入的文件名列表已按时序排序,这是处理的前提
- 维护两个状态变量:当前跟踪的结尾字符、该字符连续出现的次数
- 遍历每个文件时:
- 提取文件名末尾的标识字符(A/B/C)
- 若与当前跟踪字符一致,连续计数+1;若不一致,重置跟踪字符和计数为当前文件的标识与1
- 仅保留连续计数≤2的文件
Python 示例代码
# 输入的时序文件名列表(需确保已按时间排序) file_list = [ "L1_0101_0601_A", "L1_0101_0603_A", "L1_0101_0605_B", "L1_0101_0608_B", "L1_0101_0610_C", "L1_0101_0612_C", "L1_0101_0615_A", "L1_0101_0617_A", "L1_0101_0619_A", "L1_0101_0622_B", "L1_0101_0624_B", "L1_0101_0626_C", "L1_0101_0629_C", "L1_0101_0631_A", "L1_0101_0633_A", "L1_0101_0635_B", "L1_0101_0638_B", "L1_0101_0640_C", "L1_0101_0642_C", "L1_0101_0645_A", "L1_0101_0647_A", "L1_0101_0649_A" ] # 初始化状态变量 current_suffix = None count = 0 keep_files = [] delete_files = [] for file in file_list: # 提取末尾的标识字符 suffix = file.split("_")[-1] if suffix == current_suffix: count += 1 else: current_suffix = suffix count = 1 # 判断是否保留 if count <= 2: keep_files.append(file) else: delete_files.append(file) # 输出结果 print("保留的文件:") for f in keep_files: print(f"- {f}") print("\n需要删除的文件:") for f in delete_files: print(f"- {f}")
执行结果
保留的文件
- L1_0101_0601_A
- L1_0101_0603_A
- L1_0101_0605_B
- L1_0101_0608_B
- L1_0101_0610_C
- L1_0101_0612_C
- L1_0101_0615_A
- L1_0101_0617_A
- L1_0101_0622_B
- L1_0101_0624_B
- L1_0101_0626_C
- L1_0101_0629_C
- L1_0101_0631_A
- L1_0101_0633_A
- L1_0101_0635_B
- L1_0101_0638_B
- L1_0101_0640_C
- L1_0101_0642_C
- L1_0101_0645_A
- L1_0101_0647_A
需要删除的文件
- L1_0101_0619_A
- L1_0101_0649_A
内容的提问来源于stack exchange,提问作者Heiwa
相关产品推荐
相关产品推荐

