2012-12-23 15 views

Odpowiedz

18

można użyć wyrażeń regularnych:

regex = re.compile(r'\d+') 

Następnie, aby uzyskać ciągi pasujące:

regex.findall(filename) 

ta zwróci listę ciągów, które zawierają liczby. Jeśli rzeczywiście chcesz liczb całkowitych, można użyć int:

[int(x) for x in regex.findall(filename)] 

jeśli istnieje tylko jeden numer w każdym pliku, można użyć regex.search(filename).group(0) (jeśli jesteś pewien, że będzie produkować mecz). Jeśli nie zostanie znaleziony żaden pasujący argument, powyższa linia wygeneruje atrybut AttributeError, informujący, że NoneType nie ma atrybutu group.

+0

Dokładnie to, czego potrzebuję - wielkie dzięki. – Borealis

+0

@Aaron - Nie ma problemu. Chętnie pomogę. – mgilson

3

Tak więc, nie zostawiłeś żadnego opisu, gdzie znajdują się te pliki i jak je zdobywasz, ale zakładam, że otrzymasz nazwy plików przy użyciu modułu os.

chodzi o uzyskanie numerów z nazwiskami, byłbyś najlepiej wyłączyć za pomocą wyrażeń regularnych z re, coś takiego:

import re 
def get_numbers_from_filename(filename): 
    return re.search(r'\d+', filename).group(0) 

Następnie, aby to, że w pętli for, że ty uruchom tę funkcję dla każdej nazwy pliku:

for filename in os.listdir(myfiledirectory): 
    print get_numbers_from_filename(filename) 

lub coś podobnego.

2

Jeżeli istnieje tylko jeden numer:

filter(lambda x: x.isdigit(), filename) 
Powiązane problemy