在迭代过程中打开文件的动态路径 - Python

Dynamic Path for Opening Files in an iterative process - Python

正在寻找一些有用的提示。我正在尝试通读文件夹及其子文件夹中存在的多个 .txt 文件,然后使用正则表达式从中提取 phone 数字。我可以在 os.walk 上使用 for 循环来做到这一点。但是,当我尝试在嵌套循环中读取单个文件时,它会不断抛出一个又一个错误。基本上我到目前为止了解到的是它可能没有打开文件,因为它没有在同一目录中找到它并且路径需要是动态的。我试过使用 {folder\subfolder\f} 但没有用,也试过 os.path.join 但无济于事。非常感谢任何帮助。

'''

import re
import os
lst = []
for folder, subfolder, files in os.walk(top):
    for f in files:
        lst.append(re.findall(r'\d{3}-\d{3}-\d{4}', open(f, 'r+', encoding='utf-8', errors='ignore').read()))
return lst

'''

产生的错误:

---------------------------------------------------------------------------
FileNotFoundError                         Traceback (most recent call last)
<ipython-input-54-6932d4b1e2e1> in <module>
      4 for folder, subfolder, files in os.walk(top):
      5     for f in files:
----> 6         lst.append(re.findall(r'\d{3}-\d{3}-\d{4}', open(f, 'r+', encoding='utf-8', errors='ignore').read()))
      7 return lst

FileNotFoundError: [Errno 2] No such file or directory: 'Instructions.txt'

您不应在路径中加入 subfolder,因为这是您正在浏览的实际文件夹中的子文件夹列表。

您应该加入 folder 和来自 files 的文件名:

open(os.path.join(folder, f), 'r+', encoding='utf-8', errors='ignore').read()))