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 file meta information...
    Setting dataset values...
    Writing test file /tmp/tmp3l_6xlyf.dcm
    File saved.
    Writing test file as Big Endian Explicit VR /tmp/tmphgg15cj5.dcm
    Load file /tmp/tmp3l_6xlyf.dcm ...
    Dataset.file_meta -------------------------------
    (0002, 0002) Media Storage SOP Class UID         UI: CT Image Storage
    (0002, 0003) Media Storage SOP Instance UID      UI: 1.2.3
    (0002, 0012) Implementation Class UID            UI: 1.2.3.4
    -------------------------------------------------
    (0008, 0023) Content Date                        DA: '20251219'
    (0008, 0033) Content Time                        TM: '232439.839578'
    (0010, 0010) Patient's Name                      PN: 'Test^Firstname'
    (0010, 0020) Patient ID                          LO: '123456'
    Remove file /tmp/tmp3l_6xlyf.dcm ...
    Load file /tmp/tmphgg15cj5.dcm ...
    Dataset.file_meta -------------------------------
    (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 Big Endian
    (0002, 0012) Implementation Class UID            UI: 1.2.3.4
    -------------------------------------------------
    (0008, 0023) Content Date                        DA: '20251219'
    (0008, 0033) Content Time                        TM: '232439.839578'
    (0010, 0010) Patient's Name                      PN: 'Test^Firstname'
    (0010, 0020) Patient ID                          LO: '123456'
    Remove file /tmp/tmphgg15cj5.dcm ...

    # authors : Guillaume Lemaitre <g.lemaitre58@gmail.com>
    # license : MIT

    import datetime
    import os
    import tempfile

    import pydicom
    from pydicom.dataset import FileDataset, FileMetaDataset
    from pydicom.uid import UID

    # Create some temporary filenames
    suffix = '.dcm'
    filename_little_endian = tempfile.NamedTemporaryFile(suffix=suffix).name
    filename_big_endian = tempfile.NamedTemporaryFile(suffix=suffix).name

    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")

    print("Setting dataset values...")
    # Create the FileDataset instance (initially no data elements, but file_meta
    # supplied)
    ds = FileDataset(filename_little_endian, {},
                     file_meta=file_meta, preamble=b"\0" * 128)

    # Add the data elements -- not trying to set all required here. Check DICOM
    # standard
    ds.PatientName = "Test^Firstname"
    ds.PatientID = "123456"

    # Set the transfer syntax
    ds.is_little_endian = True
    ds.is_implicit_VR = True

    # Set creation date/time
    dt = datetime.datetime.now()
    ds.ContentDate = dt.strftime('%Y%m%d')
    timeStr = dt.strftime('%H%M%S.%f')  # long format with micro seconds
    ds.ContentTime = timeStr

    print("Writing test file", filename_little_endian)
    ds.save_as(filename_little_endian)
    print("File saved.")

    # Write as a different transfer syntax XXX shouldn't need this but pydicom
    # 0.9.5 bug not recognizing transfer syntax
    ds.file_meta.TransferSyntaxUID = pydicom.uid.ExplicitVRBigEndian
    ds.is_little_endian = False
    ds.is_implicit_VR = False

    print("Writing test file as Big Endian Explicit VR", filename_big_endian)
    ds.save_as(filename_big_endian)

    # reopen the data just for checking
    for filename in (filename_little_endian, filename_big_endian):
        print('Load file {} ...'.format(filename))
        ds = pydicom.dcmread(filename)
        print(ds)

        # remove the created file
        print('Remove file {} ...'.format(filename))
        os.remove(filename)

Total running time of the script: (0 minutes 0.004 seconds)

Gallery generated by Sphinx-Gallery