Skip to main content

CIF/STAR file support for Python

Project description


PyCIFRW provides support for reading and writing CIF (Crystallographic Information Format) files using Python. It was developed at the Australian National Beamline Facility (ANBF), run by the Australian Synchrotron Research Program (ASRP), as part of a larger project to provide CIF input/output capabilities for data collection. It is currently (Mar 2016) maintained and developed by James Hester with support from the Australian Nuclear Science and Technology Organisation (ANSTO).


The CIF 1.1 and 2.0 working specifications were used as a reference.

PyCifRW has been tested on the IUCr sample CIF trip files located at and fails or successfully reads as it is supposed to (note that ciftest5 contains characters now forbidden in CIFs).

Supported Platforms

PyCIFRW is written entirely in Python. While this makes parsing of large CIF files rather slow, it should run wherever Python runs. The latest version has been tested on Linux and Windows 7.

The source code of a C extension module is also included in the distribution. This module accelerates CIF file reading. From time to time system-dependent installation packages are generated containing precompiled versions of this module.




See the various files in the docs directory for details of the interface. Essentially, CIF files look like python dictionaries, with each entry in the dictionary corresponding to a data block. The blocks themselves are also dictionaries, with each data name being a single entry in the dictionary, so for example, cf[‘si_std’][‘_diffrn_meas_wavelength’] will return the value of _diffrn_meas_wavelength in the data block named si_std of the Cif file object cf.


To read in a CIF:

from CifFile import CifFile cf = CifFile.ReadCif(‘jun_01_2.cif’)

to access information in a CIF

wav = cf[‘si_std’][‘_diffrn_meas_wavelength’]

to set a value

cf[‘si_std’][‘_diffrn_meas_wavelength’] = 1.54

Extra programs

The “Programs” directory contains program “” which validates a data files against data dictionaries. Execute this file without arguments for a help message.

Project details

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Files for PyCifRW, version 4.2.1
Filename, size File type Python version Upload date Hashes
Filename, size PyCifRW-4.2.1-cp35-cp35m-manylinux1_x86_64.whl (154.1 kB) File type Wheel Python version 3.5 Upload date Hashes View hashes
Filename, size PyCifRW-4.2.1-py2.7-linux-x86_64.egg (309.1 kB) File type Egg Python version 2.7 Upload date Hashes View hashes
Filename, size PyCifRW-4.2.1-py3.5-linux-x86_64.egg (302.2 kB) File type Egg Python version 3.5 Upload date Hashes View hashes
Filename, size PyCifRW-4.2.1-py3.tar.gz (495.2 kB) File type Source Python version None Upload date Hashes View hashes
Filename, size PyCifRW-4.2.1.tar.gz (500.4 kB) File type Source Python version None Upload date Hashes View hashes

Supported by

Elastic Elastic Search Pingdom Pingdom Monitoring Google Google BigQuery Sentry Sentry Error logging AWS AWS Cloud computing DataDog DataDog Monitoring Fastly Fastly CDN SignalFx SignalFx Supporter DigiCert DigiCert EV certificate StatusPage StatusPage Status page