本文目录导读:

是的,实用脚本可以批量遍历,这是脚本语言(如 Python、Shell、PowerShell 等)最核心、最强大的功能之一。
“批量遍历”通常指遍历文件系统(文件、文件夹)、遍历数据集合(如数据库、API返回的结果、CSV行)或遍历特定模式(如文件名匹配、内容匹配)。
下面我会分类介绍最常见的几种批量遍历场景及其实用脚本示例。
遍历文件系统(最常见)
这是批量处理文件的基础,如重命名、转换格式、搜索内容等。
Python:遍历所有 .txt 文件并读取前两行
import os
import glob
# 方式一:使用 glob(更简洁,支持通配符)
for filepath in glob.glob('./**/*.txt', recursive=True):
print(f"处理文件: {filepath}")
try:
with open(filepath, 'r', encoding='utf-8') as f:
# 只读取前两行,适合大型文件
for _ in range(2):
line = f.readline()
if line:
print(f" 内容: {line.strip()}")
except Exception as e:
print(f" 读取失败: {e}")
# 方式二:使用 os.walk(更底层,可以精确控制目录层级)
for root, dirs, files in os.walk('./data'):
for file in files:
if file.endswith('.txt'):
full_path = os.path.join(root, file)
print(f"发现文件: {full_path}")
Shell (Bash):批量将 .jpg 转为 .png(使用 ImageMagick)
#!/bin/bash
# 遍历当前目录所有 jpg 文件
for img in *.jpg; do
# 去除 .jpg 后缀,添加 .png
filename="${img%.*}"
echo "转换: $img -> ${filename}.png"
convert "$img" "${filename}.png"
done
PowerShell:递归获取所有 .log 文件,删除大于100MB的旧文件
# 获取过去30天内、大于100MB的 .log 文件,然后删除
Get-ChildItem -Path "C:\Logs" -Recurse -Filter "*.log" | Where-Object {
$_.Length -gt 100MB -and $_.LastWriteTime -lt (Get-Date).AddDays(-30)
} | ForEach-Object {
Write-Host "删除: $($_.FullName) ($($_.Length/1MB) MB)" -ForegroundColor Yellow
Remove-Item $_.FullName -Force
}
遍历数据集(CSV、API、数据库)
Python:遍历CSV文件的所有行,进行处理并写回
import csv
with open('users.csv', 'r', encoding='utf-8') as infile:
reader = csv.DictReader(infile) # 按列名访问
rows = []
for row in reader:
# 对每一行进行处理,将名字首字母大写
row['Name'] = row['Name'].title()
# 过滤:只保留活跃用户
if row['Status'] == 'Active':
rows.append(row)
# 写回新的CSV
with open('users_clean.csv', 'w', encoding='utf-8', newline='') as outfile:
if rows:
writer = csv.DictWriter(outfile, fieldnames=rows[0].keys())
writer.writeheader()
writer.writerows(rows)
Python:遍历API分页结果(爬虫场景)
import requests
def fetch_all_pages(base_url, params=None):
if params is None:
params = {}
params['page'] = 1
all_data = []
while True:
print(f"获取第 {params['page']} 页...")
response = requests.get(base_url, params=params)
data = response.json()
# 假设返回的数据在 'results' 字段,并有 'next' 指示是否有下一页
all_data.extend(data.get('results', []))
if data.get('next'):
params['page'] += 1
else:
break
return all_data
# 使用示例
# users = fetch_all_pages('https://api.example.com/users')
实用技巧:提升遍历脚本的健壮性
批量操作有风险(如误删文件、重名覆盖),以下技巧非常重要:
| 技巧 | 说明 | 示例代码(Python) |
|---|---|---|
| 日志记录 | 记录每一步操作,方便复查 | logging.info(f"删除: {path}") |
| 测试模式 | 先 print 要执行的操作,不真正执行 |
if args.dry_run: print(f"将要删除 {path}") |
| 进度条 | 处理大量文件时提示进度 | from tqdm import tqdm for file in tqdm(files): |
| 异常处理 | 跳过权限不足、文件损坏等问题 | try: ... except PermissionError: pass |
| 限制并发 | 避免IO打满或API限流 | import concurrent.futures 限制线程数 |
实用脚本能否批量遍历?
绝对可以,而且这是编写实用脚本的核心能力。
- 对于文件系统:脚本可以递归遍历、按通配符匹配、按属性过滤。
- 对于数据:脚本可以遍历CSV行、JSON记录、API分页、数据库查询结果。
- 对于任何可迭代对象:字符串、列表、网络数据流等。
最佳实践是:先在小范围数据上测试(--dry-run 模式),确认无误后再全量执行,配合日志和进度条保证可控性。
如果你有具体的批量需求(批量重命名图片、批量下载网页、批量处理PDF),可以告诉我,我能给出更针对性的脚本示例。
版权声明:NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播