如何使用Python分隔文件名的数字部分?

时间:2013-07-01 11:51:21

标签: python split filenames

我正在尝试编写一个查看目录的短程序,获取图像文件的文件名,并将它们附加到与其目录名称相匹配的位置,然后重新编号并对它们进行排序以便以后处理。到目前为止,我可以获取文件夹的名称,并使用以下内容替换文件名的特定部分;

import os

print os.getcwd()
str = os.getcwd()
ext =  str.split("/")[-1]
print ext

separ = os.sep
folder = str
for n in os.listdir(folder):
    print n
    if os.path.isfile(folder + separ + n):
        filename_zero, extension = os.path.splitext(n)
        os.rename(folder + separ + n , folder + separ + filename_zero.replace('image',ext) + extension)

for n in os.listdir(folder):
    print n

我不能做的就是自己获取数字部分。我的文件名属于storm000045.tiff类型,并且永远不会有下划线或点,以便将它们分开。任何建议表示赞赏。提前谢谢!

4 个答案:

答案 0 :(得分:2)

使用这个简单的功能:

import re
def get_name_and_number(text):
    return re.match(r'(\D+)(\d+).*', text).groups()

示例:

>>> get_name_and_number('storm000045.tiff')
('storm', '000045')

或者这个:

def extract_numbers(text):
    return ''.join([x for x in text if x.isdigit()])

示例:

>>> extract_numbers('storm000045.tiff')
'000045'

答案 1 :(得分:1)

使用re

>>> import re
>>> re.split('(\d+)', 'torm000045.tiff')
['torm', '000045', '.tiff']
>>> re.split('(\d+)', 'torm000_045.tiff')
['torm', '000', '_', '045', '.tiff']
>>> re.split('(\d+)', 'torm000_045.tiff')[1::2]
['000', '045']

第2,第4,第6个元素是数字部分。

答案 2 :(得分:1)

您可以使用字符串模块translate()。但问题是解决方案会取出字符串中的所有数字。解决方案不包括任何检查数字后面的字母。如果你的格式是xxxxdddd.ext那么应该可以工作。

def translate(s,table,[deletechars]):返回一个字符串副本,其中所有字符都是使用表格翻译的。如果存在deletechars,则删除deletechars中的所有字符。

translate

def maketrans(from,to):创建一个由translate()使用的表。

maketrans

>>> import string
>>>
>>>
>>> # Create table for translate where from string quals with to string
...
>>> s = string.maketrans('', '')
>>>
>>> # Need to create delete chars (execpt digits)
...
>>> d = s.translate(s, string.digits)
>>>
>>> # We can use d and s for taking out digits from a string
...
>>> x = 'asdffasd23424'
>>> x.translate(s, d)
'23424'
>>> x = 'asdf33433as444'
>>> x.translate(s, d)
'33433444'
>>>

答案 3 :(得分:-2)

>>> a = "storm000045.tiff"
>>> print a[5:11]
000045