medvision/dicom/fileutil.py
from pathlib import Path
from typing import Union
import medvision as mv
def isdicom(path: Union[str, Path]):
""" Judge whether a given file is a valid dicom.
Args:
path(str or Path): given file path.
Returns:
(bool): True if given path is a valid dicom, otherwise False.
"""
if not mv.isfile(path):
return False
# read preamble and magic code
with open(path, 'rb') as f:
header = f.read(132)
if not header:
return False
# magic code of a dicom file should be 'DICM'
magic_code = header[128:132]
if magic_code != b'DICM':
return False
else:
return True
def isdicomdir(path: Union[str, Path]):
""" Judge whether a given directory is a valid dicom directory.
If given directory only contains dicoms (at least one dicom file),
it is a dicom directory. Otherwise, it is not a dicom directory.
Args:
path(str): given directory path.
Returns:
(bool): True if given directory path is a dicom directory,
otherwise False.
"""
if not mv.isdir(path):
return False
for file_name in mv.listdir(path):
file_path = mv.joinpath(path, file_name)
if not isdicom(file_path):
return False
else:
return True