循环中有两个函数,但只执行一个(DICOM文件匿名化+移动)

2024-09-28 23:29:29 发布

您现在位置:Python中文网/ 问答频道 /正文

所以我有一个关于我写的包含两个函数的脚本的问题。 其思想是将给定文件夹中的所有DICOM文件(CT文件的数据格式)匿名化,并将匿名文件移动到新文件夹中

问题是-匿名功能本身工作,该功能将所有文件从一个文件夹移动到另一个文件夹。不幸的是,我无法使两个函数在一个循环中工作

匿名DICOM文件的功能:

folder = r"C:.../test1"
target = r"C:.../test2"

def forceAnonymizeDICOMFile(inFile, outFile, dictionary = ''):
currentAnonymizationActions = initializeActions()

    del currentAnonymizationActions[(0x0010, 0x0020)]       
    del currentAnonymizationActions[(0x0010, 0x0040)]       
    if dictionary != '':
    currentAnonymizationActions.update(dictionary)

    dataset = pydicom.dcmread(inFile, force=True)
    
    dataset[(0x0010, 0x0010)].value = dataset[(0x0010,0x0020)].value 
 
    # Store modified image
    dataset.save_as(outFile)

移动功能:

def moving(folder, file, target):
    for file in files:
        shutil.move(os.path.join(folder, file), target)

用于连接两者的循环:

subfolders = os.listdir(folder)

for idx, subfolder in enumerate(subfolders, 1):
    print(f"{idx}/{len(subfolders)} ({subfolder})")
    for file in os.listdir(folder+"/"+subfolder):
        filepath = folder+"/"+subfolder+"/"+file
        forceAnonymizeDICOMFile(filepath, filepath)
        moving(folder, file, target)

我觉得我的循环中有一个错误,因为我得到了错误:

FileNotFoundError:[Errno 2]没有这样的文件或目录:'C:../test1'

我不认为这两个函数都有错误,因为它们都是独立工作的

非常感谢您的帮助,谢谢


Tags: 文件函数in功能文件夹targetfordictionary
1条回答
网友
1楼 · 发布于 2024-09-28 23:29:29

我真的可以解决它。 问题是我没有在目标文件夹中指定文件夹结构:

for file in os.listdir(folder+"/"+subfolder):
    filepath = folder+"/"+subfolder+"/"+file
    target_filepath = target+"/"+subfolder+"/"+file
    if os.path.isfile(target_filepath):
        continue
    print(f"Anonymizing file {filepath}")
    forceAnonymizeDICOMFile(filepath, target_filepath)

现在它工作正常。 谢谢@Timus的支持

相关问题 更多 >