目次
pydicom.filereader.read_partial
1.概要
指定した条件が満たされるまで、DICOMファイルの読み込みを行います。
読み込みを停止する条件がない場合は、read_partialではなくdcmreadを使用します。
2.引数
read_partial(fileobj, stop_when=None, defer_size=None, force=False, specific_tags=None)
fileobj:a file-like object
ファイルオブジェクトを指定します。
使用後はファイルオブジェクトを自身で閉じる必要があります。
stop_when:None(default:None)
デフォルト(None)の場合、ファイル全体が読み込まれます。
コールバック関数を指定すると、タグ、VR、lengthを条件にどこまで読み込むかを指定することができます。
コールバック関数で、Trueを返すと読み込みが停止します。(Trueとなった条件の前まで読み込まれます)
Falseを返すと読み込み続けます。
defer_size:int or str or None(default:None)
None の場合、すべての要素がメモリに読み込まれます。
defer_sizeを指定すると、DICOMファイルが指定したサイズより大きい場合、指定サイズを超える部分はコード内でアクセスされるまでメモリに読み込まれません。
サイズは、整数(バイト)もしくは、単位を含む文字列値を指定します。 “1024 KB”、 “5 MB”。
force:bool(default:False)
False の場合、メタ情報ヘッダーがファイルにない場合は、InvalidDicomErrorが発生します。
Trueの場合、ファイルメタ情報ヘッダが見つからなくても読み込みます。
specific_tags:list or None(default:None)
None は、すべてのタグを読み込みます。
listでタグもしくは、タグ名を指定すると指定したタグのみ読み込まれます。
3.戻り値
読み込んだDICOMファイルを表すFileDatasetインスタンスまたはDicomDirインスタンスを返します。
4.使用例
患者名タグの前まで読み込み(タグ名を指定)
1 2 3 4 5 6 7 8 9 10 11 |
import pydicom def stop_conditions(tag,vr,length): if pydicom.datadict.keyword_for_tag(tag) == 'PatientName': return True return False with open('DICOMファイルのフルパス','r+b') as f: ds = pydicom.filereader.read_partial(f, stop_when=stop_conditions, force=True) print(ds) |
患者名タグの前まで読み込み(タグコードを指定)
1 2 3 4 5 6 7 8 9 10 11 12 |
import pydicom def stop_conditions(tag,vr,length): # patientName if tag == pydicom.tag.BaseTag(0x00100010): return True return False with open('DICOMファイルのフルパス','r+b') as f: ds = pydicom.filereader.read_partial(f, stop_when=stop_conditions, force=True) print(ds) |
指定したVRの前まで読み込み
1 2 3 4 5 6 7 8 9 10 11 |
import pydicom def stop_conditions(tag,vr,length): if vr == 'DA': return True return False with open('DICOMファイルのフルパス','r+b') as f: ds = pydicom.filereader.read_partial(f, stop_when=stop_conditions, force=True) print(ds) |
指定した長さの前まで読み込み
1 2 3 4 5 6 7 8 9 10 11 |
import pydicom def stop_conditions(tag,vr,length): if length > 32: return True return False with open('DICOMファイルへのフルパス','r+b') as f: ds = pydicom.filereader.read_partial(f, stop_when=stop_conditions, force=True) print(ds) |