Source code for matchms.importing.load_spectra
import os
from typing import Generator, List, Optional, Union
from matchms.importing import (load_from_json, load_from_mgf, load_from_msp,
load_from_mzml, load_from_mzxml,
load_from_pickle, load_from_usi)
from matchms.Spectrum import Spectrum
[docs]def load_spectra(file: str, metadata_harmonization: bool = True,
ftype: Optional[str] = None) -> Union[List[Spectrum], Generator[Spectrum, None, None]]:
"""Loads spectra from your spectrum file into memory as matchms Spectrum object
The following file extensions can be loaded in with this function:
"mzML", "json", "mgf", "msp", "mzxml", "usi" and "pickle".
A pickled file is expected to directly contain a list of matchms spectrum objects.
Args:
-----
file:
Path to file containing spectra, with file extension "mzML", "json", "mgf", "msp",
"mzxml", "usi" or "pickle"
ftype:
Optional. Filetype
"""
assert os.path.exists(file), f"The specified file: {file} does not exists"
if ftype is None:
ftype = os.path.splitext(file)[1].lower()[1:]
else:
ftype = ftype.lower()
if ftype == "mzml":
return load_from_mzml(file, metadata_harmonization=metadata_harmonization)
if ftype == "json":
return load_from_json(file, metadata_harmonization=metadata_harmonization)
if ftype == "mgf":
return load_from_mgf(file, metadata_harmonization=metadata_harmonization)
if ftype == "msp":
return load_from_msp(file, metadata_harmonization=metadata_harmonization)
if ftype == "mzxml":
return load_from_mzxml(file, metadata_harmonization=metadata_harmonization)
if ftype == "usi":
return load_from_usi(file, metadata_harmonization=metadata_harmonization)
if ftype == "pickle":
return load_from_pickle(file, metadata_harmonization)
raise TypeError(f"File extension of file: {file} is not recognized")
[docs]def load_list_of_spectrum_files(spectrum_files: Union[List[str], str]
) -> Union[List[Spectrum], Generator[Spectrum, None, None]]:
"""Combines all spectra in multiple files into a list of spectra"""
# Just load spectra if it is a single file
if isinstance(spectrum_files, str):
return load_spectra(spectrum_files)
# If multiple files combine results into one generator
spectrum_generators = [load_spectra(spectrum_file) for
spectrum_file in spectrum_files]
def chain(*iterables):
"""Combines multiple iterators (and generators) into a single iterator"""
# chain('ABC', 'DEF') --> A B C D E F
for it in iterables:
for element in it:
yield element
return chain(*spectrum_generators)