Source code for pacsifier.cli.move_dumps

# Copyright 2018-2024 Lausanne University Hospital and University of Lausanne,
# Switzerland & Contributors

# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at

#     http://www.apache.org/licenses/LICENSE-2.0

# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

"""Script to move all csv files retrieved by `pacsifier --info ...` into a new folder."""

import shutil
from glob import glob
import os
import sys
import argparse


[docs] def move(dicom_path: str, output_path: str) -> None: """Move all csv info files within a dicom directory into a new directory. Args: dicom_path: path to the folder containing dicoms. output_path: path where the csv files within the dicom path will be moved. """ # List all csv files within the folder containing the dicom images. ls = glob(os.path.join(dicom_path, "sub-*", "ses-*", "*.csv")) # Iterate over all csv files paths. for line in ls: path = os.path.normpath(line) path = path.split(os.sep) # Create patient folder if not created yet. dir_ = output_path subfolder = os.path.join(dir_, path[-3]) if not os.path.isdir(subfolder): os.mkdir(subfolder) # Create session folder if not created yet. subsubfolder = os.path.join(subfolder, path[-2]) if not os.path.isdir(subsubfolder): os.mkdir(subsubfolder) # Move the csv file into the session folder. shutil.move(line, os.path.join(subsubfolder, path[-1])) if os.path.isfile(os.path.join(dicom_path, "mapper.json")): shutil.move( os.path.join(dicom_path, "mapper.json"), os.path.join(output_path, "mapper.json"), )
[docs] def get_parser() -> argparse.ArgumentParser: """Get parser for command line arguments.""" parser = argparse.ArgumentParser( description="Move all csv files within a dicom folder into a new folder." ) parser.add_argument("--data_folder", "-d", help="Path to the dicom folder") parser.add_argument( "--info_folder", "-o", help="Path to the folder where all csv files will be moved", ) return parser
[docs] def main(): """Main function of the script that calls :func:`move`.""" # Create parser object and parse command line arguments parser = get_parser() args = parser.parse_args() # If there are missing arguments print help. if not args.data_folder or not args.info_folder: parser.print_help() sys.exit() dicom_path = os.path.normcase(os.path.abspath(os.path.expanduser(args.data_folder))) output_path = os.path.normcase(os.path.abspath(os.path.expanduser(args.info_folder))) # Move csv files within dicom_path within output_path move(dicom_path, output_path)
if __name__ == "__main__": main()