如何用Python从指定中间文件名开始遍历文件夹中的文件
嘿,这个需求其实挺常见的,我来给你分两种常用场景讲讲怎么实现——不管你是用Python脚本处理,还是用Shell命令行操作,都有对应的解决方案:
用Python实现的方法
如果用Python处理文件遍历,步骤很清晰:先获取并排序文件列表,找到目标起始文件的位置,再从该位置开始遍历。
- 首先获取目标文件夹下的所有文件,用
sorted()做自然排序(你的文件名是YYYYMMDD格式,字符串排序和日期顺序完全一致,直接用默认排序就好) - 找到
20140101在排序后列表中的索引 - 从该索引开始遍历后续的所有文件
给你个完整的代码示例:
import os # 替换成你的目标文件夹路径 folder_path = "/path/to/your/target/folder" # 获取文件夹下所有文件并排序(过滤掉子文件夹) file_list = sorted( [f for f in os.listdir(folder_path) if os.path.isfile(os.path.join(folder_path, f))] ) start_file = "20140101" try: # 找到起始文件的索引 start_idx = file_list.index(start_file) except ValueError: print(f"Error: 文件 {start_file} 不在目标文件夹中") exit(1) # 从起始文件开始遍历处理 for filename in file_list[start_idx:]: # 这里写你的业务逻辑,比如打印文件路径、读取内容等 full_path = os.path.join(folder_path, filename) print(f"正在处理文件: {full_path}")
小提示:如果你的文件名带后缀(比如20140101.log),记得把start_file改成对应的完整文件名;如果需要递归遍历子文件夹,可以用os.walk()调整逻辑。
用Bash Shell实现的方法
如果习惯用命令行处理,用ls+sort+awk就能快速搞定:
基础版(输出文件列表)
# 替换成你的文件夹路径和起始文件名 TARGET_FOLDER="/path/to/your/folder" START_FILE="20140101" # 输出从START_FILE开始的所有文件(包括START_FILE) ls -1 "$TARGET_FOLDER" | sort | awk -v start="$START_FILE" 'found; $0 == start {found=1}'
进阶版(遍历处理文件)
如果要对每个文件执行操作(比如复制、读取内容),可以结合while read循环:
TARGET_FOLDER="/path/to/your/folder" START_FILE="20140101" ls -1 "$TARGET_FOLDER" | sort | awk -v start="$START_FILE" 'found; $0 == start {found=1}' | while read -r filename; do # 这里写你的处理逻辑,比如打印完整路径 full_path="${TARGET_FOLDER}/${filename}" echo "正在处理: $full_path" # 示例:复制文件到另一个文件夹 # cp "$full_path" "/path/to/destination" done
小提示:如果文件名包含空格或特殊字符,用find命令更安全(会输出完整路径):
TARGET_FOLDER="/path/to/your/folder" START_FILE="20140101" START_FULL_PATH="${TARGET_FOLDER}/${START_FILE}" find "$TARGET_FOLDER" -maxdepth 1 -type f | sort | awk -v start="$START_FULL_PATH" 'found; $0 == start {found=1}' | while read -r full_path; do echo "正在处理: $full_path" done
内容的提问来源于stack exchange,提问作者wflwo
相关产品推荐
相关产品推荐

