本文目录导读:

是的,实用脚本可以非常高效地实现批量查找,脚本的优势就在于自动化处理重复性任务,批量查找正是其典型应用场景。
下面我为你介绍几种常见场景下的批量查找脚本思路和实用示例,涵盖文件内容、文件名、Excel表格、数据库等。
批量查找文件内容(最常见需求)
场景: 在一个文件夹(含子文件夹)的所有文本文件(如 .txt, .log, .py)中,查找包含关键词“error”或“密码”的所有行。
使用 Python 脚本 (推荐,跨平台):
import os
def search_in_files(folder_path, keywords, extensions=None):
"""
在文件夹中批量查找包含关键词的文件
:param folder_path: 要搜索的文件夹路径
:param keywords: 关键词列表,如 ["error", "password"]
:param extensions: 文件扩展名列表,如 [".txt", ".log"],None表示所有文件
"""
results = []
for root, dirs, files in os.walk(folder_path):
for file in files:
file_path = os.path.join(root, file)
# 检查扩展名
if extensions and not any(file.endswith(ext) for ext in extensions):
continue
try:
with open(file_path, 'r', encoding='utf-8', errors='ignore') as f:
for line_num, line in enumerate(f, 1):
for keyword in keywords:
if keyword.lower() in line.lower():
results.append({
'file': file_path,
'line': line_num,
'keyword': keyword,
'content': line.strip()
})
break # 避免重复记录同一行多个关键词
except Exception as e:
print(f"跳过文件 {file_path}: {e}")
return results
# 使用示例
folder = r"C:\Users\YourName\Documents\logs"
keywords = ["error", "exception"]
found = search_in_files(folder, keywords, [".txt", ".log"])
for item in found:
print(f"文件: {item['file']} | 行 {item['line']}: {item['content']}")
使用 Shell 命令 (Linux/Mac 下极快):
# 在 /var/log 目录及其子目录下,递归搜索所有 .log 文件中包含 "ERROR" 的行 grep -r "ERROR" /var/log/*.log # 忽略大小写,显示行号 grep -rni "error" /path/to/your/folder # 查找包含多个关键词之一的行 (相当于或) grep -rE "error|warn|fail" /path/to/folder
批量查找文件名
场景: 在一个复杂的文件夹结构中找到所有文件名包含“2024”或“report”的文件。
Python 脚本 (灵活,可定制):
import os
def find_files_by_name(folder_path, keywords):
found_files = []
for root, dirs, files in os.walk(folder_path):
for file in files:
for keyword in keywords:
if keyword in file: # 文件名包含关键词
found_files.append(os.path.join(root, file))
break # 同一个文件只记录一次
return found_files
files = find_files_by_name(r"C:\Users\YourName\Documents", ["2024", "report"])
for f in files:
print(f)
使用 Shell 命令 (Linux/Mac):
# 查找当前目录及子目录下所有以 .txt 结尾的文件 (find 本身是查找文件) find . -name "*.txt" # 查找文件名包含 "2024" 的文件 find . -name "*2024*" # 查找文件名以 "report" 开头或包含 "summary" 的文件 (使用 -name 或 -iname 忽略大小写) find . -iname "*report*" -o -iname "*summary*"
批量查找 Excel/CSV 文件中的数据
场景: 多个 Excel 表格(.xlsx)中,查找某列(如“姓名”)包含特定值的行。
使用 Python (推荐 pandas 库):
import pandas as pd
import os
def search_in_excel(folder_path, search_value, column_name=None):
found = []
for file in os.listdir(folder_path):
if file.endswith(('.xlsx', '.xls')):
file_path = os.path.join(folder_path, file)
try:
df = pd.read_excel(file_path)
if column_name:
# 在某列中查找包含该值的行 (忽略大小写)
mask = df[column_name].astype(str).str.contains(search_value, case=False, na=False)
else:
# 在所有列中查找
mask = df.apply(lambda row: row.astype(str).str.contains(search_value, case=False, na=False).any(), axis=1)
rows_found = df[mask]
if not rows_found.empty:
found.append({'file': file, 'rows': rows_found})
except Exception as e:
print(f"读取文件 {file} 失败: {e}")
return found
# 查找“张三”在“姓名”列或所有列中出现的位置
results = search_in_excel(r"C:\Users\YourName\Documents\excels", "张三", "姓名")
for r in results:
print(f"找到于文件: {r['file']}")
print(r['rows'])
批量查找数据库中的记录(如 MySQL, SQLite)
场景: 多个数据库(或同一个数据库的多张表)中查找包含某个关键词的记录。
Python 脚本:
import sqlite3
import os
def search_in_sqlite_db(db_path, search_term, tables=None):
conn = sqlite3.connect(db_path)
cursor = conn.cursor()
# 获取所有表名
if not tables:
cursor.execute("SELECT name FROM sqlite_master WHERE type='table';")
tables = [row[0] for row in cursor.fetchall()]
results = []
for table in tables:
# 获取该表的所有列
cursor.execute(f"PRAGMA table_info({table})")
columns = [row[1] for row in cursor.fetchall()]
# 构造 WHERE 子句:在每一列中搜索
conditions = [f"CAST({col} AS TEXT) LIKE '%{search_term}%'" for col in columns]
where_clause = " OR ".join(conditions)
sql = f"SELECT * FROM {table} WHERE {where_clause}"
try:
cursor.execute(sql)
rows = cursor.fetchall()
if rows:
results.append({'table': table, 'columns': columns, 'rows': rows})
except Exception as e:
print(f"查询表 {table} 失败: {e}")
conn.close()
return results
# 在 example.db 的所有表中搜索 "admin"
db_path = r"C:\Users\YourName\data.db"
matches = search_in_sqlite_db(db_path, "admin")
for m in matches:
print(f"表: {m['table']}, 找到 {len(m['rows'])} 条记录")
高级实用脚本:综合批量查找工具(Python 封装)
你可以将上述功能封装成一个命令行工具,方便重复使用:
# batch_finder.py
import argparse, os, sys
def main():
parser = argparse.ArgumentParser(description="批量查找工具")
parser.add_argument("path", help="要搜索的文件夹或文件路径")
parser.add_argument("keyword", help="要查找的关键词")
parser.add_argument("--type", choices=['file', 'content', 'excel'], default='content',
help="查找类型: file(文件名), content(文件内容), excel(Excel内容)")
parser.add_argument("--ext", nargs='+', default=['.txt','.log'],
help="文件扩展名,如 .txt .csv (默认: .txt .log)")
parser.add_argument("--recursive", action='store_true', help="是否递归子目录")
args = parser.parse_args()
if args.type == 'content':
# 调用上文 search_in_files 函数
pass
elif args.type == 'file':
# 调用上文 find_files_by_name 函数
pass
elif args.type == 'excel':
# 调用上文 search_in_excel 函数
pass
if __name__ == "__main__":
main()
| 查找类型 | 推荐方案 | 优势 |
|---|---|---|
Python 脚本 / Shell grep |
速度快,支持正则,跨平台 | |
| 文件名 | os.walk 或 find |
简单高效,适合目录遍历 |
| Excel/CSV 数据 | Python + pandas | 灵活处理表格,支持列筛选 |
| 数据库 | Python + SQL | 精准搜索,支持复杂条件 |
| 综合工具 | 自建 CLI 脚本 | 一劳永逸,方便团队使用 |
学习建议: 如果只是偶尔用,可以试试 Shell 命令(Linux/Mac) 或 PowerShell(Windows);如果需要复杂逻辑、跨平台、定制化输出,Python 是最佳选择。
版权声明: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直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播