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

文字列モジュール 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 に答える
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 に答える