簡體   English   中英

在遍歷多個文件名的同時查找特定的子字符串

[英]Find specific substring while iterating through multiple file names

在遍歷文件時,我需要找到大量文件的標識號。

文件名將加載到列表中,如下所示:

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

因此,解決此問題的最佳方法是找到位於ID.nii之間的.nii

因為位數不同,所以我不能簡單地選擇文件名的[-10:-4] 有任何想法嗎?

要找到ID.nii的位置,可以使用python的index()函數

for line in file:
    idpos = 
    nilpos = 
    data = 

或作為整數列表:

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

您可以使用正則表達式(在此處查看實際操作):

import re

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

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

返回值:

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

使用rindex

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

返回值:

322198

然后將此正弦值應用於字符串列表。

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

工作原理:

# 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, '')

看來您可以過濾出數字,如下所示:

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

只要文件名中沒有其他數字(例如帶.1后綴的備份或類似的東西),該方法就可以很好地工作。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM