2013-07-01 31 views
1

我正試圖編寫一個簡短的程序,通過查看目錄,獲取圖像文件的文件名,並追加它們以匹配目錄名稱和重新編號,並對它們進行排序以便稍後處理。到目前爲止,我可以獲取文件夾的名稱,並使用以下代碼替換文件名的特定部分;如何使用Python分隔文件名的數字部分?

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類型,我從來沒有用下劃線或點來區分它們。任何建議表示讚賞。提前致謝!

回答

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' 
+0

接合在列表更快.... :)檢查timeit的[示例](http://docs.python.org/2/library/timeit.html)。 –

+0

謝謝! extract_numbers工作完美:) – ch3quers

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
>>> a = "storm000045.tiff" 
>>> print a[5:11] 
000045 
1

您可以使用字符串模塊translate()。但問題是解決方案會將字符串中的所有數字取出。解決方案不包括數字後有字母的任何檢查。如果你的格式是xxxxdddd.ext,那麼應該工作。 def translate(s,table,[deletechars]):返回一個字符串的副本,其中所有的字符已經使用表格進行翻譯。如果存在刪除者,則刪除存在於刪除者中的所有字符。

translate

DEF maketrans(從,到):創建一個表被翻譯()中使用。

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' 
>>> 
+2

你可以使用'None'而不是創建's',而是提前創建所有這些東西,你可以直接運行'from string import ascii_letters; x.translate(None,ascii_letters)' –

相關問題