遍历文件夹以打开特定类型的文件
Iterate through folders to open files of a specific type
对于我正在目录中查找的脚本,我想打开该目录中的所有 .ifc 文件,包括所有子文件夹。为此,我使用了 os 包。
我遇到的问题是为我需要打开的子文件夹创建正确的路径。在 os.path.join 中包含子目录不会给出预期的结果,因为主文件夹会被跳过。我该如何着手创建正确的路径?
我已经包含了目录的 MWE 和我当前正在实现的代码的 MWE。
我要打开的目录的 MWE:
- C:\这个folder\Thisfile.ifc
- C:\这个folder\Not这个file.docx
- C:\这个folder\Also这个folder\But不是这个file.xlsx
- C:\这个folder\Also这个foldder\And还有这个file.ifc
MWE:
import os
import tinker as tk
from tkinter import filedialog
#Select directory
root = tk.Tk()
root.withdraw()
directory = filedialog.askdirectory()
for root,subdir,files in os.walk(directory):
#Select only .ifc files
for filename in files:
if filename.endswith(".ifc"):
#Construct full filepath for open
ifc_filepath = os.path.join(root,filename)
#Open the .ifc file
ifc_file = open(ifc_filepath)
else:
continue
为什么不使用 glob?
from pathlib import Path
from os.path import join
base_dir = './test'
file_extension = 'xml'
for file_path in Path(base_dir).glob(f'**/*.{file_extension}'):
file_path = join(base_dir, file_path)
print(file_path) # do whatever you need with these files
对于我正在目录中查找的脚本,我想打开该目录中的所有 .ifc 文件,包括所有子文件夹。为此,我使用了 os 包。
我遇到的问题是为我需要打开的子文件夹创建正确的路径。在 os.path.join 中包含子目录不会给出预期的结果,因为主文件夹会被跳过。我该如何着手创建正确的路径?
我已经包含了目录的 MWE 和我当前正在实现的代码的 MWE。
我要打开的目录的 MWE:
- C:\这个folder\Thisfile.ifc
- C:\这个folder\Not这个file.docx
- C:\这个folder\Also这个folder\But不是这个file.xlsx
- C:\这个folder\Also这个foldder\And还有这个file.ifc
MWE:
import os
import tinker as tk
from tkinter import filedialog
#Select directory
root = tk.Tk()
root.withdraw()
directory = filedialog.askdirectory()
for root,subdir,files in os.walk(directory):
#Select only .ifc files
for filename in files:
if filename.endswith(".ifc"):
#Construct full filepath for open
ifc_filepath = os.path.join(root,filename)
#Open the .ifc file
ifc_file = open(ifc_filepath)
else:
continue
为什么不使用 glob?
from pathlib import Path
from os.path import join
base_dir = './test'
file_extension = 'xml'
for file_path in Path(base_dir).glob(f'**/*.{file_extension}'):
file_path = join(base_dir, file_path)
print(file_path) # do whatever you need with these files