Import Data in SpectroChemPy
This tutorial shows how to import data in SpectroChemPy (SCPy) .
First, let’s import spectrochempy as scp in the current namespace, so that all spectrochempy commands will be called as scp.method(<method parameters>) .
[1]:
import spectrochempy as scp
Generic read command
To read a file containing spectrocopic data or similar, the read method can be used. This method will try to guess the file format based on the file extension.
[2]:
X = scp.read("wodger.spg")
The above command will extract the data from the file wodger.spg and store it in a NDDataset object named X. To display information about the dataset, simply type X in a cell and run it.
[3]:
X
[3]:
NDDataset [wodger] — float64, shape: (y:2, x:5549), a.u.
Omnic filename: /home/runner/work/spectrochempy/spectrochempy/docs/sources/userguide/importexport/wodger.spg
2026-07-30 19:08:00+00:00> Sorted by date
Data
[ 1.983 1.984 ... 1.698 1.704]] a.u.
Dimension `x`
Dimension `y`
[ vz0468.spa, Wed Jul 06 21:20:38 2016 (GMT+02:00) 2016-07-06 19:23:14+00:00]]
In this case, the data were in an OMNIC file format, and the read method guessed it correctly using the file name extension. The read method can also read other file formats, such as OPUS, JCAMP-DX, CSV, MATLAB, TOPSPIN, etc. or even a directory.
How the generic reader works
Under the hood, scp.read(...) acts as a dispatcher that inspects the file extension (or the optional protocol= keyword) and delegates the actual reading to the appropriate format-specific implementation:
scp.read(path)
│
▼
format detection
│
▼
appropriate namespace reader
│
▼
scp.omnic.read(path)
scp.opus.read(path)
scp.jcamp.read(path)
...
The generic reader is convenient because you do not need to remember which namespace or alias to use. However, the namespace API (scp.omnic.read, scp.opus.read, scp.jcamp.read, …) is useful when you want to make the format explicit in your code, or when the automatic detection is ambiguous.
You can also force a protocol manually:
[4]:
X = scp.read("wodger.spg", protocol="omnic")
X
[4]:
NDDataset [wodger] — float64, shape: (y:2, x:5549), a.u.
Omnic filename: /home/runner/work/spectrochempy/spectrochempy/docs/sources/userguide/importexport/wodger.spg
2026-07-30 19:08:00+00:00> Sorted by date
Data
[ 1.983 1.984 ... 1.698 1.704]] a.u.
Dimension `x`
Dimension `y`
[ vz0468.spa, Wed Jul 06 21:20:38 2016 (GMT+02:00) 2016-07-06 19:23:14+00:00]]
Using a specific reader
Instead of using the generic read method, you can also use a specific reader, such as read_omnic, read_opus, read_csv, read_jcamp, etc. These methods are more specific and will only read the file format they are. For example, read_omnic will only read OMNIC files.
The following table lists the available file readers in SCPy along with the corresponding file formats and extensions they support:
Reader |
File Formats |
Extensions |
|---|---|---|
read_omnic,read_spa,read_spg,read_srs |
Thermo Scientific/Nicolet OMNIC files |
.spa, .spg, .srs |
read_opus |
Bruker OPUS files |
.0, .1, .000, … |
read_csv |
Comma-Separated Values (CSV) files |
.csv |
read_jcamp, read_dx |
JCAMP-DX spectral data files |
.dx, .jdx |
read_matlab,read_mat |
MATLAB files |
.mat, .dso |
scp.nmr.read |
Bruker TopSpin NMR files (requires spectrochempy-nmr plugin) |
fid, ser, 1r, 1i, 2rr… |
read_labspec |
LABSPEC6 spectral data files |
.txt |
read_wire,read_wdf |
Renishaw Wire files |
.wdf |
read_scp |
SpectroChemPy-specific files |
.scp |
read_soc,read_ddr,read_hdr,read_sdr |
Surface Optics Corporation files |
.ddr, .hdr, .sdr |
read_galactic |
Galactic spectral files |
.spc |
read_quadera |
Pfeiffer Vacuum QUADERA mass spectrometer files |
.txt |
scp.perkinelmer.read |
PerkinElmer SP files (requires spectrochempy-perkinelmer plugin) |
.sp |
read |
Generic reader (automatically detects format) |
|
read_dir |
Reads all supported files in a directory |
|
read_zip |
Reads files from a ZIP archive |
.zip |
scp.carroucell.read |
Reads files from a carroucell experiment directory |
The read_dir function scans a directory and reads all supported files, returning a list of NDDataset objects.
Historical .scp and .pscp files are trusted native persistence archives. If such a file requires legacy pickle-based decoding, load it explicitly with:
scp.read("example.scp", allow_unsafe_legacy=True)
For a short transition period, the contrast with newly written native files is worth keeping explicit:
# Newly written native file:
# ds = scp.read("new.scp")
# Portable NetCDF round-trip for NDDataset:
# ds.to_netcdf("new.nc")
# ds2 = scp.NDDataset.from_netcdf("new.nc")
# Historical trusted legacy file only:
# ds = scp.read("old.scp", allow_unsafe_legacy=True)
Only enable allow_unsafe_legacy=True for files from known and trusted sources.
NetCDF is a portable persistence path built on the canonical NDDataset ↔ xarray.Dataset mapping. It currently covers NDDataset only; full CoordSet fidelity and Project round-trips are not guaranteed by the current portable subset.
MATLAB export is available as a minimal exchange writer through write_matlab() / write_mat() for simple numeric NDDataset objects. It is not SpectroChemPy native persistence and does not aim at full round-trip fidelity. For structured SpectroChemPy storage, prefer native safe persistence or the portable xarray / NetCDF path.
Other reader functions return either a single NDDataset or multiple NDDataset objects, depending on the file type and content.
Further details on specific cases are provided below, especially in the section on reading directories.
Using namespace APIs
Core I/O domains also expose a namespace-style API for explicit domain-qualified access:
scp.omnic.read("wodger.spg")
scp.opus.read("irdata/OPUS/test.0000")
scp.csv.read("irdata/csv/iris.csv")
scp.jcamp.read("irdata/jcamp/nh4y-activation.jdx")
These are equivalent to their top-level aliases (read_omnic, read_opus, read_csv, read_jcamp, etc.) and are provided for API clarity and future-proofing. The generic scp.read(...) entry point remains the recommended default.
Using relative or absolute pathnames
In the above examples, the file wodger.spg was read from the current working directory.
If the file is located in another directory, the full path to the file can be provided. For example:
X = scp.read('/users/Brian/s/Life/wodger.spg')
or, for Windows:
X = scp.read(r'C:\\users\\Brian\\s\\Life\\wodger.spg')
Notes:
The path separator is a backslash
\\on Windows, but in many contexts, backslash is also used as an escape character to represent non-printable characters. To avoid problems, either it has to be escaped itself, a double backslash\\, or one can also use raw string literals to represent Windows paths. These are string literals that have anrprepended to them. In raw string literals,\\represents a literal backslash, e.g.r'C:\\users\\Brian'.In python, the slash
/is used as the path separator in all systems (Windows, Linux, OSX, …). So it can be used in all cases. For example:X = scp.read('C:/users/Brian/s/Life/wodger.spg')The use of relative pathnames is a good practice. SpectroChemPy readers use relative paths. If the given path is not absolute, then SpectroChemPy will search relative to the current directory or to a directory specified using the
directorykeyword.For example:
X = scp.read('wodger.spg', directory='C:/users/Brian/s/Life') X = scp.read('Life/wodger.spg', directory='C:\\users\\Brian\\s')The
osorpathlibmodules can be used to work with pathnames. See the “Use os or pathlib packages” section below.The
preferences.datadirvariable can be used to set a default directory where to look for data. See the “Another default search directory: datadir” section below.
Good practices
Use relative paths
As path are system dependent, it is a good practice to use relative pathnames in scripts and notebooks.
If, for instance, Brian has a project organised in a folder (s) with a directory dedicated to input data (Life) and a notebook for preprocessing (welease.ipynb) as illustrated below:
C:\users
| +-- Brian
| | +-- s
| | | +-- Life
| | | | +-- wodger.spg
| | | +-- welease.ipynb
Then running this project in John’s Linux computer (e.g. in /home/john/s_copy ) will certainly result in execution errors if absolute paths are used in the notebook:
OSError: Can't find this filename C:\\users\\Brian\\s\\life\\wodger.spg
Fortunately, SpectroChemPy readers use relative paths. If the given path is not absolute, then SpectroChemPy will search in the current directory. Hence, the opening of the spg file from scripts in welease.ipynb can be made by the command:
X = scp.read('Life/wodger.spg')
or:
X = scp.read('wodger.spg', directory='Life')
Use os or pathlib packages
In python, working with pathnames is classically done with dedicated modules such as os or pathlib python modules. With os we mention the following methods that can be particularly useful:
import os
os.getcwd() # returns the absolute path of the current working directory
os.path.expanduser("~") # returns the home directory of the user
os.path.join('path1', 'path2', 'path3', ...)
Using Pathlib is even simpler:
from pathlib import Path
Path.cwd() # returns the absolute path of the current working directory
Path.home() # returns the home directory of the user
Path('path1') / 'path2' / 'path3' / '...'
The interested readers will find more details on the use of these modules here:
Another default search directory: datadir
Spectrochempy also comes with the definition of a second default directory path where to look at the data: the datadir directory. It is defined in the variable preferences.datadir which is imported at the same time as spectrochempy. By default, datadir points in the $HOME/.spectrochempy/testdata directory.
[5]:
DATADIR = scp.preferences.datadir
DATADIR
[5]:
PosixPath('/home/runner/.spectrochempy/testdata')
DATADIR is already a pathlib object and so can be used easily
[6]:
scp.read_omnic(DATADIR / "wodger.spg")
[6]:
NDDataset [wodger] — float64, shape: (y:2, x:5549), a.u.
Omnic filename: /home/runner/.spectrochempy/testdata/wodger.spg
2026-07-30 19:08:00+00:00> Sorted by date
Data
[ 1.983 1.984 ... 1.698 1.704]] a.u.
Dimension `x`
Dimension `y`
[ vz0468.spa, Wed Jul 06 21:20:38 2016 (GMT+02:00) 2016-07-06 19:23:14+00:00]]
It can be set to another pathname permanently (i.e., even after computer restart) by a new assignment:
scp.preferences.datadir = 'C:/users/Brian/s/Life'
This will change the default value in the SCPy preference file located in the hidden folder .spectrochempy/ at the root of the user home directory.
Finally, by default, the import functions used in Spectrochempy will search the data files using this order of precedence:
try absolute path
try in current working directory
try in
datadirif none of these works: generate an OSError (file or directory not found)
Reading directories
The read_dir function is designed to read an entire directory, create NDDatasets for each file, and finally merge all compatible datasets. Let’s see an example:
Here is a list of the files present in
DATADIR/irdata/subdir/.
[7]:
folder = DATADIR / "irdata" / "subdir"
[str(item.relative_to(DATADIR)) for item in folder.glob("*.*")]
[7]:
['irdata/subdir/7_CZ0-100_Pd_102.SPA',
'irdata/subdir/TGAIR-unreadable.srs',
'irdata/subdir/7_CZ0-100_Pd_103.SPA',
'irdata/subdir/7_CZ0-100_Pd_104.SPA',
'irdata/subdir/7_CZ0-100_Pd_101.SPA']
Now read all files in the
DATADIR/irdata/subdir/directory (i.e., four.spafiles and one.srsfile). Any file in an unknown format will be ignored silently:
[8]:
scp.read_dir(folder)
[8]:
List (len=2, type=NDDataset)
0: NDDataset [dd_6.6_19039_538] — float64, shape: (y:335, x:1868), a.u.
( dd_6.6_19039_538 )
2026-07-30 19:08:00+00:00> Merged from several files
Data
[-0.009306 -0.002252 ... 0.0001051 0.000107]
...
[ 0.02474 0.02814 ... 0.002962 0.002967]
[ 0.02663 0.02899 ... 0.002907 0.002916]] a.u.
Dimension `x`
Dimension `y`
Ë
ÁØsúË
t/ä
/ä
/ä
±½@
ö»Îö¿¹·j»D»t4»*
»Ý©S»£°»ýóɺ-êÒº¿p»¢»
»[ýéºùH|»
»Íu»ä䩺LÊкsöþºvÐmºÎG4ºC঺ÔͺÕ
º¹¶:»ñ&Rº*
Ò:Ý¿9WÅEºÓo
ºB'ƺP|_º)ïQ9O̺Üìº-ºÁrï¹ç
±ºð¹¯ºqHºIKº Verknüpftes Spektrum bei 0,519 Min.
Ë
ÁØsúË
t/ä
/ä
/ä
îÂ@
y¼»¾¯^¹¸:¸4êº=x»ØÃ1»¼-øºÿɺÓź[L»×
»£Êp»Õ@»¤(»ë𢹱w 95ºÍ9ÔºÓ೺OuºÔ
ܹºm¼BºâÞå7ÛÍ9Mº,ºJq:ò49 jZºLÛº¬ëºÃi¹;ý:ì) º)vº¡ê¹xÕ½·?³º©ëÁºÀ
ºó(
¹ ...
Verknüpftes Spektrum bei 86,756 Min.
Ë
ÁØsúË
t/ä
/ä
/ä
ã!@
¡Ê
é;òÙ;\
<â½Ä;²;ÿÐæ;¤ññ;°Í¹;¡´;ÛYÎ;?å;Þ¦ò;²ø§;hAe;°TÉ;ó÷Ì;dK;úºY;ÛýÀ;j8;ïkª;#G;¸Û;Öþ;
Verknüpftes Spektrum bei 87,016 Min.
Ë
ÁØsúË
t/ä
/ä
/ä
0+@
+1Ú<9}í<
1: NDDataset [merged [omnic]] — float64, shape: (y:4, x:5549), a.u.
( merged [omnic] )
2026-07-30 19:08:00+00:00> Merged from several files
Data
[ 1.552 1.553 ... 2.161 2.109]
[ 1.461 1.46 ... 2.087 2.088]
[ 1.448 1.447 ... 2.071 2.065]] a.u.
Dimension `x`
Dimension `y`
[ /home/runner/.spectrochempy/testdata/irdata/subdir/7_CZ0-100_Pd_101.SPA
/home/runner/.spectrochempy/testdata/irdata/subdir/7_CZ0-100_Pd_102.SPA
/home/runner/.spectrochempy/testdata/irdata/subdir/7_CZ0-100_Pd_103.SPA
/home/runner/.spectrochempy/testdata/irdata/subdir/7_CZ0-100_Pd_104.SPA]]
The above command reads all files in the DATADIR/irdata/subdir/ directory and merges them into two groups of compatible NDDatasets:
a first
NDDatasetobject (id: 0, shape [335,1868]) comes from the single.srsfile.a second
NDDatasetobject (id: 1, shape [335,1868]) comes from the merging of four.spafiles.
Merging compatible NDDatasets is the default behavior of read_dir (or, equivalently, read). If you want to read the files separately, you can use the merge=False keyword:
[9]:
scp.read_dir(folder, merge=False)
[9]:
List (len=5, type=NDDataset)
recursive: ifTrue, the function scans the directory recursively and reads all supported files in all subdirectories.pattern: a string or a list of strings that can be used to filter the files to be read. Only files whose name matches the pattern will be read.
0: NDDataset [7_CZ0-100 Pd_101] — float64, shape: (y:1, x:5549), a.u.
# Filename: 7_CZ0-100_Pd_101.SPA
2026-07-30 19:08:00+00:00> Data processing history from Omnic :
------------------------------------
Acquisition échantillon
<br/> Background acquis le Ven Nov 30 08:03:45 2018 (GMT+01:00) <br/> Format Final : Absorbance <br/> Résolution: 4,000 de 649,9207 à 5999,7134 <br/> Roue de validation: 0 <br/> Roue porte écran atténuation: Vide <br/> Numéro Série du banc:ALK1100494</div></div></div>
<div class=”scp-output section”><details><summary> Data </summary> <div class=”scp-output section”><div class=”attr-name”> title</div><div>:</div><div class=”attr-value”> absorbance</div></div> <div class=”scp-output section”><div class=”attr-name”> values</div><div>:</div><div class=”attr-value”> … </div></div> <div class=’numeric’> [[ 1.544 1.543 … 2.1 2.091]] a.u.</div> <div class=”scp-output section”><div class=”attr-name”> shape</div><div>:</div><div class=”attr-value”> (y:1, x:5549)</div></div></details></div> <div class=”scp-output section”><details><summary> Dimension `x`</summary> <div class=”scp-output section”><div class=”attr-name”> size</div><div>:</div><div class=”attr-value”> 5549</div></div> <div class=”scp-output section”><div class=”attr-name”> title</div><div>:</div><div class=”attr-value”> wavenumbers</div></div> <div class=”scp-output section”><div class=”attr-name”> coordinates</div><div>:</div><div class=”attr-value”> <div class=’numeric’>[ 6000 5999 … 650.9 649.9] cm⁻¹</div></div></div></details></div> <div class=”scp-output section”><details><summary> Dimension `y`</summary> <div class=”scp-output section”><div class=”attr-name”> size</div><div>:</div><div class=”attr-value”> 1</div></div> <div class=”scp-output section”><div class=”attr-name”> title</div><div>:</div><div class=”attr-value”> acquisition timestamp (GMT)</div></div> <div class=”scp-output section”><div class=”attr-name”> coordinates</div><div>:</div><div class=”attr-value”> <div class=’numeric’>[1.544e+09] s</div></div></div> <div class=”scp-output section”><div class=”attr-name”> labels</div><div>:</div><div class=”attr-value”> … </div></div> <div class=’label’> [[ 2018-11-30 07:10:57+00:00]<br/> [ /home/runner/.spectrochempy/testdata/irdata/subdir/7_CZ0-100_Pd_101.SPA]]</div></details></div></details></div></div> <div class=’scp-output section’><div class=’scp-output’><details><summary>1: NDDataset [7_CZ0-100 Pd_102] — float64, shape: (y:1, x:5549), a.u.</summary><div class=”scp-output section”><div class=”attr-name”> name</div><div>:</div><div class=”attr-value”> 7_CZ0-100 Pd_102</div></div> <div class=”scp-output section”><div class=”attr-name”> author</div><div>:</div><div class=”attr-value”> runner@runnervmvrwv9</div></div> <div class=”scp-output section”><div class=”attr-name”> created</div><div>:</div><div class=”attr-value”> 2026-07-30 19:08:00+00:00</div></div> <div class=”scp-output section”><div class=”attr-name”> description</div><div>:</div><div class=”attr-value”> <div># Omnic name: 7_CZ0-100 Pd_102<br/> # Filename: 7_CZ0-100_Pd_102.SPA</div></div></div> <div class=”scp-output section”><div class=”attr-name”> history</div><div>:</div><div class=”attr-value”> <div>2026-07-30 19:08:00+00:00> Imported from spa file(s)<br/> 2026-07-30 19:08:00+00:00> Data processing history from Omnic :<br/> ————————————<br/> Acquisition échantillon
<br/> Background acquis le Ven Nov 30 08:12:56 2018 (GMT+01:00) <br/> Format Final : Absorbance <br/> Résolution: 4,000 de 649,9207 à 5999,7134 <br/> Roue de validation: 0 <br/> Roue porte écran atténuation: Vide <br/> Numéro Série du banc:ALK1100494</div></div></div>
<div class=”scp-output section”><details><summary> Data </summary> <div class=”scp-output section”><div class=”attr-name”> title</div><div>:</div><div class=”attr-value”> absorbance</div></div> <div class=”scp-output section”><div class=”attr-name”> values</div><div>:</div><div class=”attr-value”> … </div></div> <div class=’numeric’> [[ 1.552 1.553 … 2.161 2.109]] a.u.</div> <div class=”scp-output section”><div class=”attr-name”> shape</div><div>:</div><div class=”attr-value”> (y:1, x:5549)</div></div></details></div> <div class=”scp-output section”><details><summary> Dimension `x`</summary> <div class=”scp-output section”><div class=”attr-name”> size</div><div>:</div><div class=”attr-value”> 5549</div></div> <div class=”scp-output section”><div class=”attr-name”> title</div><div>:</div><div class=”attr-value”> wavenumbers</div></div> <div class=”scp-output section”><div class=”attr-name”> coordinates</div><div>:</div><div class=”attr-value”> <div class=’numeric’>[ 6000 5999 … 650.9 649.9] cm⁻¹</div></div></div></details></div> <div class=”scp-output section”><details><summary> Dimension `y`</summary> <div class=”scp-output section”><div class=”attr-name”> size</div><div>:</div><div class=”attr-value”> 1</div></div> <div class=”scp-output section”><div class=”attr-name”> title</div><div>:</div><div class=”attr-value”> acquisition timestamp (GMT)</div></div> <div class=”scp-output section”><div class=”attr-name”> coordinates</div><div>:</div><div class=”attr-value”> <div class=’numeric’>[1.544e+09] s</div></div></div> <div class=”scp-output section”><div class=”attr-name”> labels</div><div>:</div><div class=”attr-value”> … </div></div> <div class=’label’> [[ 2018-11-30 07:22:52+00:00]<br/> [ /home/runner/.spectrochempy/testdata/irdata/subdir/7_CZ0-100_Pd_102.SPA]]</div></details></div></details></div></div> <div class=’scp-output section’><div class=’scp-output’><details><summary>2: NDDataset [7_CZ0-100 Pd_103] — float64, shape: (y:1, x:5549), a.u.</summary><div class=”scp-output section”><div class=”attr-name”> name</div><div>:</div><div class=”attr-value”> 7_CZ0-100 Pd_103</div></div> <div class=”scp-output section”><div class=”attr-name”> author</div><div>:</div><div class=”attr-value”> runner@runnervmvrwv9</div></div> <div class=”scp-output section”><div class=”attr-name”> created</div><div>:</div><div class=”attr-value”> 2026-07-30 19:08:00+00:00</div></div> <div class=”scp-output section”><div class=”attr-name”> description</div><div>:</div><div class=”attr-value”> <div># Omnic name: 7_CZ0-100 Pd_103<br/> # Filename: 7_CZ0-100_Pd_103.SPA</div></div></div> <div class=”scp-output section”><div class=”attr-name”> history</div><div>:</div><div class=”attr-value”> <div>2026-07-30 19:08:00+00:00> Imported from spa file(s)<br/> 2026-07-30 19:08:00+00:00> Data processing history from Omnic :<br/> ————————————<br/> Acquisition échantillon
<br/> Background acquis le Ven Nov 30 08:24:51 2018 (GMT+01:00) <br/> Format Final : Absorbance <br/> Résolution: 4,000 de 649,9207 à 5999,7134 <br/> Roue de validation: 0 <br/> Roue porte écran atténuation: Vide <br/> Numéro Série du banc:ALK1100494</div></div></div>
<div class=”scp-output section”><details><summary> Data </summary> <div class=”scp-output section”><div class=”attr-name”> title</div><div>:</div><div class=”attr-value”> absorbance</div></div> <div class=”scp-output section”><div class=”attr-name”> values</div><div>:</div><div class=”attr-value”> … </div></div> <div class=’numeric’> [[ 1.461 1.46 … 2.087 2.088]] a.u.</div> <div class=”scp-output section”><div class=”attr-name”> shape</div><div>:</div><div class=”attr-value”> (y:1, x:5549)</div></div></details></div> <div class=”scp-output section”><details><summary> Dimension `x`</summary> <div class=”scp-output section”><div class=”attr-name”> size</div><div>:</div><div class=”attr-value”> 5549</div></div> <div class=”scp-output section”><div class=”attr-name”> title</div><div>:</div><div class=”attr-value”> wavenumbers</div></div> <div class=”scp-output section”><div class=”attr-name”> coordinates</div><div>:</div><div class=”attr-value”> <div class=’numeric’>[ 6000 5999 … 650.9 649.9] cm⁻¹</div></div></div></details></div> <div class=”scp-output section”><details><summary> Dimension `y`</summary> <div class=”scp-output section”><div class=”attr-name”> size</div><div>:</div><div class=”attr-value”> 1</div></div> <div class=”scp-output section”><div class=”attr-name”> title</div><div>:</div><div class=”attr-value”> acquisition timestamp (GMT)</div></div> <div class=”scp-output section”><div class=”attr-name”> coordinates</div><div>:</div><div class=”attr-value”> <div class=’numeric’>[1.544e+09] s</div></div></div> <div class=”scp-output section”><div class=”attr-name”> labels</div><div>:</div><div class=”attr-value”> … </div></div> <div class=’label’> [[ 2018-11-30 07:34:49+00:00]<br/> [ /home/runner/.spectrochempy/testdata/irdata/subdir/7_CZ0-100_Pd_103.SPA]]</div></details></div></details></div></div> <div class=’scp-output section’><div class=’scp-output’><details><summary>3: NDDataset [7_CZ0-100 Pd_104] — float64, shape: (y:1, x:5549), a.u.</summary><div class=”scp-output section”><div class=”attr-name”> name</div><div>:</div><div class=”attr-value”> 7_CZ0-100 Pd_104</div></div> <div class=”scp-output section”><div class=”attr-name”> author</div><div>:</div><div class=”attr-value”> runner@runnervmvrwv9</div></div> <div class=”scp-output section”><div class=”attr-name”> created</div><div>:</div><div class=”attr-value”> 2026-07-30 19:08:00+00:00</div></div> <div class=”scp-output section”><div class=”attr-name”> description</div><div>:</div><div class=”attr-value”> <div># Omnic name: 7_CZ0-100 Pd_104<br/> # Filename: 7_CZ0-100_Pd_104.SPA</div></div></div> <div class=”scp-output section”><div class=”attr-name”> history</div><div>:</div><div class=”attr-value”> <div>2026-07-30 19:08:00+00:00> Imported from spa file(s)<br/> 2026-07-30 19:08:00+00:00> Data processing history from Omnic :<br/> ————————————<br/> Acquisition échantillon
<br/> Background acquis le Ven Nov 30 08:36:47 2018 (GMT+01:00) <br/> Format Final : Absorbance <br/> Résolution: 4,000 de 649,9207 à 5999,7134 <br/> Roue de validation: 0 <br/> Roue porte écran atténuation: Vide <br/> Numéro Série du banc:ALK1100494</div></div></div>
<div class=”scp-output section”><details><summary> Data </summary> <div class=”scp-output section”><div class=”attr-name”> title</div><div>:</div><div class=”attr-value”> absorbance</div></div> <div class=”scp-output section”><div class=”attr-name”> values</div><div>:</div><div class=”attr-value”> … </div></div> <div class=’numeric’> [[ 1.448 1.447 … 2.071 2.065]] a.u.</div> <div class=”scp-output section”><div class=”attr-name”> shape</div><div>:</div><div class=”attr-value”> (y:1, x:5549)</div></div></details></div> <div class=”scp-output section”><details><summary> Dimension `x`</summary> <div class=”scp-output section”><div class=”attr-name”> size</div><div>:</div><div class=”attr-value”> 5549</div></div> <div class=”scp-output section”><div class=”attr-name”> title</div><div>:</div><div class=”attr-value”> wavenumbers</div></div> <div class=”scp-output section”><div class=”attr-name”> coordinates</div><div>:</div><div class=”attr-value”> <div class=’numeric’>[ 6000 5999 … 650.9 649.9] cm⁻¹</div></div></div></details></div> <div class=”scp-output section”><details><summary> Dimension `y`</summary> <div class=”scp-output section”><div class=”attr-name”> size</div><div>:</div><div class=”attr-value”> 1</div></div> <div class=”scp-output section”><div class=”attr-name”> title</div><div>:</div><div class=”attr-value”> acquisition timestamp (GMT)</div></div> <div class=”scp-output section”><div class=”attr-name”> coordinates</div><div>:</div><div class=”attr-value”> <div class=’numeric’>[1.544e+09] s</div></div></div> <div class=”scp-output section”><div class=”attr-name”> labels</div><div>:</div><div class=”attr-value”> … </div></div> <div class=’label’> [[ 2018-11-30 07:46:44+00:00]<br/> [ /home/runner/.spectrochempy/testdata/irdata/subdir/7_CZ0-100_Pd_104.SPA]]</div></details></div></details></div></div> <div class=’scp-output section’><div class=’scp-output’><details><summary>4: NDDataset [dd_6.6_19039_538] — float64, shape: (y:335, x:1868), a.u.</summary><div class=”scp-output section”><div class=”attr-name”> name</div><div>:</div><div class=”attr-value”> dd_6.6_19039_538</div></div> <div class=”scp-output section”><div class=”attr-name”> author</div><div>:</div><div class=”attr-value”> runner@runnervmvrwv9</div></div> <div class=”scp-output section”><div class=”attr-name”> created</div><div>:</div><div class=”attr-value”> 2026-07-30 19:08:01+00:00</div></div> <div class=”scp-output section”><div class=”attr-name”> description</div><div>:</div><div class=”attr-value”> <div>Dataset from omnic srs file.</div></div></div> <div class=”scp-output section”><details><summary> Data </summary> <div class=”scp-output section”><div class=”attr-name”> title</div><div>:</div><div class=”attr-value”> absorbance</div></div> <div class=”scp-output section”><div class=”attr-name”> values</div><div>:</div><div class=”attr-value”> … </div></div> <div class=’numeric’> [[-0.007524 -0.0003661 … 8.291e-05 9.239e-05]<br/> [-0.009306 -0.002252 … 0.0001051 0.000107]<br/> …<br/> [ 0.02474 0.02814 … 0.002962 0.002967]<br/> [ 0.02663 0.02899 … 0.002907 0.002916]] a.u.</div> <div class=”scp-output section”><div class=”attr-name”> shape</div><div>:</div><div class=”attr-value”> (y:335, x:1868)</div></div></details></div> <div class=”scp-output section”><details><summary> Dimension `x`</summary> <div class=”scp-output section”><div class=”attr-name”> size</div><div>:</div><div class=”attr-value”> 1868</div></div> <div class=”scp-output section”><div class=”attr-name”> title</div><div>:</div><div class=”attr-value”> wavenumbers</div></div> <div class=”scp-output section”><div class=”attr-name”> coordinates</div><div>:</div><div class=”attr-value”> <div class=’numeric’>[ 4000 3998 … 401.1 399.2] cm⁻¹</div></div></div></details></div> <div class=”scp-output section”><details><summary> Dimension `y`</summary> <div class=”scp-output section”><div class=”attr-name”> size</div><div>:</div><div class=”attr-value”> 335</div></div> <div class=”scp-output section”><div class=”attr-name”> title</div><div>:</div><div class=”attr-value”> Time</div></div> <div class=”scp-output section”><div class=”attr-name”> coordinates</div><div>:</div><div class=”attr-value”> <div class=’numeric’>[ 0.26 0.52 … 86.76 87.02] min</div></div></div> <div class=”scp-output section”><div class=”attr-name”> labels</div><div>:</div><div class=”attr-value”> … </div></div> <div class=’label’> [ Verknüpftes Spektrum bei 0,260 Min.<br/> Ë<br/> ÁØsúË<br/> t/ä<br/> /ä<br/> /ä<br/><br/><br/><br/> ±½@<br/> ö»Îö¿¹·j»D»t4»*<br/> »Ý©S»£°»ýóɺ-êÒº¿p»¢»<br/><br/> »[ýéºùH|»<br/> »Íu»ä䩺LÊкsöþºvÐmºÎG4ºC঺ÔͺÕ<br/> º¹¶:»ñ&Rº*<br/> Ò:Ý¿9WÅEºÓo<br/> ºB’ƺP|_º)ïQ9O̺Üìº-ºÁrï¹ç<br/> ±ºð¹¯ºqHºIKº Verknüpftes Spektrum bei 0,519 Min.<br/> Ë<br/> ÁØsúË<br/> t/ä<br/> /ä<br/> /ä<br/><br/><br/><br/> îÂ@<br/> y¼»¾¯^¹¸:¸4êº=x»ØÃ1»¼-øºÿɺÓź[L»×<br/><br/> »£Êp»Õ@»¤(»ë𢹱w 95ºÍ9ÔºÓ೺OuºÔ<br/> ܹºm¼BºâÞå7ÛÍ9Mº,ºJq:ò49 jZºLÛº¬ëºÃi¹;ý:ì) º)vº¡ê¹xÕ½·?³º©ëÁºÀ<br/> ºó(<br/> ¹ …<br/> Verknüpftes Spektrum bei 86,756 Min.<br/> Ë<br/> ÁØsúË<br/> t/ä<br/> /ä<br/> /ä<br/><br/><br/><br/> ã!@<br/> ¡Ê<Læ<ä<#n<<g<³U<èx”<sw<¿`<Z=<§;6G<åO/<ñÈ÷;*ß<<br/> r<lf<br/> <«><<br/> é;òÙ;<br/> <â½Ä;²;ÿÐæ;¤ññ;°Í¹;¡´;ÛYÎ;?å;Þ¦ò;²ø§;hAe;°TÉ;ó÷Ì;dK;úºY;ÛýÀ;j8;ïkª;#G;¸Û;Öþ;<br/> Verknüpftes Spektrum bei 87,016 Min.<br/> Ë<br/> ÁØsúË<br/> t/ä<br/> /ä<br/> /ä<br/><br/><br/><br/> 0+@<br/> +1Ú<9}í<<I0<·¦<ú2<¬Çe<Nï<|î;32_<VK-<Gú;<br/> B <µ*<;µÖ;ÓÆ”<ss<«<7<br/> <½²ò;ç<àP<ãâ;4Å;vüö;ÑMà;·S;M;HÃà;¾cö;M¶ü;C;Ö[#;3Ó;*Ûæ;6;ýH;R±Ã;ÍN;í;j7;oÚ;ú;]</div></details></div></details></div></div> </details></div>
As expected the result is a list of 5 NDDataset objects, one for each file in the directory.
Additional options for reading directories
The read_dir/read function has additional options to control the behavior of the reading process:
Let’s see an example with the recursive option:
First we list files in all directories under DATADIR/irdata/subdir/:
[10]:
[str(item.relative_to(DATADIR)) for item in folder.glob("**/*.*")]
[10]:
['irdata/subdir/7_CZ0-100_Pd_102.SPA',
'irdata/subdir/TGAIR-unreadable.srs',
'irdata/subdir/7_CZ0-100_Pd_103.SPA',
'irdata/subdir/7_CZ0-100_Pd_104.SPA',
'irdata/subdir/7_CZ0-100_Pd_101.SPA',
'irdata/subdir/1-20/7_CZ0-100_Pd_4.SPA',
'irdata/subdir/1-20/7_CZ0-100_Pd_3.SPA',
'irdata/subdir/1-20/7_CZ0-100_Pd_5.SPA',
'irdata/subdir/20-50/7_CZ0-100_Pd_21.SPA']
The irdata/subdir/ directory contains two subdirectories, 1-20 and 20-50, with additional .spa files.
Now we read all files (a total of 9) in the DATADIR/irdata/subdir/ directory and its subdirectories:
[11]:
scp.read_dir(folder, recursive=True, merge=False)
[11]:
List (len=9, type=NDDataset)
0: NDDataset [7_CZ0-100 Pd_3] — float64, shape: (y:1, x:5549), a.u.
# Filename: 7_CZ0-100_Pd_3.SPA
2026-07-30 19:08:01+00:00> Data processing history from Omnic :
------------------------------------
Acquisition échantillon
<br/> Background acquis le Jeu Nov 29 17:13:06 2018 (GMT+01:00) <br/> Format Final : Absorbance <br/> Résolution: 4,000 de 649,9207 à 5999,7134 <br/> Roue de validation: 0 <br/> Roue porte écran atténuation: Vide <br/> Numéro Série du banc:ALK1100494</div></div></div>
<div class=”scp-output section”><details><summary> Data </summary> <div class=”scp-output section”><div class=”attr-name”> title</div><div>:</div><div class=”attr-value”> absorbance</div></div> <div class=”scp-output section”><div class=”attr-name”> values</div><div>:</div><div class=”attr-value”> … </div></div> <div class=’numeric’> [[ 1.245 1.245 … 1.311 1.307]] a.u.</div> <div class=”scp-output section”><div class=”attr-name”> shape</div><div>:</div><div class=”attr-value”> (y:1, x:5549)</div></div></details></div> <div class=”scp-output section”><details><summary> Dimension `x`</summary> <div class=”scp-output section”><div class=”attr-name”> size</div><div>:</div><div class=”attr-value”> 5549</div></div> <div class=”scp-output section”><div class=”attr-name”> title</div><div>:</div><div class=”attr-value”> wavenumbers</div></div> <div class=”scp-output section”><div class=”attr-name”> coordinates</div><div>:</div><div class=”attr-value”> <div class=’numeric’>[ 6000 5999 … 650.9 649.9] cm⁻¹</div></div></div></details></div> <div class=”scp-output section”><details><summary> Dimension `y`</summary> <div class=”scp-output section”><div class=”attr-name”> size</div><div>:</div><div class=”attr-value”> 1</div></div> <div class=”scp-output section”><div class=”attr-name”> title</div><div>:</div><div class=”attr-value”> acquisition timestamp (GMT)</div></div> <div class=”scp-output section”><div class=”attr-name”> coordinates</div><div>:</div><div class=”attr-value”> <div class=’numeric’>[1.544e+09] s</div></div></div> <div class=”scp-output section”><div class=”attr-name”> labels</div><div>:</div><div class=”attr-value”> … </div></div> <div class=’label’> [[ 2018-11-29 16:23:05+00:00]<br/> [ /home/runner/.spectrochempy/testdata/irdata/subdir/1-20/7_CZ0-100_Pd_3.SPA]]</div></details></div></details></div></div> <div class=’scp-output section’><div class=’scp-output’><details><summary>1: NDDataset [7_CZ0-100 Pd_4] — float64, shape: (y:1, x:5549), a.u.</summary><div class=”scp-output section”><div class=”attr-name”> name</div><div>:</div><div class=”attr-value”> 7_CZ0-100 Pd_4</div></div> <div class=”scp-output section”><div class=”attr-name”> author</div><div>:</div><div class=”attr-value”> runner@runnervmvrwv9</div></div> <div class=”scp-output section”><div class=”attr-name”> created</div><div>:</div><div class=”attr-value”> 2026-07-30 19:08:01+00:00</div></div> <div class=”scp-output section”><div class=”attr-name”> description</div><div>:</div><div class=”attr-value”> <div># Omnic name: 7_CZ0-100 Pd_4<br/> # Filename: 7_CZ0-100_Pd_4.SPA</div></div></div> <div class=”scp-output section”><div class=”attr-name”> history</div><div>:</div><div class=”attr-value”> <div>2026-07-30 19:08:01+00:00> Imported from spa file(s)<br/> 2026-07-30 19:08:01+00:00> Data processing history from Omnic :<br/> ————————————<br/> Acquisition échantillon
<br/> Background acquis le Jeu Nov 29 17:25:03 2018 (GMT+01:00) <br/> Format Final : Absorbance <br/> Résolution: 4,000 de 649,9207 à 5999,7134 <br/> Roue de validation: 0 <br/> Roue porte écran atténuation: Vide <br/> Numéro Série du banc:ALK1100494</div></div></div>
<div class=”scp-output section”><details><summary> Data </summary> <div class=”scp-output section”><div class=”attr-name”> title</div><div>:</div><div class=”attr-value”> absorbance</div></div> <div class=”scp-output section”><div class=”attr-name”> values</div><div>:</div><div class=”attr-value”> … </div></div> <div class=’numeric’> [[ 1.245 1.245 … 1.302 1.299]] a.u.</div> <div class=”scp-output section”><div class=”attr-name”> shape</div><div>:</div><div class=”attr-value”> (y:1, x:5549)</div></div></details></div> <div class=”scp-output section”><details><summary> Dimension `x`</summary> <div class=”scp-output section”><div class=”attr-name”> size</div><div>:</div><div class=”attr-value”> 5549</div></div> <div class=”scp-output section”><div class=”attr-name”> title</div><div>:</div><div class=”attr-value”> wavenumbers</div></div> <div class=”scp-output section”><div class=”attr-name”> coordinates</div><div>:</div><div class=”attr-value”> <div class=’numeric’>[ 6000 5999 … 650.9 649.9] cm⁻¹</div></div></div></details></div> <div class=”scp-output section”><details><summary> Dimension `y`</summary> <div class=”scp-output section”><div class=”attr-name”> size</div><div>:</div><div class=”attr-value”> 1</div></div> <div class=”scp-output section”><div class=”attr-name”> title</div><div>:</div><div class=”attr-value”> acquisition timestamp (GMT)</div></div> <div class=”scp-output section”><div class=”attr-name”> coordinates</div><div>:</div><div class=”attr-value”> <div class=’numeric’>[1.544e+09] s</div></div></div> <div class=”scp-output section”><div class=”attr-name”> labels</div><div>:</div><div class=”attr-value”> … </div></div> <div class=’label’> [[ 2018-11-29 16:35:00+00:00]<br/> [ /home/runner/.spectrochempy/testdata/irdata/subdir/1-20/7_CZ0-100_Pd_4.SPA]]</div></details></div></details></div></div> <div class=’scp-output section’><div class=’scp-output’><details><summary>2: NDDataset [7_CZ0-100 Pd_5] — float64, shape: (y:1, x:5549), a.u.</summary><div class=”scp-output section”><div class=”attr-name”> name</div><div>:</div><div class=”attr-value”> 7_CZ0-100 Pd_5</div></div> <div class=”scp-output section”><div class=”attr-name”> author</div><div>:</div><div class=”attr-value”> runner@runnervmvrwv9</div></div> <div class=”scp-output section”><div class=”attr-name”> created</div><div>:</div><div class=”attr-value”> 2026-07-30 19:08:01+00:00</div></div> <div class=”scp-output section”><div class=”attr-name”> description</div><div>:</div><div class=”attr-value”> <div># Omnic name: 7_CZ0-100 Pd_5<br/> # Filename: 7_CZ0-100_Pd_5.SPA</div></div></div> <div class=”scp-output section”><div class=”attr-name”> history</div><div>:</div><div class=”attr-value”> <div>2026-07-30 19:08:01+00:00> Imported from spa file(s)<br/> 2026-07-30 19:08:01+00:00> Data processing history from Omnic :<br/> ————————————<br/> Acquisition échantillon
<br/> Background acquis le Jeu Nov 29 17:36:59 2018 (GMT+01:00) <br/> Format Final : Absorbance <br/> Résolution: 4,000 de 649,9207 à 5999,7134 <br/> Roue de validation: 0 <br/> Roue porte écran atténuation: Vide <br/> Numéro Série du banc:ALK1100494</div></div></div>
<div class=”scp-output section”><details><summary> Data </summary> <div class=”scp-output section”><div class=”attr-name”> title</div><div>:</div><div class=”attr-value”> absorbance</div></div> <div class=”scp-output section”><div class=”attr-name”> values</div><div>:</div><div class=”attr-value”> … </div></div> <div class=’numeric’> [[ 1.236 1.235 … 1.3 1.296]] a.u.</div> <div class=”scp-output section”><div class=”attr-name”> shape</div><div>:</div><div class=”attr-value”> (y:1, x:5549)</div></div></details></div> <div class=”scp-output section”><details><summary> Dimension `x`</summary> <div class=”scp-output section”><div class=”attr-name”> size</div><div>:</div><div class=”attr-value”> 5549</div></div> <div class=”scp-output section”><div class=”attr-name”> title</div><div>:</div><div class=”attr-value”> wavenumbers</div></div> <div class=”scp-output section”><div class=”attr-name”> coordinates</div><div>:</div><div class=”attr-value”> <div class=’numeric’>[ 6000 5999 … 650.9 649.9] cm⁻¹</div></div></div></details></div> <div class=”scp-output section”><details><summary> Dimension `y`</summary> <div class=”scp-output section”><div class=”attr-name”> size</div><div>:</div><div class=”attr-value”> 1</div></div> <div class=”scp-output section”><div class=”attr-name”> title</div><div>:</div><div class=”attr-value”> acquisition timestamp (GMT)</div></div> <div class=”scp-output section”><div class=”attr-name”> coordinates</div><div>:</div><div class=”attr-value”> <div class=’numeric’>[1.544e+09] s</div></div></div> <div class=”scp-output section”><div class=”attr-name”> labels</div><div>:</div><div class=”attr-value”> … </div></div> <div class=’label’> [[ 2018-11-29 16:46:56+00:00]<br/> [ /home/runner/.spectrochempy/testdata/irdata/subdir/1-20/7_CZ0-100_Pd_5.SPA]]</div></details></div></details></div></div> <div class=’scp-output section’><div class=’scp-output’><details><summary>3: NDDataset [7_CZ0-100 Pd_21] — float64, shape: (y:1, x:5549), a.u.</summary><div class=”scp-output section”><div class=”attr-name”> name</div><div>:</div><div class=”attr-value”> 7_CZ0-100 Pd_21</div></div> <div class=”scp-output section”><div class=”attr-name”> author</div><div>:</div><div class=”attr-value”> runner@runnervmvrwv9</div></div> <div class=”scp-output section”><div class=”attr-name”> created</div><div>:</div><div class=”attr-value”> 2026-07-30 19:08:01+00:00</div></div> <div class=”scp-output section”><div class=”attr-name”> description</div><div>:</div><div class=”attr-value”> <div># Omnic name: 7_CZ0-100 Pd_21<br/> # Filename: 7_CZ0-100_Pd_21.SPA</div></div></div> <div class=”scp-output section”><div class=”attr-name”> history</div><div>:</div><div class=”attr-value”> <div>2026-07-30 19:08:01+00:00> Imported from spa file(s)<br/> 2026-07-30 19:08:01+00:00> Data processing history from Omnic :<br/> ————————————<br/> Acquisition échantillon
<br/> Background acquis le Jeu Nov 29 20:48:01 2018 (GMT+01:00) <br/> Format Final : Absorbance <br/> Résolution: 4,000 de 649,9207 à 5999,7134 <br/> Roue de validation: 0 <br/> Roue porte écran atténuation: Vide <br/> Numéro Série du banc:ALK1100494</div></div></div>
<div class=”scp-output section”><details><summary> Data </summary> <div class=”scp-output section”><div class=”attr-name”> title</div><div>:</div><div class=”attr-value”> absorbance</div></div> <div class=”scp-output section”><div class=”attr-name”> values</div><div>:</div><div class=”attr-value”> … </div></div> <div class=’numeric’> [[ 1.234 1.233 … 1.291 1.288]] a.u.</div> <div class=”scp-output section”><div class=”attr-name”> shape</div><div>:</div><div class=”attr-value”> (y:1, x:5549)</div></div></details></div> <div class=”scp-output section”><details><summary> Dimension `x`</summary> <div class=”scp-output section”><div class=”attr-name”> size</div><div>:</div><div class=”attr-value”> 5549</div></div> <div class=”scp-output section”><div class=”attr-name”> title</div><div>:</div><div class=”attr-value”> wavenumbers</div></div> <div class=”scp-output section”><div class=”attr-name”> coordinates</div><div>:</div><div class=”attr-value”> <div class=’numeric’>[ 6000 5999 … 650.9 649.9] cm⁻¹</div></div></div></details></div> <div class=”scp-output section”><details><summary> Dimension `y`</summary> <div class=”scp-output section”><div class=”attr-name”> size</div><div>:</div><div class=”attr-value”> 1</div></div> <div class=”scp-output section”><div class=”attr-name”> title</div><div>:</div><div class=”attr-value”> acquisition timestamp (GMT)</div></div> <div class=”scp-output section”><div class=”attr-name”> coordinates</div><div>:</div><div class=”attr-value”> <div class=’numeric’>[1.544e+09] s</div></div></div> <div class=”scp-output section”><div class=”attr-name”> labels</div><div>:</div><div class=”attr-value”> … </div></div> <div class=’label’> [[ 2018-11-29 19:58:01+00:00]<br/> [ /home/runner/.spectrochempy/testdata/irdata/subdir/20-50/7_CZ0-100_Pd_21.SPA]]</div></details></div></details></div></div> <div class=’scp-output section’><div class=’scp-output’><details><summary>4: NDDataset [7_CZ0-100 Pd_101] — float64, shape: (y:1, x:5549), a.u.</summary><div class=”scp-output section”><div class=”attr-name”> name</div><div>:</div><div class=”attr-value”> 7_CZ0-100 Pd_101</div></div> <div class=”scp-output section”><div class=”attr-name”> author</div><div>:</div><div class=”attr-value”> runner@runnervmvrwv9</div></div> <div class=”scp-output section”><div class=”attr-name”> created</div><div>:</div><div class=”attr-value”> 2026-07-30 19:08:01+00:00</div></div> <div class=”scp-output section”><div class=”attr-name”> description</div><div>:</div><div class=”attr-value”> <div># Omnic name: 7_CZ0-100 Pd_101<br/> # Filename: 7_CZ0-100_Pd_101.SPA</div></div></div> <div class=”scp-output section”><div class=”attr-name”> history</div><div>:</div><div class=”attr-value”> <div>2026-07-30 19:08:01+00:00> Imported from spa file(s)<br/> 2026-07-30 19:08:01+00:00> Data processing history from Omnic :<br/> ————————————<br/> Acquisition échantillon
<br/> Background acquis le Ven Nov 30 08:03:45 2018 (GMT+01:00) <br/> Format Final : Absorbance <br/> Résolution: 4,000 de 649,9207 à 5999,7134 <br/> Roue de validation: 0 <br/> Roue porte écran atténuation: Vide <br/> Numéro Série du banc:ALK1100494</div></div></div>
<div class=”scp-output section”><details><summary> Data </summary> <div class=”scp-output section”><div class=”attr-name”> title</div><div>:</div><div class=”attr-value”> absorbance</div></div> <div class=”scp-output section”><div class=”attr-name”> values</div><div>:</div><div class=”attr-value”> … </div></div> <div class=’numeric’> [[ 1.544 1.543 … 2.1 2.091]] a.u.</div> <div class=”scp-output section”><div class=”attr-name”> shape</div><div>:</div><div class=”attr-value”> (y:1, x:5549)</div></div></details></div> <div class=”scp-output section”><details><summary> Dimension `x`</summary> <div class=”scp-output section”><div class=”attr-name”> size</div><div>:</div><div class=”attr-value”> 5549</div></div> <div class=”scp-output section”><div class=”attr-name”> title</div><div>:</div><div class=”attr-value”> wavenumbers</div></div> <div class=”scp-output section”><div class=”attr-name”> coordinates</div><div>:</div><div class=”attr-value”> <div class=’numeric’>[ 6000 5999 … 650.9 649.9] cm⁻¹</div></div></div></details></div> <div class=”scp-output section”><details><summary> Dimension `y`</summary> <div class=”scp-output section”><div class=”attr-name”> size</div><div>:</div><div class=”attr-value”> 1</div></div> <div class=”scp-output section”><div class=”attr-name”> title</div><div>:</div><div class=”attr-value”> acquisition timestamp (GMT)</div></div> <div class=”scp-output section”><div class=”attr-name”> coordinates</div><div>:</div><div class=”attr-value”> <div class=’numeric’>[1.544e+09] s</div></div></div> <div class=”scp-output section”><div class=”attr-name”> labels</div><div>:</div><div class=”attr-value”> … </div></div> <div class=’label’> [[ 2018-11-30 07:10:57+00:00]<br/> [ /home/runner/.spectrochempy/testdata/irdata/subdir/7_CZ0-100_Pd_101.SPA]]</div></details></div></details></div></div> <div class=’scp-output section’><div class=’scp-output’><details><summary>5: NDDataset [7_CZ0-100 Pd_102] — float64, shape: (y:1, x:5549), a.u.</summary><div class=”scp-output section”><div class=”attr-name”> name</div><div>:</div><div class=”attr-value”> 7_CZ0-100 Pd_102</div></div> <div class=”scp-output section”><div class=”attr-name”> author</div><div>:</div><div class=”attr-value”> runner@runnervmvrwv9</div></div> <div class=”scp-output section”><div class=”attr-name”> created</div><div>:</div><div class=”attr-value”> 2026-07-30 19:08:01+00:00</div></div> <div class=”scp-output section”><div class=”attr-name”> description</div><div>:</div><div class=”attr-value”> <div># Omnic name: 7_CZ0-100 Pd_102<br/> # Filename: 7_CZ0-100_Pd_102.SPA</div></div></div> <div class=”scp-output section”><div class=”attr-name”> history</div><div>:</div><div class=”attr-value”> <div>2026-07-30 19:08:01+00:00> Imported from spa file(s)<br/> 2026-07-30 19:08:01+00:00> Data processing history from Omnic :<br/> ————————————<br/> Acquisition échantillon
<br/> Background acquis le Ven Nov 30 08:12:56 2018 (GMT+01:00) <br/> Format Final : Absorbance <br/> Résolution: 4,000 de 649,9207 à 5999,7134 <br/> Roue de validation: 0 <br/> Roue porte écran atténuation: Vide <br/> Numéro Série du banc:ALK1100494</div></div></div>
<div class=”scp-output section”><details><summary> Data </summary> <div class=”scp-output section”><div class=”attr-name”> title</div><div>:</div><div class=”attr-value”> absorbance</div></div> <div class=”scp-output section”><div class=”attr-name”> values</div><div>:</div><div class=”attr-value”> … </div></div> <div class=’numeric’> [[ 1.552 1.553 … 2.161 2.109]] a.u.</div> <div class=”scp-output section”><div class=”attr-name”> shape</div><div>:</div><div class=”attr-value”> (y:1, x:5549)</div></div></details></div> <div class=”scp-output section”><details><summary> Dimension `x`</summary> <div class=”scp-output section”><div class=”attr-name”> size</div><div>:</div><div class=”attr-value”> 5549</div></div> <div class=”scp-output section”><div class=”attr-name”> title</div><div>:</div><div class=”attr-value”> wavenumbers</div></div> <div class=”scp-output section”><div class=”attr-name”> coordinates</div><div>:</div><div class=”attr-value”> <div class=’numeric’>[ 6000 5999 … 650.9 649.9] cm⁻¹</div></div></div></details></div> <div class=”scp-output section”><details><summary> Dimension `y`</summary> <div class=”scp-output section”><div class=”attr-name”> size</div><div>:</div><div class=”attr-value”> 1</div></div> <div class=”scp-output section”><div class=”attr-name”> title</div><div>:</div><div class=”attr-value”> acquisition timestamp (GMT)</div></div> <div class=”scp-output section”><div class=”attr-name”> coordinates</div><div>:</div><div class=”attr-value”> <div class=’numeric’>[1.544e+09] s</div></div></div> <div class=”scp-output section”><div class=”attr-name”> labels</div><div>:</div><div class=”attr-value”> … </div></div> <div class=’label’> [[ 2018-11-30 07:22:52+00:00]<br/> [ /home/runner/.spectrochempy/testdata/irdata/subdir/7_CZ0-100_Pd_102.SPA]]</div></details></div></details></div></div> <div class=’scp-output section’><div class=’scp-output’><details><summary>6: NDDataset [7_CZ0-100 Pd_103] — float64, shape: (y:1, x:5549), a.u.</summary><div class=”scp-output section”><div class=”attr-name”> name</div><div>:</div><div class=”attr-value”> 7_CZ0-100 Pd_103</div></div> <div class=”scp-output section”><div class=”attr-name”> author</div><div>:</div><div class=”attr-value”> runner@runnervmvrwv9</div></div> <div class=”scp-output section”><div class=”attr-name”> created</div><div>:</div><div class=”attr-value”> 2026-07-30 19:08:01+00:00</div></div> <div class=”scp-output section”><div class=”attr-name”> description</div><div>:</div><div class=”attr-value”> <div># Omnic name: 7_CZ0-100 Pd_103<br/> # Filename: 7_CZ0-100_Pd_103.SPA</div></div></div> <div class=”scp-output section”><div class=”attr-name”> history</div><div>:</div><div class=”attr-value”> <div>2026-07-30 19:08:01+00:00> Imported from spa file(s)<br/> 2026-07-30 19:08:01+00:00> Data processing history from Omnic :<br/> ————————————<br/> Acquisition échantillon
<br/> Background acquis le Ven Nov 30 08:24:51 2018 (GMT+01:00) <br/> Format Final : Absorbance <br/> Résolution: 4,000 de 649,9207 à 5999,7134 <br/> Roue de validation: 0 <br/> Roue porte écran atténuation: Vide <br/> Numéro Série du banc:ALK1100494</div></div></div>
<div class=”scp-output section”><details><summary> Data </summary> <div class=”scp-output section”><div class=”attr-name”> title</div><div>:</div><div class=”attr-value”> absorbance</div></div> <div class=”scp-output section”><div class=”attr-name”> values</div><div>:</div><div class=”attr-value”> … </div></div> <div class=’numeric’> [[ 1.461 1.46 … 2.087 2.088]] a.u.</div> <div class=”scp-output section”><div class=”attr-name”> shape</div><div>:</div><div class=”attr-value”> (y:1, x:5549)</div></div></details></div> <div class=”scp-output section”><details><summary> Dimension `x`</summary> <div class=”scp-output section”><div class=”attr-name”> size</div><div>:</div><div class=”attr-value”> 5549</div></div> <div class=”scp-output section”><div class=”attr-name”> title</div><div>:</div><div class=”attr-value”> wavenumbers</div></div> <div class=”scp-output section”><div class=”attr-name”> coordinates</div><div>:</div><div class=”attr-value”> <div class=’numeric’>[ 6000 5999 … 650.9 649.9] cm⁻¹</div></div></div></details></div> <div class=”scp-output section”><details><summary> Dimension `y`</summary> <div class=”scp-output section”><div class=”attr-name”> size</div><div>:</div><div class=”attr-value”> 1</div></div> <div class=”scp-output section”><div class=”attr-name”> title</div><div>:</div><div class=”attr-value”> acquisition timestamp (GMT)</div></div> <div class=”scp-output section”><div class=”attr-name”> coordinates</div><div>:</div><div class=”attr-value”> <div class=’numeric’>[1.544e+09] s</div></div></div> <div class=”scp-output section”><div class=”attr-name”> labels</div><div>:</div><div class=”attr-value”> … </div></div> <div class=’label’> [[ 2018-11-30 07:34:49+00:00]<br/> [ /home/runner/.spectrochempy/testdata/irdata/subdir/7_CZ0-100_Pd_103.SPA]]</div></details></div></details></div></div> <div class=’scp-output section’><div class=’scp-output’><details><summary>7: NDDataset [7_CZ0-100 Pd_104] — float64, shape: (y:1, x:5549), a.u.</summary><div class=”scp-output section”><div class=”attr-name”> name</div><div>:</div><div class=”attr-value”> 7_CZ0-100 Pd_104</div></div> <div class=”scp-output section”><div class=”attr-name”> author</div><div>:</div><div class=”attr-value”> runner@runnervmvrwv9</div></div> <div class=”scp-output section”><div class=”attr-name”> created</div><div>:</div><div class=”attr-value”> 2026-07-30 19:08:01+00:00</div></div> <div class=”scp-output section”><div class=”attr-name”> description</div><div>:</div><div class=”attr-value”> <div># Omnic name: 7_CZ0-100 Pd_104<br/> # Filename: 7_CZ0-100_Pd_104.SPA</div></div></div> <div class=”scp-output section”><div class=”attr-name”> history</div><div>:</div><div class=”attr-value”> <div>2026-07-30 19:08:01+00:00> Imported from spa file(s)<br/> 2026-07-30 19:08:01+00:00> Data processing history from Omnic :<br/> ————————————<br/> Acquisition échantillon
<br/> Background acquis le Ven Nov 30 08:36:47 2018 (GMT+01:00) <br/> Format Final : Absorbance <br/> Résolution: 4,000 de 649,9207 à 5999,7134 <br/> Roue de validation: 0 <br/> Roue porte écran atténuation: Vide <br/> Numéro Série du banc:ALK1100494</div></div></div>
<div class=”scp-output section”><details><summary> Data </summary> <div class=”scp-output section”><div class=”attr-name”> title</div><div>:</div><div class=”attr-value”> absorbance</div></div> <div class=”scp-output section”><div class=”attr-name”> values</div><div>:</div><div class=”attr-value”> … </div></div> <div class=’numeric’> [[ 1.448 1.447 … 2.071 2.065]] a.u.</div> <div class=”scp-output section”><div class=”attr-name”> shape</div><div>:</div><div class=”attr-value”> (y:1, x:5549)</div></div></details></div> <div class=”scp-output section”><details><summary> Dimension `x`</summary> <div class=”scp-output section”><div class=”attr-name”> size</div><div>:</div><div class=”attr-value”> 5549</div></div> <div class=”scp-output section”><div class=”attr-name”> title</div><div>:</div><div class=”attr-value”> wavenumbers</div></div> <div class=”scp-output section”><div class=”attr-name”> coordinates</div><div>:</div><div class=”attr-value”> <div class=’numeric’>[ 6000 5999 … 650.9 649.9] cm⁻¹</div></div></div></details></div> <div class=”scp-output section”><details><summary> Dimension `y`</summary> <div class=”scp-output section”><div class=”attr-name”> size</div><div>:</div><div class=”attr-value”> 1</div></div> <div class=”scp-output section”><div class=”attr-name”> title</div><div>:</div><div class=”attr-value”> acquisition timestamp (GMT)</div></div> <div class=”scp-output section”><div class=”attr-name”> coordinates</div><div>:</div><div class=”attr-value”> <div class=’numeric’>[1.544e+09] s</div></div></div> <div class=”scp-output section”><div class=”attr-name”> labels</div><div>:</div><div class=”attr-value”> … </div></div> <div class=’label’> [[ 2018-11-30 07:46:44+00:00]<br/> [ /home/runner/.spectrochempy/testdata/irdata/subdir/7_CZ0-100_Pd_104.SPA]]</div></details></div></details></div></div> <div class=’scp-output section’><div class=’scp-output’><details><summary>8: NDDataset [dd_6.6_19039_538] — float64, shape: (y:335, x:1868), a.u.</summary><div class=”scp-output section”><div class=”attr-name”> name</div><div>:</div><div class=”attr-value”> dd_6.6_19039_538</div></div> <div class=”scp-output section”><div class=”attr-name”> author</div><div>:</div><div class=”attr-value”> runner@runnervmvrwv9</div></div> <div class=”scp-output section”><div class=”attr-name”> created</div><div>:</div><div class=”attr-value”> 2026-07-30 19:08:01+00:00</div></div> <div class=”scp-output section”><div class=”attr-name”> description</div><div>:</div><div class=”attr-value”> <div>Dataset from omnic srs file.</div></div></div> <div class=”scp-output section”><details><summary> Data </summary> <div class=”scp-output section”><div class=”attr-name”> title</div><div>:</div><div class=”attr-value”> absorbance</div></div> <div class=”scp-output section”><div class=”attr-name”> values</div><div>:</div><div class=”attr-value”> … </div></div> <div class=’numeric’> [[-0.007524 -0.0003661 … 8.291e-05 9.239e-05]<br/> [-0.009306 -0.002252 … 0.0001051 0.000107]<br/> …<br/> [ 0.02474 0.02814 … 0.002962 0.002967]<br/> [ 0.02663 0.02899 … 0.002907 0.002916]] a.u.</div> <div class=”scp-output section”><div class=”attr-name”> shape</div><div>:</div><div class=”attr-value”> (y:335, x:1868)</div></div></details></div> <div class=”scp-output section”><details><summary> Dimension `x`</summary> <div class=”scp-output section”><div class=”attr-name”> size</div><div>:</div><div class=”attr-value”> 1868</div></div> <div class=”scp-output section”><div class=”attr-name”> title</div><div>:</div><div class=”attr-value”> wavenumbers</div></div> <div class=”scp-output section”><div class=”attr-name”> coordinates</div><div>:</div><div class=”attr-value”> <div class=’numeric’>[ 4000 3998 … 401.1 399.2] cm⁻¹</div></div></div></details></div> <div class=”scp-output section”><details><summary> Dimension `y`</summary> <div class=”scp-output section”><div class=”attr-name”> size</div><div>:</div><div class=”attr-value”> 335</div></div> <div class=”scp-output section”><div class=”attr-name”> title</div><div>:</div><div class=”attr-value”> Time</div></div> <div class=”scp-output section”><div class=”attr-name”> coordinates</div><div>:</div><div class=”attr-value”> <div class=’numeric’>[ 0.26 0.52 … 86.76 87.02] min</div></div></div> <div class=”scp-output section”><div class=”attr-name”> labels</div><div>:</div><div class=”attr-value”> … </div></div> <div class=’label’> [ Verknüpftes Spektrum bei 0,260 Min.<br/> Ë<br/> ÁØsúË<br/> t/ä<br/> /ä<br/> /ä<br/><br/><br/><br/> ±½@<br/> ö»Îö¿¹·j»D»t4»*<br/> »Ý©S»£°»ýóɺ-êÒº¿p»¢»<br/><br/> »[ýéºùH|»<br/> »Íu»ä䩺LÊкsöþºvÐmºÎG4ºC঺ÔͺÕ<br/> º¹¶:»ñ&Rº*<br/> Ò:Ý¿9WÅEºÓo<br/> ºB’ƺP|_º)ïQ9O̺Üìº-ºÁrï¹ç<br/> ±ºð¹¯ºqHºIKº Verknüpftes Spektrum bei 0,519 Min.<br/> Ë<br/> ÁØsúË<br/> t/ä<br/> /ä<br/> /ä<br/><br/><br/><br/> îÂ@<br/> y¼»¾¯^¹¸:¸4êº=x»ØÃ1»¼-øºÿɺÓź[L»×<br/><br/> »£Êp»Õ@»¤(»ë𢹱w 95ºÍ9ÔºÓ೺OuºÔ<br/> ܹºm¼BºâÞå7ÛÍ9Mº,ºJq:ò49 jZºLÛº¬ëºÃi¹;ý:ì) º)vº¡ê¹xÕ½·?³º©ëÁºÀ<br/> ºó(<br/> ¹ …<br/> Verknüpftes Spektrum bei 86,756 Min.<br/> Ë<br/> ÁØsúË<br/> t/ä<br/> /ä<br/> /ä<br/><br/><br/><br/> ã!@<br/> ¡Ê<Læ<ä<#n<<g<³U<èx”<sw<¿`<Z=<§;6G<åO/<ñÈ÷;*ß<<br/> r<lf<br/> <«><<br/> é;òÙ;<br/> <â½Ä;²;ÿÐæ;¤ññ;°Í¹;¡´;ÛYÎ;?å;Þ¦ò;²ø§;hAe;°TÉ;ó÷Ì;dK;úºY;ÛýÀ;j8;ïkª;#G;¸Û;Öþ;<br/> Verknüpftes Spektrum bei 87,016 Min.<br/> Ë<br/> ÁØsúË<br/> t/ä<br/> /ä<br/> /ä<br/><br/><br/><br/> 0+@<br/> +1Ú<9}í<<I0<·¦<ú2<¬Çe<Nï<|î;32_<VK-<Gú;<br/> B <µ*<;µÖ;ÓÆ”<ss<«<7<br/> <½²ò;ç<àP<ãâ;4Å;vüö;ÑMà;·S;M;HÃà;¾cö;M¶ü;C;Ö[#;3Ó;*Ûæ;6;ýH;R±Ã;ÍN;í;j7;oÚ;ú;]</div></details></div></details></div></div> </details></div>
and we allow merging them:
[12]:
scp.read_dir(folder, recursive=True)
[12]:
List (len=2, type=NDDataset)
0: NDDataset [dd_6.6_19039_538] — float64, shape: (y:335, x:1868), a.u.
( dd_6.6_19039_538 )
2026-07-30 19:08:01+00:00> Merged from several files
Data
[-0.009306 -0.002252 ... 0.0001051 0.000107]
...
[ 0.02474 0.02814 ... 0.002962 0.002967]
[ 0.02663 0.02899 ... 0.002907 0.002916]] a.u.
Dimension `x`
Dimension `y`
Ë
ÁØsúË
t/ä
/ä
/ä
±½@
ö»Îö¿¹·j»D»t4»*
»Ý©S»£°»ýóɺ-êÒº¿p»¢»
»[ýéºùH|»
»Íu»ä䩺LÊкsöþºvÐmºÎG4ºC঺ÔͺÕ
º¹¶:»ñ&Rº*
Ò:Ý¿9WÅEºÓo
ºB'ƺP|_º)ïQ9O̺Üìº-ºÁrï¹ç
±ºð¹¯ºqHºIKº Verknüpftes Spektrum bei 0,519 Min.
Ë
ÁØsúË
t/ä
/ä
/ä
îÂ@
y¼»¾¯^¹¸:¸4êº=x»ØÃ1»¼-øºÿɺÓź[L»×
»£Êp»Õ@»¤(»ë𢹱w 95ºÍ9ÔºÓ೺OuºÔ
ܹºm¼BºâÞå7ÛÍ9Mº,ºJq:ò49 jZºLÛº¬ëºÃi¹;ý:ì) º)vº¡ê¹xÕ½·?³º©ëÁºÀ
ºó(
¹ ...
Verknüpftes Spektrum bei 86,756 Min.
Ë
ÁØsúË
t/ä
/ä
/ä
ã!@
¡Ê
é;òÙ;\
<â½Ä;²;ÿÐæ;¤ññ;°Í¹;¡´;ÛYÎ;?å;Þ¦ò;²ø§;hAe;°TÉ;ó÷Ì;dK;úºY;ÛýÀ;j8;ïkª;#G;¸Û;Öþ;
Verknüpftes Spektrum bei 87,016 Min.
Ë
ÁØsúË
t/ä
/ä
/ä
0+@
+1Ú<9}í<
1: NDDataset [merged [omnic]] — float64, shape: (y:8, x:5549), a.u.
( merged [omnic] )
2026-07-30 19:08:01+00:00> Merged from several files
Data
[ 1.245 1.245 ... 1.302 1.299]
...
[ 1.461 1.46 ... 2.087 2.088]
[ 1.448 1.447 ... 2.071 2.065]] a.u.
Dimension `x`
Dimension `y`
[ /home/runner/.spectrochempy/testdata/irdata/subdir/1-20/7_CZ0-100_Pd_3.SPA
/home/runner/.spectrochempy/testdata/irdata/subdir/1-20/7_CZ0-100_Pd_4.SPA ...
/home/runner/.spectrochempy/testdata/irdata/subdir/7_CZ0-100_Pd_103.SPA
/home/runner/.spectrochempy/testdata/irdata/subdir/7_CZ0-100_Pd_104.SPA]]
As the 8 .spa files are compatible, they are merged into a single NDDataset object. The .srs file is read separately.
A specific reader can equivalently read the folder recursively:
[13]:
scp.read_omnic(folder, recursive=True)
[13]:
List (len=2, type=NDDataset)
0: NDDataset [dd_6.6_19039_538] — float64, shape: (y:335, x:1868), a.u.
( dd_6.6_19039_538 )
2026-07-30 19:08:01+00:00> Merged from several files
Data
[-0.009306 -0.002252 ... 0.0001051 0.000107]
...
[ 0.02474 0.02814 ... 0.002962 0.002967]
[ 0.02663 0.02899 ... 0.002907 0.002916]] a.u.
Dimension `x`
Dimension `y`
Ë
ÁØsúË
t/ä
/ä
/ä
±½@
ö»Îö¿¹·j»D»t4»*
»Ý©S»£°»ýóɺ-êÒº¿p»¢»
»[ýéºùH|»
»Íu»ä䩺LÊкsöþºvÐmºÎG4ºC঺ÔͺÕ
º¹¶:»ñ&Rº*
Ò:Ý¿9WÅEºÓo
ºB'ƺP|_º)ïQ9O̺Üìº-ºÁrï¹ç
±ºð¹¯ºqHºIKº Verknüpftes Spektrum bei 0,519 Min.
Ë
ÁØsúË
t/ä
/ä
/ä
îÂ@
y¼»¾¯^¹¸:¸4êº=x»ØÃ1»¼-øºÿɺÓź[L»×
»£Êp»Õ@»¤(»ë𢹱w 95ºÍ9ÔºÓ೺OuºÔ
ܹºm¼BºâÞå7ÛÍ9Mº,ºJq:ò49 jZºLÛº¬ëºÃi¹;ý:ì) º)vº¡ê¹xÕ½·?³º©ëÁºÀ
ºó(
¹ ...
Verknüpftes Spektrum bei 86,756 Min.
Ë
ÁØsúË
t/ä
/ä
/ä
ã!@
¡Ê
é;òÙ;\
<â½Ä;²;ÿÐæ;¤ññ;°Í¹;¡´;ÛYÎ;?å;Þ¦ò;²ø§;hAe;°TÉ;ó÷Ì;dK;úºY;ÛýÀ;j8;ïkª;#G;¸Û;Öþ;
Verknüpftes Spektrum bei 87,016 Min.
Ë
ÁØsúË
t/ä
/ä
/ä
0+@
+1Ú<9}í<
1: NDDataset [merged [omnic]] — float64, shape: (y:8, x:5549), a.u.
( merged [omnic] )
2026-07-30 19:08:01+00:00> Merged from several files
Data
[ 1.245 1.245 ... 1.302 1.299]
...
[ 1.461 1.46 ... 2.087 2.088]
[ 1.448 1.447 ... 2.071 2.065]] a.u.
Dimension `x`
Dimension `y`
[ /home/runner/.spectrochempy/testdata/irdata/subdir/1-20/7_CZ0-100_Pd_3.SPA
/home/runner/.spectrochempy/testdata/irdata/subdir/1-20/7_CZ0-100_Pd_4.SPA ...
/home/runner/.spectrochempy/testdata/irdata/subdir/7_CZ0-100_Pd_103.SPA
/home/runner/.spectrochempy/testdata/irdata/subdir/7_CZ0-100_Pd_104.SPA]]
Let’s see an example with the pattern option:
We read all files in the DATADIR/irdata/subdir/ directory and its subdirectories, but only those with the .spa extension and whose name contains the string 4:
[14]:
scp.read_dir(folder, recursive=True, pattern="*4*")
[14]:
NDDataset [merged [omnic]] — float64, shape: (y:2, x:5549), a.u.
( 7_CZ0-100 Pd_4, 7_CZ0-100 Pd_104 )
2026-07-30 19:08:02+00:00> Merged from several files
Data
[ 1.448 1.447 ... 2.071 2.065]] a.u.
Dimension `x`
Dimension `y`
[ /home/runner/.spectrochempy/testdata/irdata/subdir/1-20/7_CZ0-100_Pd_4.SPA
/home/runner/.spectrochempy/testdata/irdata/subdir/7_CZ0-100_Pd_104.SPA]]
The above pattern *4* matches only two files, which are then merged and returned as a single NDDataset object.
This pattern option is obviously interesting to select only a type of extension:
[15]:
scp.read_dir(folder, recursive=True, pattern="*.spa")
[15]:
NDDataset [merged [omnic]] — float64, shape: (y:8, x:5549), a.u.
( 7_CZ0-100 Pd_3, 7_CZ0-100 Pd_4, 7_CZ0-100 Pd_5, 7_CZ0-100 Pd_21, 7_CZ0-100 Pd_101, 7_CZ0-100 Pd_102, 7_CZ0-100 Pd_103, 7_CZ0-100 Pd_104 )
2026-07-30 19:08:02+00:00> Merged from several files
Data
[ 1.245 1.245 ... 1.302 1.299]
...
[ 1.461 1.46 ... 2.087 2.088]
[ 1.448 1.447 ... 2.071 2.065]] a.u.
Dimension `x`
Dimension `y`
[ /home/runner/.spectrochempy/testdata/irdata/subdir/1-20/7_CZ0-100_Pd_3.SPA
/home/runner/.spectrochempy/testdata/irdata/subdir/1-20/7_CZ0-100_Pd_4.SPA ...
/home/runner/.spectrochempy/testdata/irdata/subdir/7_CZ0-100_Pd_103.SPA
/home/runner/.spectrochempy/testdata/irdata/subdir/7_CZ0-100_Pd_104.SPA]]
[16]:
scp.read(folder, recursive=True, pattern="*.spa") # equivalent
[16]:
NDDataset [merged [omnic]] — float64, shape: (y:8, x:5549), a.u.
( 7_CZ0-100 Pd_3, 7_CZ0-100 Pd_4, 7_CZ0-100 Pd_5, 7_CZ0-100 Pd_21, 7_CZ0-100 Pd_101, 7_CZ0-100 Pd_102, 7_CZ0-100 Pd_103, 7_CZ0-100 Pd_104 )
2026-07-30 19:08:02+00:00> Merged from several files
Data
[ 1.245 1.245 ... 1.302 1.299]
...
[ 1.461 1.46 ... 2.087 2.088]
[ 1.448 1.447 ... 2.071 2.065]] a.u.
Dimension `x`
Dimension `y`
[ /home/runner/.spectrochempy/testdata/irdata/subdir/1-20/7_CZ0-100_Pd_3.SPA
/home/runner/.spectrochempy/testdata/irdata/subdir/1-20/7_CZ0-100_Pd_4.SPA ...
/home/runner/.spectrochempy/testdata/irdata/subdir/7_CZ0-100_Pd_103.SPA
/home/runner/.spectrochempy/testdata/irdata/subdir/7_CZ0-100_Pd_104.SPA]]
[17]:
scp.read_omnic(folder, recursive=True, pattern="*4.spa") # equivalent
[17]:
NDDataset [merged [omnic]] — float64, shape: (y:2, x:5549), a.u.
( 7_CZ0-100 Pd_4, 7_CZ0-100 Pd_104 )
2026-07-30 19:08:02+00:00> Merged from several files
Data
[ 1.448 1.447 ... 2.071 2.065]] a.u.
Dimension `x`
Dimension `y`
[ /home/runner/.spectrochempy/testdata/irdata/subdir/1-20/7_CZ0-100_Pd_4.SPA
/home/runner/.spectrochempy/testdata/irdata/subdir/7_CZ0-100_Pd_104.SPA]]
This way the “.srs” file is ignored.
Reading files from a ZIP archive
The read_zip function is designed to read files from a ZIP archive. It can be used to read a single file or all files in the archive. As usual, by default all files are merged. The merge keyword can be used to read the files separately.
[18]:
scp.read(
"https://eigenvector.com/wp-content/uploads/2019/06/corn.mat_.zip", merge=False
)
INFO | The mat file contains an array of strings named 'information' which will not be converted to NDDataset
[18]:
List (len=7, type=NDDataset)
0: NDDataset [m5nbs] — float64, shape: (y:3, x:700)
2026-07-30 19:08:02+00:00> Imported by spectrochempy.
Data
[ 0.1374 0.1354 ... 0.09898 0.09999]
[ 0.1437 0.1416 ... 0.1037 0.1048]]
Dimension `x`
Dimension `y`
1: NDDataset [mp5nbs] — float64, shape: (y:4, x:700)
2026-07-30 19:08:02+00:00> Imported by spectrochempy.
Data
[ 0.06031 0.05819 ... 0.02807 0.02892]
[ 0.06189 0.05965 ... 0.03215 0.03299]
[ 0.06115 0.05901 ... 0.03013 0.03099]]
Dimension `x`
Dimension `y`
2: NDDataset [mp6nbs] — float64, shape: (y:4, x:700)
2026-07-30 19:08:02+00:00> Imported by spectrochempy.
Data
[ 0.05388 0.05223 ... 0.02187 0.02277]
[ 0.05238 0.05069 ... 0.02207 0.02295]
[ 0.05311 0.05144 ... 0.02195 0.02284]]
Dimension `x`
Dimension `y`
3: NDDataset [propvals] — float64, shape: (y:80, x:4)
2026-07-30 19:08:02+00:00> Imported by spectrochempy.
Data
[ 10.41 3.72 8.658 64.85]
...
[ 10.59 3.176 8.132 65.21]
[ 10.98 3.328 8.428 64.85]]
Dimension `x`
Dimension `y`
4: NDDataset [m5spec] — float64, shape: (y:80, x:700)
2026-07-30 19:08:02+00:00> Imported by spectrochempy.
Data
[ 0.0465 0.04635 ... 0.7275 0.727]
...
[ 0.05944 0.05932 ... 0.7362 0.7357]
[ 0.05009 0.04993 ... 0.7289 0.7282]]
Dimension `x`
Dimension `y`
5: NDDataset [mp5spec] — float64, shape: (y:80, x:700)
2026-07-30 19:08:02+00:00> Imported by spectrochempy.
Data
[-0.01419 -0.01425 ... 0.6924 0.6919]
...
[0.005116 0.00504 ... 0.6979 0.6976]
[-0.003701 -0.003818 ... 0.7128 0.7121]]
Dimension `x`
Dimension `y`
6: NDDataset [mp6spec] — float64, shape: (y:80, x:700)
2026-07-30 19:08:02+00:00> Imported by spectrochempy.
Data
[-0.02192 -0.02206 ... 0.6826 0.6822]
...
[-0.006796 -0.006888 ... 0.6899 0.6891]
[-0.01526 -0.01538 ... 0.7028 0.7021]]