2010-06-26 34 views

Trả lời

19

glob là tốt tại đây:

import glob 
for f in glob.glob("*.f"): 
    print f 
+0

+1 ý tưởng hay, điều đó đã không xảy ra với tôi. –

+0

+1 wow, điều đó đã giúp ích rất nhiều! Nhưng chúng ta không thể chỉ in (glob.glob ("*. Py"))? – Galilsnap

+2

Bạn có thể làm điều đó, glob.glob trả về một danh sách, làm những gì bạn muốn với nó. –

6

Đừng hỏi gì?

[s for s in os.listdir() if s.endswith('.f')] 

Nếu bạn muốn kiểm tra một danh sách các phần mở rộng, bạn có thể làm cho khái quát rõ ràng,

[s for s in os.listdir() if s.endswith('.f') or s.endswith('.c') or s.endswith('.z')] 

hay cách khác đây là ngắn hơn một chút để viết:

[s for s in os.listdir() if s.rpartition('.')[2] in ('f','c','z')] 
+0

Có rất nhiều thứ mà có chức năng rõ ràng gọi bằng các ngôn ngữ khác mà được thay thế bằng các hoạt động tích hợp sẵn trong Python. Đó là đôi khi theo dõi khó khăn. Ví dụ, các mẫu bộ điều hợp khác nhau trong thư viện chuẩn C++ đơn giản là 'lambda' trong Python. Đó là một trong những điều yêu thích của tôi về Python. –

+0

"Không hỏi" có nghĩa là "không hỏi tôi", bạn đã kiểm tra tài liệu, nó đã nói gì? "" –

+0

@Ned: Tôi đã nhận ra rằng đó là một câu hỏi nửa chừng. –

0
[s for s in os.listdir() if os.path.splitext(s) == 'f'] 
+0

Đây phải là 'os.path.splitext (s) [1] ==' .f''. – Philipp

1

Có một khả năng không được đề cập cho đến nay:

import fnmatch 
import os 

for file in os.listdir('.'): 
    if fnmatch.fnmatch(file, '*.f'): 
     print file 

Trên thực tế đây là cách các module glob được thực hiện, vì vậy trong trường hợp này glob là đơn giản hơn và tốt hơn, nhưng các module fnmatch có thể tiện dụng trong khác tình huống, ví dụ khi thực hiện truyền tải cây bằng cách sử dụng os.walk.

0

Hãy thử điều này:

from os import listdir 

extension = '.wantedExtension' 

mypath = r'my\path' 

filesWithExtension = [ f for f in listdir(mypath) if f[(len(f) - len(extension)):len(f)].find(extension)>=0 ] 
Các vấn đề liên quan