Skip to main content

Build Status

WOUDC Extended CSV library

Python package providing read/write support for files of the WOUDC Extended CSV format.

Installation

pip

Install latest stable version from PyPI.

pip3 install woudc-extcsv

From source

Install latest development version.

python3 -m venv woudc-extcsv
cd woudc-extcsv
. bin/activate
git clone https://github.com/woudc/woudc-extcsv.git
cd woudc-extcsv
pip3 install .

Usage

Reader Objects

from woudc_extcsv import Reader
# read from file
with open('file.csv') as ff:
    ecsv = Reader(ff.read())
# read from string
ecsv = Reader(my_ecsv_string)

Writer Objects

import woudc_extcsv
# create new writer object with common/metadata tables and fields available
ecsv = woudc_extcsv.Writer(template=True)

# Add file comments
ecsv.add_comment('This is a file level comment.')
ecsv.add_comment('This is another file level comment.')

# Add metadata
ecsv.add_data('CONTENT', 
              'WOUDC,Spectral,1.0,1')
ecsv.add_data('DATA_GENERATION',
              '2002-05-29,JMA,1.0')
ecsv.add_data('PLATFORM',
              'STN,7,Kagoshima,JPN,47827')
ecsv.add_data('INSTRUMENT',
              'Brewer,MKII,059')
ecsv.add_data('LOCATION',
              '31.63,130.6,283')

# Add new table
ecsv.add_table('TIMESTAMP')
# Add fields
ecsv.add_field('TIMESTAMP', 'UTCOffset,Date,Time')
# Add data
ecsv.add_data('TIMESTAMP', '+08:38:47,1991-01-01,06:38:47')

# Add new table, fields, and data at the same time
ecsv.add_data('GLOBAL_SUMMARY',
              '06:38:47,7.117E-04,8.980E-03,94.12,99.99,114.64,001000,999',
              field='Time,IntACGIH,IntCIE,ZenAngle,MuValue,AzimAngle,Flag,TempC')
ecsv.add_data('GLOBAL',
              '290.0,0.000E+00',
              field='Wavelength,S-Irradiance,Time')
ecsv.add_data('GLOBAL',
              '290.5,0.000E+00')
ecsv.add_data('GLOBAL',
              '291.0,0.000E+00')
ecsv.add_table_comment('GLOBAL', 'This is a table level comment', index=1)
# Add table for new groupings
ecsv.add_data('TIMESTAMP',
              '+08:38:46,1991-01-01,07:38:46',
              field='UTCOffset,Date,Time',
              index=2)

ecsv.add_data('GLOBAL_SUMMARY',
              '07:38:46,2.376E-02,3.984E-01,82.92,6.75,122.69,100000,999',
              field='Time,IntACGIH,IntCIE,ZenAngle,MuValue,AzimAngle,Flag,TempC',
              index=2, table_comment='This is a table level comment.')
ecsv.add_table_comment('GLOBAL_SUMMARY', 'This is another table level comment', index=2)
# Write to string
ecsvs = woudc_extcsv.dumps(ecsv)
                
# Write to file
# validate (check if all common tables and their fields are present), if so dump to file
# if not, print violations
woudc_extcsv.dump(ecsv, 'spectral-sample.csv')

Convenience Functions

import woudc_extcsv
# load from file into Reader object
ecsv = woudc_extcsv.load('file.csv')
# load from string into Reader object
ecsv = woudc_extcsv.loads(my_ecsv_string)
# dump to file from Writer object
ecsv = woudc_extcsv.dump(ecsv_writer, 'file.csv')
# dump to string from Writer object
ecsv = woudc_extcsv.dumps(ecsv_writer)

ExtendedCSV Objects

The ExtendedCSV class is a parser class used in the Reader and Writer classes, and can be used to both read and write to an Extended CSV object.

from woudc_extcsv import ExtendedCSV
# read from file
with open('file.csv') as ff:
    ecsv = ExtendedCSV(ff.read())
# read from string
ecsv = Extended(my_ecsv_string)

# Add a file-level comment
ecsv.add_comment('This is a file level comment')
# Add new table to object
ecsv.init_table('GLOBAL', ['Wavelength', 'S-Irradiance'], line_num)
# Add another field to the new table
ecsv.add_field_to_table('GLOBAL', ['Time'])
# Add data to table
ecsv.add_values_to_table('GLOBAL', ['290.5', '0.000E+00', ''], line_num)
# Add a table comment
ecsv.add_table_comment('GLOBAL', 'This is a table level comment')
# Remove a table
ecsv.remove_table('GLOBAL')
# Validate Extended CSV and collimate the tables
# Check metadata tables
ecsv.validate_metadata_tables()
# Check dataset-specific tables
ecsv.validate_dataset_tables()

Error Handling

from woudc_extcsv import ExtendedCSV, NonStandardDataError, MetadataValidationError

try:
    ecsv = ExtendedCSV('bad content!')
except (NonStandardDataError, MetadataValidationError) as err:
    print(err.message)
    for error in err.errors:
         print(error)

Development

python3 -m venv woudc-extcsv
cd woudc-extcsv
source bin/activate
git clone https://github.com/woudc/woudc-extcsv.git
cd woudc-extcsv
pip3 install .
pip3 install ".[dev]"

Running Tests

python3 tests/run_tests.py

Releasing

# create release (x.y.z is the release version)
vi pyproject.toml  # update [project]/version
git commit -am 'update release version x.y.z'
git push origin master
git tag -a x.y.z -m 'tagging release version x.y.z'
git push --tags

# upload to PyPI
rm -fr build dist *.egg-info
python3 -m build
twine upload dist/*

# publish release on GitHub (https://github.com/woudc/woudc-extcsv/releases/new)

# bump version back to dev
vi pyproject.toml  # update [project]/version
git commit -am 'back to dev'
git push origin master

Code Conventions

woudc-extcsv code conventions are as per PEP8.

# code should always pass the following
find -type f -name "*.py" | xargs flake8

Issues

All bugs, enhancements and issues are managed on GitHub.

History

The roots of woudc-extcsv originate within the WOUDC backend processing system in support of processing data submissions. woudc-extcsv was refactored into a standalone library providing read/write support of the data centre's core ingest format.

In 2015 woudc-extcsv was made publically available in support of the Treasury Board [Policy on Acceptable Network and Device Use] (http://www.tbs-sct.gc.ca/pol/doc-eng.aspx?id=27122).

Contact

Metadata

Release files for woudc-extcsv 0.8.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for woudc-extcsv 0.8.0
File Size Uploaded
woudc_extcsv-0.8.0.tar.gz 28.3 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for woudc-extcsv 0.8.0
File Interpreter ABI Platform
woudc_extcsv-0.8.0-py3-none-any.whl Python 3 none any Details

Total release size: 55.9 kB

Release files / woudc_extcsv-0.8.0.tar.gz

Download URL woudc_extcsv-0.8.0.tar.gz
Size 28.3 kB
Tags Source
SHA-256 checksum
How to use checksums
d5f7eff849244bbf84beb6f8be9345567eeac5072976c0b59c68fcfc2d351c01
BLAKE2b-256 checksum
How to use checksums
6c88f7db68a5a4983bf524f8e3bd9a3194697f678bcbf9c1be3ef13600a19001
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.12.10

Release files / woudc_extcsv-0.8.0-py3-none-any.whl

Download URL woudc_extcsv-0.8.0-py3-none-any.whl
Size 27.6 kB
Tags Python 3
SHA-256 checksum
How to use checksums
bd478c615e85392038a70d7becd18081d6af9e44989f01964ba5ac45185c4fa0
BLAKE2b-256 checksum
How to use checksums
4636acc005f2646881cdfe27680d1a235df2851b657702dd76ab8e7b7ec9b429
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.12.10

Release history Release notifications | RSS feed

This release

0.8.0 This release

2 release files

0.3.1

1 release file

0.2.2

1 release file

0.2.1

1 release file

0.2.0

1 release file

0.1.3

1 release file

0.1.2

1 release file

0.1.1

1 release file

0.1.0

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page