我正在尝试编写一个查看目录的短程序,获取图像文件的文件名,并将它们附加到与其目录名称相匹配的位置,然后重新编号并对它们进行排序以便以后处理。到目前为止,我可以获取文件夹的名称,并使用以下内容替换文件名的特定部分;
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类型,并且永远不会有下划线或点,以便将它们分开。任何建议表示赞赏。提前谢谢!
答案 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中的所有字符。
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'
>>>
答案 3 :(得分:-2)
>>> a = "storm000045.tiff"
>>> print a[5:11]
000045