2013-03-09 16 views
16

w katalogu Mam wiele plików o nazwie mniej więcej tak:Wybierz plik wychodząc z danego łańcucha

001_MN_DX_1_M_32 
001_MN_SX_1_M_33 
012_BC_2_F_23 
... 
... 

W Pythonie mam napisać kod, który wybiera z katalogu plik zaczynający się od określonego ciągu. Na przykład, jeśli ciąg znaków to 001_MN_DX, Python wybierze pierwszy plik i tak dalej.

Jak mogę to zrobić?

Odpowiedz

22

Spróbuj użyć os.listdir, os.path.join i os.path.isfile.
W dłuższej formie (z pętli),

import os 
path = 'C:/' 
files = [] 
for i in os.listdir(path): 
    if os.path.isfile(os.path.join(path,i)) and '001_MN_DX' in i: 
     files.append(i) 

Kod z list-listowe jest

import os 
path = 'C:/' 
files = [i for i in os.listdir(path) if os.path.isfile(os.path.join(path,i)) and \ 
     '001_MN_DX' in i] 

Sprawdź here dla długiego wyjaśnienia ...

+0

to działa dobrze. Dzięki. :) –

+5

Zamieniam 'i '001_MN_DX' w i' na' i i.startswith ('001_MN_DX') ' Ponieważ plik 'E_001_MN_DX.txt' będzie równie dobrze pasował do oryginalnego kodu. – karelv

5
import os, re 
for f in os.listdir('.'): 
    if re.match('001_MN_DX', f): 
     print f 
3

Można użyj modułu os, aby wyświetlić listę plików w katalogu.

Np Znajdź wszystkie pliki w bieżącym katalogu, gdzie nazwa zaczyna się 001_MN_DX

import os 
list_of_files = os.listdir(os.getcwd()) #list of files in the current directory 
for each_file in list_of_files: 
    if each_file.startswith('001_MN_DX'): #since its all type str you can simply use startswith 
     print each_file 
24
import os 
prefixed = [filename for filename in os.listdir('.') if filename.startswith("prefix")] 
Powiązane problemy