写了个示例代码给你
import os
path = "CBIS-DDSM" # 根目录
mass_test_list = []
mass_train_list = []
calc_test_list = []
calc_train_list = []
for root, dirs, files in os.walk(path):
for dir in dirs:
if dir.startswith("Mass-Test_"):
sub_path = os.path.join(root, dir)
for sub_root, sub_dirs, sub_files in os.walk(sub_path):
for sub_file in sub_files:
if sub_file.endswith(".dcm"):
mass_test_list.append(os.path.join(sub_root, sub_file))
elif dir.startswith("Mass-Training_"):
sub_path = os.path.join(root, dir)
for sub_root, sub_dirs, sub_files in os.walk(sub_path):
for sub_file in sub_files:
if sub_file.endswith(".dcm"):
mass_train_list.append(os.path.join(sub_root, sub_file))
elif dir.startswith("Calc-Test_"):
sub_path = os.path.join(root, dir)
for sub_root, sub_dirs, sub_files in os.walk(sub_path):
for sub_file in sub_files:
if sub_file.endswith(".dcm"):
calc_test_list.append(os.path.join(sub_root, sub_file))
elif dir.startswith("Calc-Training_"):
sub_path = os.path.join(root, dir)
for sub_root, sub_dirs, sub_files in os.walk(sub_path):
for sub_file in sub_files:
if sub_file.endswith(".dcm"):
calc_train_list.append(os.path.join(sub_root, sub_file))
定义四个list数组用于分别存储这四个文件夹的文件路径信息,然后,在遍历循环整个文件目录的文件时,判断当前文件夹的名称,从而知道接下下来应该用哪个数组去存储,比如当前目录是Mass-Test那么设置一个变量为1,那么循环该文件目录下的子文件时,根据这个变量的值,为1也用mass-test对应的list存储,为2则用什么什么数组存储。
可以参考一下下面的代码:
import os
import os.path
base_dir = "CBIS-DDSM"
dirs = ["Mass-Test_", "Mass-Training_", "Calc-Test_", "Calc-Training_"]
paths = []
for directory in dirs:
dir_path = os.path.join(base_dir, directory)
abs_path = os.path.abspath(dir_path)
paths.append(abs_path)
print(paths)
您可以使用 Python 的 os 模块和 re 模块来实现该功能。
使用 os.listdir() 方法获取文件夹中的所有文件的文件名。
使用 re.search() 方法查找文件名是否符合要求,并将符合要求的文件路径加入对应的 list 中。
使用 os.path.join() 方法将文件名和文件夹路径合并为绝对路径。
以下是实现代码示例:
python
import os
import re
folder_path = 'your folder path'
mass_test_list = []
mass_training_list = []
calc_test_list = []
calc_training_list = []
for file_name in os.listdir(folder_path):
file_path = os.path.join(folder_path, file_name)
if re.search(r'Mass-Test_.*\.dcm', file_name):
mass_test_list.append(file_path)
elif re.search(r'Mass-Training_.*\.dcm', file_name):
mass_training_list.append(file_path)
elif re.search(r'Calc-Test.*\.dcm', file_name):
calc_test_list.append(file_path)
elif re.search(r'Calc-Training.*\.dcm', file_name):
calc_training_list.append(file_path)
希望这能帮到您!
1.应该在知道目录CBIS-DDSM的绝对路径下去遍历它下面的文件
2.当文件的后缀是.dcm时将文件绝对路径存入列表
3.用一个字典加文件遍历可以解决
实现代码及输出结果示例如下:
import os
root_path = r'C:\Users\xxx\Desktop\development\test\CBIS-DDSM'
# 装着Mass-Test_类的dcm 绝对路径, Mass-Training_的绝对路径, Calc-Test的绝对路径,Calc-Training_的绝对路径。
mass_test_list = []
mass_training_list = []
calc_test_list = []
calc_training_list = []
for root, dirs, files in os.walk(root_path):
for file in files:
if file.endswith('.dcm'):
path = os.path.join(root, file)
if 'Mass-Test_' in root:
mass_test_list.append(path)
elif 'Mass-Training_' in root:
mass_training_list.append(path)
elif 'Calc-Test_' in root:
calc_test_list.append(path)
elif 'Calc-Training_' in root:
calc_training_list.append(path)
print(mass_test_list)
print(mass_training_list)
print(calc_test_list)
print(calc_training_list)
输出结果:
['C:\\Users\\xxx\\Desktop\\development\\test\\CBIS-DDSM\\Mass-Test_xxx\\xx1\\xx2\\1-1.dcm']
['C:\\Users\\xxx\\Desktop\\development\\test\\CBIS-DDSM\\Mass-Training_xxx\\xx1\\xx2\\1-1.dcm']
['C:\\Users\\xxx\\Desktop\\development\\test\\CBIS-DDSM\\Calc-Test_xxx\\xx1\\xx2\\1-1.dcm']
['C:\\Users\\xxx\\Desktop\\development\\test\\CBIS-DDSM\\Calc-Training_xxx\\xx1\\xx2\\1-1.dcm']
Process finished with exit code 0
解答不易,还去体验了一把kaggle,希望能帮到你 - 来自一名字节资深后端工程师。
写法:
如果是在windows上运行的程序:
mass_test = sorted(glob("D:\Kevin_code_task_pytorch\xxxxxxx\CBIS-DDSM\Mass-Test_*\*\*\*.dcm"))
mass_traning = sorted(glob("D:\Kevin_code_task_pytorch\xxxxxxx\CBIS-DDSM\Mass-Training_*\*\*\*.dcm"))
calc_test = sorted(glob("D:\Kevin_code_task_pytorch\xxxxxxx\CBIS-DDSM\Calc-Test_*\*\*\*.dcm"))
calc_traning = sorted(glob("D:\Kevin_code_task_pytorch\xxxxxxx\CBIS-DDSM\Calc-Training_*\*\*\*.dcm"))
如果是在线kaggle运行的程序(那你的文件应该上传到了/kaggle/input目录):
mass_test = sorted(glob("/kaggle/input/CBIS-DDSM/Mass-Test_*/*/*/*.dcm"))
mass_traning = sorted(glob("/kaggle/input/CBIS-DDSM/Mass-Training_*/*/*/*.dcm"))
calc_test = sorted(glob("/kaggle/input/CBIS-DDSM/Calc-Test_*/*/*/*.dcm"))
calc_traning = sorted(glob("/kaggle/input/CBIS-DDSM/Calc-Training_*/*/*/*.dcm"))
几个注意点:
- 在windows系统上,路径是反斜杠 \ ,在linux系统上,路径是 / 。这里你根据这个系统实际情况来调整。
- D:\Kevin_code_task_pytorch\xxxxxxx\CBIS-DDSM 和 /kaggle/input/CBIS-DDSM 是大致的写法,你要自己补充成正确的目录。
- sorted是对list排序,比较简单,不展开。
- glob可以获取给定路径下的所有文件列表,并把路径放在一个list中。
- glob的参数支持*通配符,表示模糊匹配。也就是你路径上有变化的部分,简单粗暴放一个*就行了。
匹配示例(windows):
CBIS-DDSM\Mass-Test_*\ 可以匹配以 CBIS-DDSM\Mass-Test_ 开头的目录,如:
- CBIS-DDSM\Mass-Test_123\
- CBIS-DDSM\Mass-Test_124\
CBIS-DDSM\Mass-Test_*\*\ 可以匹配 以 CBIS-DDSM\Mass-Test_ 开头的目录下的任1层目录,如:
- CBIS-DDSM\Mass-Test_123\d1\
- CBIS-DDSM\Mass-Test_123\d2\
- CBIS-DDSM\Mass-Test_124\d3\
- CBIS-DDSM\Mass-Test_124\d4\
CBIS-DDSM\Mass-Test_*\*\*\ 可以匹配 以 CBIS-DDSM\Mass-Test_ 开头的目录下的任2层目录,如:
- CBIS-DDSM\Mass-Test_123\d1\e1\
- CBIS-DDSM\Mass-Test_123\d2\x1\
- CBIS-DDSM\Mass-Test_124\d3\y1\
- CBIS-DDSM\Mass-Test_124\d4\b1\
CBIS-DDSM\Mass-Test_*\*\*\*.dcm 可以匹配 以 CBIS-DDSM\Mass-Test_ 开头的目录下的任2层目录下,以.dcm结尾的文件,如:
- CBIS-DDSM\Mass-Test_123\d1\e1\k1.dcm
- CBIS-DDSM\Mass-Test_123\d2\x1\k2.dcm
- CBIS-DDSM\Mass-Test_124\d3\y1\k3.dcm
- CBIS-DDSM\Mass-Test_124\d4\b1\k4.dcm
匹配示例(linux):
CBIS-DDSM/Mass-Test_* 可以匹配以 Mass-Test_ 开头的目录,如:
- CBIS-DDSM/Mass-Test_123/
- CBIS-DDSM/Mass-Test_124/
CBIS-DDSM*/ 可以匹配 以 CBIS-DDSM/Mass-Test_ 开头的目录下的任1层目录,如:
- CBIS-DDSM/Mass-Test_123/d1/
- CBIS-DDSM/Mass-Test_123/d2/
- CBIS-DDSM/Mass-Test_124/d3/
- CBIS-DDSM/Mass-Test_124/d4/
CBIS-DDSM*/*/ 可以匹配 以 CBIS-DDSM/Mass-Test_ 开头的目录下的任2层目录,如:
- CBIS-DDSM/Mass-Test_123/d1/e1/
- CBIS-DDSM/Mass-Test_123/d2/x1/
- CBIS-DDSM/Mass-Test_124/d3/y1/
- CBIS-DDSM/Mass-Test_124/d4/b1/
CBIS-DDSM*/*/*.dcm 可以匹配 以 CBIS-DDSM/Mass-Test_ 开头的目录下的任2层目录下,以.dcm结尾的文件,如:
- CBIS-DDSM/Mass-Test_123/d1/e1/k1.dcm
- CBIS-DDSM/Mass-Test_123/d2/x1/k2.dcm
- CBIS-DDSM/Mass-Test_124/d3/y1/k3.dcm
- CBIS-DDSM/Mass-Test_124/d4/b1/k4.dcm
提供参考实例【Python获取当前目录下所有文件的绝对路径并放在list中】,链接:https://blog.csdn.net/judgechen1997/article/details/100853820
不知道你这个问题是否已经解决, 如果还没有解决的话: