{ "info": { "author": "Fran\u00e7ois Allain", "author_email": "frallain@gmail.com", "bugtrack_url": null, "classifiers": [ "Development Status :: 5 - Production/Stable", "Intended Audience :: Science/Research", "License :: OSI Approved :: MIT License", "Operating System :: Microsoft :: Windows :: Windows 10", "Operating System :: Microsoft :: Windows :: Windows 7", "Operating System :: Microsoft :: Windows :: Windows 8", "Operating System :: Microsoft :: Windows :: Windows 8.1", "Operating System :: Microsoft :: Windows :: Windows XP", "Programming Language :: Python", "Programming Language :: Python :: 2.6", "Programming Language :: Python :: 2.7", "Programming Language :: Python :: 3", "Programming Language :: Python :: 3.4", "Programming Language :: Python :: 3.5", "Programming Language :: Python :: 3.6", "Topic :: Scientific/Engineering :: Bio-Informatics" ], "description": "# Thermo MSFileReader Python bindings\n\nThermo MSFileReader is a C++ dynamic-link library (.dll) made available by ThermoFisher Scientific (on https://thermo.flexnetoperations.com/control/thmo/product?plneID=632401) to interact with .raw files generated by their range of tandem mass spectrometers.\n\nHere I make available some Python bindings that make the Thermo MSFileReader C++ dynamic-link library usable in Python.\n\ntested on versions 3.0SP2 (August 2014) and 3.0SP3 (April 2015).\n150 / 171 functions have been binded, 21 / 171 have been considered redundant with already binded functions (cf. REDUNDANT flag).\n\nNOTE: The 3.1 SP4 installer does not register properly the `XRawfile2_x64.dll`. As a consequence, to make it work:\n\n1. Install MSFileReader 3.1 SP4,\n2. backup the 3.1 SP4 `XRawfile2_x64.dll` file at `C:\\Program Files\\Thermo\\MSFileReader\\` somewhere,\n3. uninstall MSFileReader 3.1 SP4, then install MSFileReader 3.1 SP2,\n4. override the 3.1 SP2 `XRawfile2_x64.dll` file at `C:\\Program Files\\Thermo\\MSFileReader\\` with the 3.1 SP4 `XRawfile2_x64.dll` backed up previously.\n\nNOTE: The function IsQExactive only works in version 3.0SP3 and upwards.\n\nNOTE: The official documentation seems more up-to-date in the 3.0SP2 version than in the 3.0SP3 version...\n\n## Requirements\n\n* Python 2.7 or 3.x, MSFileReader 3.1 is 64-bits only, MSFileReader 3.0 is 32 and 64-bits.\n* The comtypes library\n * `pip install comtypes`\n * or available at http://www.lfd.uci.edu/~gohlke/pythonlibs/ and then `pip install comtype-package.whl`\n* Thermo MSFileReader from https://thermo.flexnetoperations.com/control/thmo/product?plneID=632401 or from https://github.com/frallain/pymsfilereader/tree/master/MSFileReader.\n\nNote that these bindings require that you have installed the appropriate Thermo MSFileReader version depending on your Python architecture (32bits or 64bits) so that the .dll is registered with the right Windows COM server (32bits or 64bits).\n\n## Unit tests\n\nUnit tests are done with pytest. Just `pip install pytest` and run `pytest` at the root of the project.\n\n## Example\n\nFor convenience, the example below can be run on any rawfile by running `python MSFileReader.py myfile.raw`.\n\n```python\nfrom pymsfilereader import MSFileReader\n\nrawfile = MSFileReader(\"myfile.raw\")\n\nprint('Version', rawfile.Version())\nprint('GetFileName', rawfile.GetFileName())\nprint('GetCreatorID', rawfile.GetCreatorID())\nprint('GetVersionNumber', rawfile.GetVersionNumber())\nprint('GetCreationDate', rawfile.GetCreationDate())\nprint('IsError', rawfile.IsError())\nprint('IsNewFile', rawfile.IsNewFile())\nprint('IsThereMSData', rawfile.IsThereMSData())\nprint('HasExpMethod', rawfile.HasExpMethod())\nprint('InAcquisition', rawfile.InAcquisition())\nprint('GetErrorCode', rawfile.GetErrorCode())\nprint('GetErrorMessage', rawfile.GetErrorMessage())\nprint('GetWarningMessage', rawfile.GetWarningMessage())\nprint('RefreshViewOfFile', rawfile.RefreshViewOfFile())\nprint('GetNumberOfControllers', rawfile.GetNumberOfControllers())\n\nprint(\"GetNumberOfControllersOfType('No device')\", rawfile.GetNumberOfControllersOfType('No device'))\nprint(\"GetNumberOfControllersOfType('MS')\", rawfile.GetNumberOfControllersOfType('MS'))\nprint(\"GetNumberOfControllersOfType('Analog')\", rawfile.GetNumberOfControllersOfType('Analog'))\nprint(\"GetNumberOfControllersOfType('A/D card')\", rawfile.GetNumberOfControllersOfType('A/D card'))\nprint(\"GetNumberOfControllersOfType('PDA')\", rawfile.GetNumberOfControllersOfType('PDA'))\nprint(\"GetNumberOfControllersOfType('UV')\", rawfile.GetNumberOfControllersOfType('UV'))\nprint(\"GetControllerType('MS')\", rawfile.GetControllerType('MS'))\n# print( 'GetControllerType(1)', rawfile.GetControllerType(1) )\n\n# print( 'GetControllerType(2)', rawfile.GetControllerType(2) )\n# print( 'GetControllerType(3)', rawfile.GetControllerType(3) )\n# print( 'GetControllerType(4)', rawfile.GetControllerType(4) )\nprint('GetCurrentController()', rawfile.GetCurrentController())\n# print( 'SetCurrentController(4,1)', rawfile.SetCurrentController(4,1) )\n\nprint('GetCurrentController()', rawfile.GetCurrentController())\n# print( 'SetCurrentController(0,1)', rawfile.SetCurrentController(0,1) )\n\nprint('GetCurrentController()', rawfile.GetCurrentController())\nprint('GetExpectedRunTime()', rawfile.GetExpectedRunTime())\nprint('GetMaxIntegratedIntensity()', rawfile.GetMaxIntegratedIntensity())\nprint('GetMaxIntensity()', rawfile.GetMaxIntensity())\nprint('GetInletID()', rawfile.GetInletID())\nprint('GetErrorFlag()', rawfile.GetErrorFlag())\nprint('GetFlags()', rawfile.GetFlags())\nprint('GetAcquisitionFileName()', rawfile.GetAcquisitionFileName())\nprint('GetOperator()', rawfile.GetOperator())\nprint('GetComment1()', rawfile.GetComment1())\nprint('GetComment2()', rawfile.GetComment2())\nprint('GetFilters()', rawfile.GetFilters())\nprint('GetMassTolerance()', rawfile.GetMassTolerance())\n\nprint('rawfile.SetMassTolerance(userDefined=True, massTolerance=555.0, units=2)',\n rawfile.SetMassTolerance(userDefined=True, massTolerance=555.0, units=2))\nprint('GetMassTolerance()', rawfile.GetMassTolerance())\nprint('rawfile.SetMassTolerance(userDefined=False, massTolerance=500.0, units=0)',\n rawfile.SetMassTolerance(userDefined=False, massTolerance=500.0, units=0))\nprint('GetMassResolution', rawfile.GetMassResolution())\nprint('GetNumTrailerExtra', rawfile.GetNumTrailerExtra())\nprint('GetLowMass', rawfile.GetLowMass())\nprint('GetHighMass', rawfile.GetHighMass())\nprint('GetStartTime', rawfile.GetStartTime())\nprint('GetEndTime', rawfile.GetEndTime())\nprint('GetNumSpectra', rawfile.GetNumSpectra())\nprint('GetFirstSpectrumNumber', rawfile.GetFirstSpectrumNumber())\nprint('GetLastSpectrumNumber', rawfile.GetLastSpectrumNumber())\nprint('GetAcquisitionDate', rawfile.GetAcquisitionDate())\nprint('GetUniqueCompoundNames', rawfile.GetUniqueCompoundNames())\n\nprint('############################################## INSTRUMENT BEGIN')\nprint('GetInstrumentDescription', rawfile.GetInstrumentDescription())\nprint('GetInstrumentID', rawfile.GetInstrumentID())\nprint('GetInstSerialNumber', rawfile.GetInstSerialNumber())\nprint('GetInstName', rawfile.GetInstName())\nprint('GetInstModel', rawfile.GetInstModel())\nprint('GetInstSoftwareVersion', rawfile.GetInstSoftwareVersion())\nprint('GetInstHardwareVersion', rawfile.GetInstHardwareVersion())\nprint('GetInstFlags', rawfile.GetInstFlags())\nprint('GetInstNumChannelLabels', rawfile.GetInstNumChannelLabels())\n# print( 'GetInstChannelLabel(0)', rawfile.GetInstChannelLabel(0) )\nprint('IsQExactive', rawfile.IsQExactive()) # Not implemented in MSFileReader 3.0.29.0\nprint('############################################## INSTRUMENT END')\n\nscan_number = 1\nprint('############################################## XCALIBUR INTERFACE BEGIN')\nprint('GetScanHeaderInfoForScanNum',\n rawfile.GetScanHeaderInfoForScanNum(scan_number)) # \"View/Scan header\", upper part\nprint('GetTrailerExtraForScanNum', rawfile.GetTrailerExtraForScanNum(scan_number)) # \"View/Scan header\", lower part\nprint('GetNumTuneData', rawfile.GetNumTuneData())\nprint('GetTuneData(0)', rawfile.GetTuneData(0)) # \"View/Report/Tune Method\"\nprint('GetNumInstMethods', rawfile.GetNumInstMethods())\nprint('GetInstMethodNames', rawfile.GetInstMethodNames())\nfor i in range(rawfile.GetNumInstMethods()):\n print('-------------------------------------------------------------------------------')\n print(rawfile.GetInstMethod(i)) # \"View/Report/Instrument Method\"\n print('-------------------------------------------------------------------------------')\nprint('rawfile.ExtractInstMethodFromRaw', rawfile.ExtractInstMethodFromRaw(rawfile.filename + '.meth'))\n\n# # # # # # \"View/Report/Sample Information\" BEGIN\nprint('GetVialNumber', rawfile.GetVialNumber())\nprint('GetInjectionVolume', rawfile.GetInjectionVolume())\nprint('GetInjectionAmountUnits', rawfile.GetInjectionAmountUnits())\nprint('GetSampleVolume', rawfile.GetSampleVolume())\nprint('GetSampleVolumeUnits', rawfile.GetSampleVolumeUnits())\nprint('GetSampleWeight', rawfile.GetSampleWeight())\nprint('GetSampleAmountUnits', rawfile.GetSampleAmountUnits())\nprint('GetSeqRowNumber', rawfile.GetSeqRowNumber())\nprint('GetSeqRowSampleType', rawfile.GetSeqRowSampleType())\nprint('GetSeqRowDataPath', rawfile.GetSeqRowDataPath())\nprint('GetSeqRowRawFileName', rawfile.GetSeqRowRawFileName())\nprint('GetSeqRowSampleName', rawfile.GetSeqRowSampleName())\nprint('GetSeqRowSampleID', rawfile.GetSeqRowSampleID())\nprint('GetSeqRowComment', rawfile.GetSeqRowComment())\nprint('GetSeqRowLevelName', rawfile.GetSeqRowLevelName())\nprint('GetSeqRowUserText', rawfile.GetSeqRowUserText(index=0))\nprint('GetSeqRowUserText', rawfile.GetSeqRowUserText(index=1))\nprint('GetSeqRowUserText', rawfile.GetSeqRowUserText(index=2))\nprint('GetSeqRowUserText', rawfile.GetSeqRowUserText(index=3))\nprint('GetSeqRowUserText', rawfile.GetSeqRowUserText(index=4))\nprint('GetSeqRowInstrumentMethod', rawfile.GetSeqRowInstrumentMethod())\nprint('GetSeqRowProcessingMethod', rawfile.GetSeqRowProcessingMethod())\nprint('GetSeqRowCalibrationFile', rawfile.GetSeqRowCalibrationFile())\nprint('GetSeqRowVial', rawfile.GetSeqRowVial())\nprint('GetSeqRowInjectionVolume', rawfile.GetSeqRowInjectionVolume())\nprint('GetSeqRowSampleWeight', rawfile.GetSeqRowSampleWeight())\nprint('GetSeqRowSampleVolume', rawfile.GetSeqRowSampleVolume())\nprint('GetSeqRowISTDAmount', rawfile.GetSeqRowISTDAmount())\nprint('GetSeqRowDilutionFactor', rawfile.GetSeqRowDilutionFactor())\nprint('GetSeqRowUserLabel', rawfile.GetSeqRowUserLabel(index=0))\nprint('GetSeqRowUserLabel', rawfile.GetSeqRowUserLabel(index=1))\nprint('GetSeqRowUserLabel', rawfile.GetSeqRowUserLabel(index=2))\nprint('GetSeqRowUserLabel', rawfile.GetSeqRowUserLabel(index=3))\nprint('GetSeqRowUserLabel', rawfile.GetSeqRowUserLabel(index=4))\nprint('GetSeqRowUserTextEx', rawfile.GetSeqRowUserTextEx(index=0))\nprint('GetSeqRowUserTextEx', rawfile.GetSeqRowUserTextEx(index=1))\nprint('GetSeqRowUserTextEx', rawfile.GetSeqRowUserTextEx(index=2))\nprint('GetSeqRowUserTextEx', rawfile.GetSeqRowUserTextEx(index=3))\nprint('GetSeqRowUserTextEx', rawfile.GetSeqRowUserTextEx(index=4))\nprint('GetSeqRowBarcode', rawfile.GetSeqRowBarcode())\nprint('GetSeqRowBarcodeStatus', rawfile.GetSeqRowBarcodeStatus())\n# # # # # # # \"View/Report/Sample Information\" END\nprint('GetNumStatusLog', rawfile.GetNumStatusLog())\nprint('GetStatusLogForScanNum') # \"View/Report/Status Log\"\npprint(rawfile.GetStatusLogForScanNum(scan_number))\nprint('GetStatusLogForPos(position=0)', rawfile.GetStatusLogForPos(position=0))\nprint('GetStatusLogForPos(position=1)', rawfile.GetStatusLogForPos(position=1))\nprint('GetStatusLogPlottableIndex()', rawfile.GetStatusLogPlottableIndex())\n\nprint('GetNumErrorLog', rawfile.GetNumErrorLog())\nfor i in range(rawfile.GetNumErrorLog()):\n print('GetErrorLogItem', i, rawfile.GetErrorLogItem(i)) # \"View/Report/Error Log\"\nprint('############################################## XCALIBUR INTERFACE END')\n\nprint('GetMassListFromScanNum', rawfile.GetMassListFromScanNum(scan_number))\nprint('GetMassListRangeFromScanNum', rawfile.GetMassListRangeFromScanNum(scan_number))\nprint('GetSegmentedMassListFromScanNum', rawfile.GetSegmentedMassListFromScanNum(scan_number))\nprint('GetAverageMassList', rawfile.GetAverageMassList(scan_number, scan_number + 10))\nprint('GetAveragedMassSpectrum', rawfile.GetAveragedMassSpectrum([scan_number, scan_number + 5, scan_number + 10]))\nprint('GetSummedMassSpectrum', rawfile.GetSummedMassSpectrum([scan_number, scan_number + 5, scan_number + 10]))\nprint('GetLabelData', rawfile.GetLabelData(scan_number))\nprint('GetAveragedLabelData', rawfile.GetAveragedLabelData([scan_number, scan_number + 5, scan_number + 10]))\nprint('GetAllMSOrderData', rawfile.GetAllMSOrderData(scan_number))\nprint('GetChroData', rawfile.GetChroData(startTime=rawfile.StartTime,\n endTime=rawfile.EndTime,\n massRange1=\"{}-{}\".format(rawfile.LowMass, rawfile.HighMass),\n scanFilter=\"Full ms \"))\n# print( 'GetChroByCompoundName', rawfile.GetChroByCompoundName([\"methyltestosterone\"]) )\n\n# print( 'GetMassPrecisionEstimate', rawfile.GetMassPrecisionEstimate(scan_number) )\n\nprint('GetFullMSOrderPrecursorDataFromScanNum(scan_number,0)',\n rawfile.GetFullMSOrderPrecursorDataFromScanNum(scan_number, 0))\nprint('GetFullMSOrderPrecursorDataFromScanNum(scan_number,1)',\n rawfile.GetFullMSOrderPrecursorDataFromScanNum(scan_number, 1))\n\nprint('GetPrecursorInfoFromScanNum(scan_number,1)', rawfile.GetPrecursorInfoFromScanNum(scan_number))\n\nwith open('test.tsv', 'wt') as f:\n print('\\t'.join(map(str, ('scan_number',\n 'RetentionTime',\n 'scan_number',\n 'GetFilterForScanNum(i)',\n 'GetMSOrderForScanNum(i)',\n 'GetNumberOfMSOrdersFromScanNum(i)',\n 'GetScanTypeForScanNum(i)',\n 'GetDetectorTypeForScanNum(i)',\n 'GetMassAnalyzerTypeForScanNum(i)',\n 'GetActivationTypeForScanNum(i,MSOrder=2)',\n 'IsProfileScanForScanNum(i)',\n 'IsCentroidScanForScanNum(i)',\n 'GetIsolationWidthForScanNum(i,MSOrder=1)',\n 'GetCollisionEnergyForScanNum(i,MSOrder=1)',\n 'GetPrecursorInfoFromScanNum(i)',\n 'GetMassCalibrationValueFromScanNum(i,massCalibrationIndex=0)',\n 'GetScanEventForScanNum(i)',\n 'GetSegmentAndEventForScanNum(i)',\n 'GetCycleNumberFromScanNumber(i)',\n 'GetAValueFromScanNum(i)',\n 'GetBValueFromScanNum(i)',\n 'GetKValueFromScanNum(i)',\n 'GetRValueFromScanNum(i)',\n 'GetVValueFromScanNum(i)',\n 'GetMSXMultiplexValueFromScanNum(i)',\n 'GetCompoundNameFromScanNum(i)',\n 'GetNumberOfMassRangesFromScanNum(i)',\n 'GetMassRangeFromScanNum(i,0)',\n 'GetMassRangeFromScanNum(i,1)',\n 'GetNumberOfSourceFragmentsFromScanNum(i)',\n 'GetSourceFragmentValueFromScanNum(i,0)',\n 'GetNumberOfSourceFragmentationMassRangesFromScanNum(i)'\n ))), file=f)\n\n for i in range(rawfile.FirstSpectrumNumber, rawfile.LastSpectrumNumber + 1):\n print('\\t'.join(map(str, (i,\n rawfile.RTFromScanNum(i),\n rawfile.ScanNumFromRT(rawfile.RTFromScanNum(i)),\n rawfile.GetFilterForScanNum(i),\n rawfile.GetMSOrderForScanNum(i),\n rawfile.GetNumberOfMSOrdersFromScanNum(i),\n rawfile.GetScanTypeForScanNum(i),\n rawfile.GetDetectorTypeForScanNum(i),\n rawfile.GetMassAnalyzerTypeForScanNum(i),\n rawfile.GetActivationTypeForScanNum(i, MSOrder=2),\n rawfile.IsProfileScanForScanNum(i),\n rawfile.IsCentroidScanForScanNum(i),\n rawfile.GetIsolationWidthForScanNum(i, MSOrder=1),\n rawfile.GetCollisionEnergyForScanNum(i, MSOrder=1),\n rawfile.GetPrecursorInfoFromScanNum(i),\n rawfile.GetMassCalibrationValueFromScanNum(i, massCalibrationIndex=0),\n rawfile.GetScanEventForScanNum(i),\n rawfile.GetSegmentAndEventForScanNum(i),\n rawfile.GetCycleNumberFromScanNumber(i),\n rawfile.GetAValueFromScanNum(i),\n rawfile.GetBValueFromScanNum(i),\n rawfile.GetKValueFromScanNum(i),\n rawfile.GetRValueFromScanNum(i),\n rawfile.GetVValueFromScanNum(i),\n rawfile.GetMSXMultiplexValueFromScanNum(i),\n rawfile.GetCompoundNameFromScanNum(i),\n rawfile.GetNumberOfMassRangesFromScanNum(i),\n rawfile.GetMassRangeFromScanNum(i, 0),\n rawfile.GetMassRangeFromScanNum(i, 1),\n rawfile.GetNumberOfSourceFragmentsFromScanNum(i),\n rawfile.GetSourceFragmentValueFromScanNum(i, 0),\n rawfile.GetNumberOfSourceFragmentationMassRangesFromScanNum(i)\n ))), file=f)\n\nrawfile.Close()\n```\n\n\n", "description_content_type": "text/markdown", "docs_url": null, "download_url": "https://github.com/frallain/pymsfilereader/archive/master.zip", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/frallain/pymsfilereader", "keywords": "", "license": "", "maintainer": "", "maintainer_email": "", "name": "pymsfilereader", "package_url": "https://pypi.org/project/pymsfilereader/", "platform": "", "project_url": "https://pypi.org/project/pymsfilereader/", "project_urls": { "Download": "https://github.com/frallain/pymsfilereader/archive/master.zip", "Homepage": "https://github.com/frallain/pymsfilereader" }, "release_url": "https://pypi.org/project/pymsfilereader/1.0.1/", "requires_dist": [ "comtypes" ], "requires_python": "", "summary": "Thermo MSFileReader Python bindings to interact with .raw files generated by Thermo tandem mass spectrometers.", "version": "1.0.1" }, "last_serial": 5572689, "releases": { "1.0.0": [ { "comment_text": "", "digests": { "md5": "0b07bf64917709d4369e4cfee896c3c7", "sha256": "179920741d652b93d339fdc74f8baac0661f9204bb4e533dd49b42dbdef0578d" }, "downloads": -1, "filename": "pymsfilereader-1.0.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "0b07bf64917709d4369e4cfee896c3c7", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 26816, "upload_time": "2019-07-23T13:42:18", "url": "https://files.pythonhosted.org/packages/93/19/a9a6d3ed18892705eacfdc94f87902f538ee2b63beb0c2608419cc3c604d/pymsfilereader-1.0.0-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "d46f64460bcbe5922b539f6f5aefea24", "sha256": "26178b582111de735856815637fc794318e1d7a7641175510368a3d054c3b52c" }, "downloads": -1, "filename": "pymsfilereader-1.0.0.tar.gz", "has_sig": false, "md5_digest": "d46f64460bcbe5922b539f6f5aefea24", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 28897, "upload_time": "2019-07-23T13:42:22", "url": "https://files.pythonhosted.org/packages/29/a5/89a5da4ffea13f070e3e1d1de196edd60a9529119bf8560f3c33ddfd58f5/pymsfilereader-1.0.0.tar.gz" } ], "1.0.1": [ { "comment_text": "", "digests": { "md5": "0a7bb51166868f22db5269677e91fad6", "sha256": "5680bb16b08f61b2fdc3bd6a06aef6cb12cc6202a7ed618008fcaf258c6fc50f" }, "downloads": -1, "filename": "pymsfilereader-1.0.1-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "0a7bb51166868f22db5269677e91fad6", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 26787, "upload_time": "2019-07-23T14:20:41", "url": "https://files.pythonhosted.org/packages/ee/d4/7a119d5b43c4cdbfbdfe574e7afa83cec05da0c382c48e59424f7f57c42a/pymsfilereader-1.0.1-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "0cef964ee9d798509f69329041ae6731", "sha256": "69d166a01892438884a156a60cc400c7106065cdc8fe8c4b46ad3a4191afda26" }, "downloads": -1, "filename": "pymsfilereader-1.0.1.tar.gz", "has_sig": false, "md5_digest": "0cef964ee9d798509f69329041ae6731", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 28877, "upload_time": "2019-07-23T14:20:43", "url": "https://files.pythonhosted.org/packages/3b/ad/9132f65e8ae3227fe65e145fc7d2a619769f8df01cdcbc2790ce00214284/pymsfilereader-1.0.1.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "0a7bb51166868f22db5269677e91fad6", "sha256": "5680bb16b08f61b2fdc3bd6a06aef6cb12cc6202a7ed618008fcaf258c6fc50f" }, "downloads": -1, "filename": "pymsfilereader-1.0.1-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "0a7bb51166868f22db5269677e91fad6", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 26787, "upload_time": "2019-07-23T14:20:41", "url": "https://files.pythonhosted.org/packages/ee/d4/7a119d5b43c4cdbfbdfe574e7afa83cec05da0c382c48e59424f7f57c42a/pymsfilereader-1.0.1-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "0cef964ee9d798509f69329041ae6731", "sha256": "69d166a01892438884a156a60cc400c7106065cdc8fe8c4b46ad3a4191afda26" }, "downloads": -1, "filename": "pymsfilereader-1.0.1.tar.gz", "has_sig": false, "md5_digest": "0cef964ee9d798509f69329041ae6731", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 28877, "upload_time": "2019-07-23T14:20:43", "url": "https://files.pythonhosted.org/packages/3b/ad/9132f65e8ae3227fe65e145fc7d2a619769f8df01cdcbc2790ce00214284/pymsfilereader-1.0.1.tar.gz" } ] }