如何用 Python 遍历服务器目录并将调查数据汇总为 Markdown 或 txt?
数据小陈
可以用 Python 完成。遍历目录、输出 Markdown 或 txt 文件都可以使用标准库;读取和汇总调查数据时,再根据文件格式选择库。先确定需要的是选项计数、均值等统计结果,还是开放式回答的文字摘要,二者的处理方式不同。
应该选择哪些库?
| 处理环节 | 可选工具 | 适用情况 |
|---|---|---|
| 遍历目录 | pathlib | 查找文件、筛选扩展名、递归处理子目录 |
| 读取 CSV | csv | 按行读取、选项计数等简单任务 |
| 表格分析 | pandas | 分组统计、缺失值处理、合并多份表格 |
| 读取 Excel | pandas 配合 openpyxl | 读取 .xlsx 调查结果 |
| 读取 Word | python-docx | 提取 .docx 中的段落和表格 |
| 读取 PDF | pypdf | 提取 PDF 中已有的文字;扫描件通常还需要 OCR |
| 输出结果 | Path.write_text() | 写入 Markdown 或 txt,无须专门的 Markdown 库 |
原问题没有说明文件格式和调查字段,暂时无法确定具体的读取方案。如果数据已经是 CSV,建议先用 pathlib、csv 和 collections.Counter 完成一个小脚本。
CSV 调查数据的实现示例
下面的示例假设调查结果保存为 UTF-8 编码的 CSV,每份文件都有一个名为 satisfaction 的选项字段。程序递归读取目录,统计每个文件的记录数、该字段的空值数和各选项出现次数,再写入 Markdown。
satisfaction 只是示例字段,需要替换为实际列名。
from pathlib import Path
from collections import Counter
import csv
import json
source_dir = Path('/path/to/surveys')
output_file = Path('/path/to/reports/summary.md')
column = 'satisfaction'
if not source_dir.is_dir():
raise NotADirectoryError(source_dir)
summaries = []
for path in sorted(source_dir.rglob('*.csv')):
try:
with path.open(encoding='utf-8-sig', newline='') as file:
reader = csv.DictReader(file)
if column not in (reader.fieldnames or []):
print(f'跳过 {path}:缺少字段 {column}')
continue
counts = Counter()
total = 0
missing = 0
for row in reader:
total += 1
value = (row.get(column) or '').strip()
if value:
counts[value] += 1
else:
missing += 1
summaries.append({
'file': str(path.relative_to(source_dir)),
'records': total,
'missing': missing,
'counts': dict(counts.most_common()),
})
except (OSError, UnicodeError, csv.Error) as error:
print(f'读取失败 {path}:{error}')
output_file.parent.mkdir(parents=True, exist_ok=True)
report = json.dumps(summaries, ensure_ascii=False, indent=2)
output_file.write_text(
'# 调查数据汇总\n\n```json\n' + report + '\n```\n',
encoding='utf-8',
)
print(f'已写入 {output_file},成功汇总 {len(summaries)} 个文件')
脚本只依赖 Python 标准库。生成的 Markdown 用 JSON 代码块展示统计结果,方便检查数据。如果需要 txt,可以将输出路径改为 .txt,直接写入 report。
如果需要汇总开放式回答
上面的代码适合单选题等分类字段,不会生成自然语言摘要。对于“还有哪些建议”这类自由文本,逐个统计完整回答通常没有多少帮助。
可以先提取相关字段,去除空白回答,再按调查主题归类,统计常见意见并保留少量代表性回答。如果使用文本摘要算法或语言模型,还需要核对摘要是否遗漏了少数意见,或把个别回答误写成普遍结论。文件读取库本身不会完成这些判断。
使用时需要注意什么?
- 确认数据约定:示例按逗号分隔的 CSV 读取,使用 UTF-8 编码;如果实际文件的分隔符、编码或字段名不同,需要调整读取参数。
- 确认字段含义:同名字段在不同调查中可能有不同选项或量表,不能直接合并统计。多选题也需要先按实际存储规则拆分选项。
- 检查失败记录:示例会打印跳过或读取失败的文件,生成报告后应检查这些提示。输出成功不代表所有源文件都已处理。
- 控制敏感信息:报告只保留需要的统计和摘录;若使用外部摘要服务,先确认调查数据是否允许上传。
备注:内容仅供参考。
