1

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

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

4 回答 4

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'
于 2013-07-01T11:57:56.727 回答
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 个元素是数字部分。

于 2013-07-01T11:55:59.053 回答
1

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

def translate(s, table, [deletechars]):返回字符串的副本,其中所有字符都已使用 table 翻译。如果 deletechars 存在,那么它将删除 deletechars 中存在的所有字符。

翻译

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

制作翻译

>>> 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'
>>>
于 2013-07-01T14:21:02.437 回答
-2
>>> a = "storm000045.tiff"
>>> print a[5:11]
000045
于 2013-07-01T12:00:38.373 回答