Note
Go to the end to download the full example code.
Write DICOM dataΒΆ
This example shows how to write a DICOM file from scratch using pydicom. This example does not produce a DICOM standards compliant file as written, you will have to change UIDs to valid values and add all required DICOM data elements.
Setting dataset values...
Setting file meta information...
Writing dataset to: /tmp/tmpbcd4r2s3.dcm
Load dataset from: /tmp/tmpbcd4r2s3.dcm ...
Dataset.file_meta -------------------------------
(0002,0000) File Meta Information Group Length UL: 128
(0002,0001) File Meta Information Version OB: b'\x00\x01'
(0002,0002) Media Storage SOP Class UID UI: CT Image Storage
(0002,0003) Media Storage SOP Instance UID UI: 1.2.3
(0002,0010) Transfer Syntax UID UI: Explicit VR Little Endian
(0002,0012) Implementation Class UID UI: 1.2.3.4
(0002,0013) Implementation Version Name SH: 'PYDICOM 3.1.0'
-------------------------------------------------
(0008,0023) Content Date DA: '20241117'
(0008,0033) Content Time TM: '182652.874911'
(0010,0010) Patient's Name PN: 'Test^Firstname'
(0010,0020) Patient ID LO: '123456'
Deleting file: /tmp/tmpbcd4r2s3.dcm ...
# authors : Darcy Mason, Guillaume Lemaitre <g.lemaitre58@gmail.com>
# license : MIT
import datetime
from pathlib import Path
import tempfile
import pydicom
from pydicom.dataset import Dataset, FileMetaDataset
from pydicom.uid import UID, ExplicitVRLittleEndian
print("Setting dataset values...")
ds = Dataset()
ds.PatientName = "Test^Firstname"
ds.PatientID = "123456"
# Set creation date/time
dt = datetime.datetime.now()
ds.ContentDate = dt.strftime("%Y%m%d")
ds.ContentTime = dt.strftime("%H%M%S.%f") # long format with micro seconds
print("Setting file meta information...")
# Populate required values for file meta information
file_meta = FileMetaDataset()
file_meta.MediaStorageSOPClassUID = UID("1.2.840.10008.5.1.4.1.1.2")
file_meta.MediaStorageSOPInstanceUID = UID("1.2.3")
file_meta.ImplementationClassUID = UID("1.2.3.4")
file_meta.TransferSyntaxUID = ExplicitVRLittleEndian
# Add the file meta information
ds.file_meta = file_meta
path = Path(tempfile.NamedTemporaryFile(suffix=".dcm").name)
print(f"Writing dataset to: {path}")
ds.save_as(path, enforce_file_format=True)
# reopen the data just for checking
print(f"Load dataset from: {path} ...")
ds = pydicom.dcmread(path)
print(ds)
# remove the created file
print(f"Deleting file: {path} ...")
path.unlink()
Total running time of the script: (0 minutes 0.004 seconds)