def _pretty_str(self, indent=0, top_level_only=False): """Return a string of the data_elements in this dataset, with indented levels. This private method is called by the __str__() method for handling print statements or str(dataset), and the __repr__() method. It is also used by top(), which is the reason for the top_level_only flag. This function recurses, with increasing indentation levels. """ strings = [] indent_str = self.indent_chars * indent nextindent_str = self.indent_chars * (indent + 1) for data_element in self: with tag_in_exception(data_element.tag): if data_element.VR == "SQ": # a sequence strings.append( indent_str + str(data_element.tag) + " %s %i item(s) ---- " % (data_element.description(), len(data_element.value)) ) if not top_level_only: for dataset in data_element.value: strings.append(dataset._pretty_str(indent + 1)) strings.append(nextindent_str + "---------") else: strings.append(indent_str + repr(data_element)) return "\n".join(strings)
def walk(self, callback, recursive=True): """Walk over given function for all dataset data_elements. Visit all data_elements, possibly recursing into sequences and their datasets, The callback function is called for each data_element (including SQ element). Can be used to perform an operation on certain types of data_elements. E.g., `remove_private_tags`() finds all private tags and deletes them. `DataElement`s will come back in DICOM order (by increasing tag number within their dataset) Parameters ---------- callback: a callable that takes two arguments: a dataset, and a data_element belonging to that dataset. recursive : boolean Flag to indicate whether to recurse into Sequences """ taglist = sorted(self.keys()) for tag in taglist: with tag_in_exception(tag): data_element = self[tag] callback(self, data_element) # self = this Dataset # 'tag in self' below needed in case callback deleted data_element if recursive and tag in self and data_element.VR == "SQ": sequence = data_element.value for dataset in sequence: dataset.walk(callback)
def _pretty_str(self, indent=0, top_level_only=False): """Return a string of the data_elements in this dataset, with indented levels. This private method is called by the __str__() method for handling print statements or str(dataset), and the __repr__() method. It is also used by top(), which is the reason for the top_level_only flag. This function recurses, with increasing indentation levels. """ strings = [] indent_str = self.indent_chars * indent nextindent_str = self.indent_chars * (indent + 1) for data_element in self: with tag_in_exception(data_element.tag): if data_element.VR == "SQ": # a sequence strings.append( indent_str + str(data_element.tag) + " %s %i item(s) ---- " % (data_element.description(), len(data_element.value))) if not top_level_only: for dataset in data_element.value: strings.append(dataset._pretty_str(indent + 1)) strings.append(nextindent_str + "---------") else: strings.append(indent_str + repr(data_element)) return "\n".join(strings)
def write_dataset(fp, dataset, parent_encoding=default_encoding): """Write a Dataset dictionary to the file. Return the total length written.""" dataset_encoding = dataset.get('SpecificCharacterSet', parent_encoding) fpStart = fp.tell() # data_elements must be written in tag order tags = sorted(dataset.keys()) for tag in tags: with tag_in_exception(tag): # write_data_element(fp, dataset.get_item(tag), dataset_encoding) XXX for writing raw tags without converting to DataElement write_data_element(fp, dataset[tag], dataset_encoding) return fp.tell() - fpStart
def write_dataset(fp, dataset, parent_encoding=default_encoding): """Write a Dataset dictionary to the file. Return the total length written.""" # Attempt to correct ambiguous VR elements when explicit little/big encoding # Elements that can't be corrected will be returned unchanged. if not fp.is_implicit_VR: dataset = correct_ambiguous_vr(dataset, fp.is_little_endian) dataset_encoding = dataset.get('SpecificCharacterSet', parent_encoding) fpStart = fp.tell() # data_elements must be written in tag order tags = sorted(dataset.keys()) for tag in tags: with tag_in_exception(tag): # write_data_element(fp, dataset.get_item(tag), dataset_encoding) XXX for writing raw tags without converting to DataElement write_data_element(fp, dataset[tag], dataset_encoding) return fp.tell() - fpStart
def write_dataset(fp, dataset, parent_encoding=default_encoding): """Write a Dataset dictionary to the file. Return the total length written. Attempt to correct ambiguous VR elements when explicit little/big encoding Elements that can't be corrected will be returned unchanged. """ if not fp.is_implicit_VR: dataset = correct_ambiguous_vr(dataset, fp.is_little_endian) dataset_encoding = dataset.get('SpecificCharacterSet', parent_encoding) fpStart = fp.tell() # data_elements must be written in tag order tags = sorted(dataset.keys()) for tag in tags: with tag_in_exception(tag): # write_data_element(fp, dataset.get_item(tag), dataset_encoding) # XXX for writing raw tags without converting to DataElement write_data_element(fp, dataset[tag], dataset_encoding) return fp.tell() - fpStart
def _pretty_str(self, indent=0, top_level_only=False): """Return a string of the DataElements in the Dataset, with indented levels. This private method is called by the __str__() method for handling print statements or str(dataset), and the __repr__() method. It is also used by top(), therefore the top_level_only flag. This function recurses, with increasing indentation levels. Parameters ---------- index : int The indent level offset (default 0) top_level_only : bool When True, only create a string for the top level elements, i.e. exclude elements within any Sequences (default False). Returns ------- str A string representation of the Dataset. """ strings = [] indent_str = self.indent_chars * indent nextindent_str = self.indent_chars * (indent + 1) for data_element in self: with tag_in_exception(data_element.tag): if data_element.VR == "SQ": # a sequence strings.append(indent_str + str(data_element.tag) + " %s %i item(s) ---- " % (data_element.description(), len(data_element.value))) if not top_level_only: for dataset in data_element.value: strings.append(dataset._pretty_str(indent + 1)) strings.append(nextindent_str + "---------") else: strings.append(indent_str + repr(data_element)) return "\n".join(strings)