J. Devez
J. Devez

Reputation: 329

Find specific substring while iterating through multiple file names

I need to find the identification number of a big number of files while iterating throught them.

The file names are loaded onto a list and look like:

ID322198.nii
ID9828731.nii
ID23890.nii
FILEID988312.nii

So the best way to approach this would be to find the number that sits between ID and .nii

Because number of digits varies I can't simply select [-10:-4] of thee file name. Any ideas?

Upvotes: 0

Views: 76

Answers (5)

Pulsar
Pulsar

Reputation: 288

for name in files:
    name = name.replace('.nii', '')
    id_num = name.replace(name.rstrip('0123456789'), '')

How this works:

# example
name = 'ID322198.nii'

# remove '.nii'. -> name1 = 'ID322198'
name1 = name.replace('.nii', '') 

# strip all digits from the end. -> name2 = 'ID'
name2 = name1.rstrip('0123456789') 

# remove 'ID' from 'ID322198'. -> id_num = '322198'
id_num = name1.replace(name2, '')

Upvotes: 0

Abhishek Patel
Abhishek Patel

Reputation: 615

to find the position of ID and .nii, you can use python's index() function

for line in file:
    idpos = 
    nilpos = 
    data = 

or as a list of ints:

[ int(line[line.index("ID")+1:line.index(".nii")]) for line in file ]

Upvotes: 1

Silas Coker
Silas Coker

Reputation: 500

It seems like you could filter the digits out, like this:

digits = ''.join(d for d in filename if d.isdigit())

That will work nicely as long as there are no other digits in the filename (e.g backups with a .1 suffix or something).

Upvotes: 0

jfeuerman
jfeuerman

Reputation: 177

Using rindex:

s = 'ID322198.nii'
s = s[s.rindex('D')+1 : s.rindex('.')]
print(s)

Returns:

322198

Then apply this sintax to a list of strings.

Upvotes: 0

rahlf23
rahlf23

Reputation: 9019

You can use a regex (see it in action here):

import re

files = ['ID322198.nii','ID9828731.nii','ID23890.nii','FILEID988312.nii']

[re.findall(r'ID(\d+)\.nii', file)[0] for file in files]

Returns:

['322198', '9828731', '23890', '988312']

Upvotes: 1

Related Questions