Python批量读取多docx文件提取SSN并关联对应文件名需求
解决SSN提取与对应文件名关联的问题
我看到你的问题了——现在你能成功从批量docx文件里提取SSN,但没法把每个SSN和它所属的文件名关联起来对吧?问题出在你一开始把所有文件的内容合并成了一个大字符串data,这样就完全丢失了每个SSN的来源信息。咱们来调整代码逻辑,让每个提取到的SSN都能对应上它的“娘家”文件:
核心改动思路
- 不再合并所有文件内容,而是逐个处理单个docx文件
- 处理每个文件时,提取其中的SSN,同时将当前文件名和SSN配对保存
- 最终构建包含
文件名和SSN两个字段的DataFrame,清晰展示关联关系
修改后的完整代码
import pandas as pd import docx2txt import glob # 定义SSN验证函数(这个函数逻辑没问题,保留) def isSSNNumber(text): if len(text) != 11: return False for i in range(0,3): if not text[i].isdecimal(): return False if text[3] != '-': return False for i in range(4,6): if not text[i].isdecimal(): return False if text[6] != '-': return False for i in range(7,11): if not text[i].isdecimal(): return False return True # 初始化结果列表,用来存储(文件名, SSN)的配对 result = [] # 遍历每个docx文件,逐个处理 for file_path in glob.glob('C:/Users/d118/Desktop/Word Files/*.docx'): # 获取文件名(提取路径最后一段,避免存完整路径) file_name = file_path.split('/')[-1] # 读取当前文件的内容 file_content = docx2txt.process(file_path) # 在当前文件内容里查找SSN for i in range(len(file_content)): chunk = file_content[i:i+11] if isSSNNumber(chunk): # 将文件名和SSN配对加入结果列表 result.append({'文件名': file_name, 'SSN': chunk}) # 构建DataFrame展示结果 df = pd.DataFrame(result) print(df)
关键细节说明
- 如果你的系统用Windows路径分隔符
\,可以把文件名提取代码改成file_name = file_path.split('\\')[-1] - 每个文件的处理是独立的,这样每找到一个SSN,都能准确关联到当前处理的文件名
- 结果列表存储字典结构,构建DataFrame时会自动生成对应列,可读性更强
这样修改后,你就能清晰看到每个SSN来自哪个docx文件啦!
内容的提问来源于stack exchange,提问作者DEEPAK GIRDHAR




