pathlib.Path.rglob
Sử dụng import os, fnmatch def find_files(directory, pattern): for root, dirs, files in os.walk(directory): for basename in files: if fnmatch.fnmatch(basename, pattern): filename = os.path.join(root, basename) yield filename for filename in find_files('src', '*.c'): print 'Found C source:', filename 6 từ mô -đun import os, fnmatch def find_files(directory, pattern): for root, dirs, files in os.walk(directory): for basename in files: if fnmatch.fnmatch(basename, pattern): filename = os.path.join(root, basename) yield filename for filename in find_files('src', '*.c'): print 'Found C source:', filename 7, được giới thiệu trong Python 3.5.
from pathlib import Path for path in Path('src').rglob('*.c'): print(path.name)Nếu bạn không muốn sử dụng pathlib, sử dụng có thể sử dụng import os, fnmatch def find_files(directory, pattern): for root, dirs, files in os.walk(directory): for basename in files: if fnmatch.fnmatch(basename, pattern): filename = os.path.join(root, basename) yield filename for filename in find_files('src', '*.c'): print 'Found C source:', filename 8, nhưng đừng quên vượt qua tham số từ khóa import os, fnmatch def find_files(directory, pattern): for root, dirs, files in os.walk(directory): for basename in files: if fnmatch.fnmatch(basename, pattern): filename = os.path.join(root, basename) yield filename for filename in find_files('src', '*.c'): print 'Found C source:', filename 9 và nó sẽ sử dụng khoảng thời gian không phù hợp cho các thư mục lớn.
Cho các trường hợp các tệp khớp bắt đầu bằng một dấu chấm (>>> import glob2 >>> all_header_files = glob2.glob('src/**/*.c') 0); Giống như các tệp trong thư mục hiện tại hoặc các tệp ẩn trên hệ thống dựa trên UNIX, hãy sử dụng giải pháp >>> import glob2 >>> all_header_files = glob2.glob('src/**/*.c') 1 bên dưới.
os.walk
Đối với các phiên bản Python cũ hơn, hãy sử dụng >>> import glob2 >>> all_header_files = glob2.glob('src/**/*.c') 1 để đi bộ một cách đệ quy một thư mục và >>> import glob2 >>> all_header_files = glob2.glob('src/**/*.c') 3 để khớp với một biểu thức đơn giản:
import fnmatch import os matches = [] for root, dirnames, filenames in os.walk('src'): for filename in fnmatch.filter(filenames, '*.c'): matches.append(os.path.join(root, filename))Đã trả lời ngày 2 tháng 2 năm 2010 lúc 18:26Feb 2, 2010 at 18:26
Johan Dahlinjohan DahlinJohan Dahlin
24.1k6 Huy hiệu vàng40 Huy hiệu bạc52 Huy hiệu đồng6 gold badges40 silver badges52 bronze badges
13
Đối với Python> = 3.5, bạn có thể sử dụng >>> import glob2 >>> all_header_files = glob2.glob('src/**/*.c') 4, >>> import glob2 >>> all_header_files = glob2.glob('src/**/*.c') 5:
import glob for f in glob.glob('/path/**/*.c', recursive=True): print(f)Nếu đệ quy là >>> import glob2 >>> all_header_files = glob2.glob('src/**/*.c') 6, mẫu >>> import glob2 >>> all_header_files = glob2.glob('src/**/*.c') 4 sẽ khớp với bất kỳ tệp nào và không hoặc nhiều hoặc nhiều hơn >>> import glob2 >>> all_header_files = glob2.glob('src/**/*.c') 8 và >>> import glob2 >>> all_header_files = glob2.glob('src/**/*.c') 9. Nếu mẫu được theo sau bởi một from pathlib import Path for file_path in Path('src').glob('**/*.c'): print(file_path) # do whatever you need with these files 0, chỉ có các thư mục và >>> import glob2 >>> all_header_files = glob2.glob('src/**/*.c') 9.will match any files and zero or more >>> import glob2 >>> all_header_files = glob2.glob('src/**/*.c') 8 and >>> import glob2 >>> all_header_files = glob2.glob('src/**/*.c') 9. If the pattern is followed by an from pathlib import Path for file_path in Path('src').glob('**/*.c'): print(file_path) # do whatever you need with these files 0, only directories and >>> import glob2 >>> all_header_files = glob2.glob('src/**/*.c') 9 match.
Python 3.6 Bản demo
Đã trả lời ngày 25 tháng 8 năm 2019 lúc 9:45Aug 25, 2019 at 9:45
Pedro lobitopedro lobitoPedro Lobito
88.9K30 Huy hiệu vàng239 Huy hiệu bạc257 Huy hiệu Đồng30 gold badges239 silver badges257 bronze badges
3
Tương tự như các giải pháp khác, nhưng sử dụng fnmatch.fnmatch thay vì glob, vì os.walk đã liệt kê các tên tệp:
import os, fnmatch def find_files(directory, pattern): for root, dirs, files in os.walk(directory): for basename in files: if fnmatch.fnmatch(basename, pattern): filename = os.path.join(root, basename) yield filename for filename in find_files('src', '*.c'): print 'Found C source:', filenameNgoài ra, sử dụng một trình tạo làm cho bạn xử lý từng tệp như được tìm thấy, thay vì tìm tất cả các tệp và sau đó xử lý chúng.
Johan Dahlin
24.1k6 Huy hiệu vàng40 Huy hiệu bạc52 Huy hiệu đồng6 gold badges40 silver badges52 bronze badges
Đối với Python> = 3.5, bạn có thể sử dụng >>> import glob2 >>> all_header_files = glob2.glob('src/**/*.c') 4, >>> import glob2 >>> all_header_files = glob2.glob('src/**/*.c') 5:Feb 2, 2010 at 18:44
Nếu đệ quy là >>> import glob2 >>> all_header_files = glob2.glob('src/**/*.c') 6, mẫu >>> import glob2 >>> all_header_files = glob2.glob('src/**/*.c') 4 sẽ khớp với bất kỳ tệp nào và không hoặc nhiều hoặc nhiều hơn >>> import glob2 >>> all_header_files = glob2.glob('src/**/*.c') 8 và >>> import glob2 >>> all_header_files = glob2.glob('src/**/*.c') 9. Nếu mẫu được theo sau bởi một from pathlib import Path for file_path in Path('src').glob('**/*.c'): print(file_path) # do whatever you need with these files 0, chỉ có các thư mục và >>> import glob2 >>> all_header_files = glob2.glob('src/**/*.c') 9.Bruno Oliveira
Python 3.6 Bản demo4 gold badges41 silver badges39 bronze badges
0
Đã trả lời ngày 25 tháng 8 năm 2019 lúc 9:45
>>> import glob2 >>> all_header_files = glob2.glob('src/**/*.c')//github.com/miracle2k/python-glob2/
Pedro lobitopedro lobito
88.9K30 Huy hiệu vàng239 Huy hiệu bạc257 Huy hiệu Đồng
Tương tự như các giải pháp khác, nhưng sử dụng fnmatch.fnmatch thay vì glob, vì os.walk đã liệt kê các tên tệp:26 gold badges149 silver badges179 bronze badges
Ngoài ra, sử dụng một trình tạo làm cho bạn xử lý từng tệp như được tìm thấy, thay vì tìm tất cả các tệp và sau đó xử lý chúng.Jun 26, 2011 at 14:14
4
Johan Dahlin
from pathlib import Path for file_path in Path('src').glob('**/*.c'): print(file_path) # do whatever you need with these filesĐã trả lời ngày 2 tháng 2 năm 2010 lúc 18:44 Starting with Python 3.5, the same syntax is also supported by from pathlib import Path for file_path in Path('src').glob('**/*.c'): print(file_path) # do whatever you need with these files 5.
Bruno Oliveirabruno OliveiraNov 11, 2014 at 16:08
12.4K4 Huy hiệu vàng41 Huy hiệu bạc39 Huy hiệu đồngtaleinat
Tôi đã sửa đổi mô -đun GLOB để hỗ trợ ** cho Globbing đệ quy, ví dụ:1 gold badge29 silver badges42 bronze badges
3
import os import fnmatch def recursive_glob(treeroot, pattern): results = [] for base, dirs, files in os.walk(treeroot): goodfiles = fnmatch.filter(files, pattern) results.extend(os.path.join(base, f) for f in goodfiles) return results
Hữu ích khi bạn muốn cung cấp cho người dùng của mình khả năng sử dụng cú pháp ** và do đó chỉ riêng Os.Walk () không đủ tốt.
MattFeb 2, 2010 at 18:39
73.2K26 Huy hiệu vàng149 Huy hiệu bạc179 Huy hiệu đồngAlex Martelli
Đã trả lời ngày 26 tháng 6 năm 2011 lúc 14:14163 gold badges1203 silver badges1382 bronze badges
2
Bắt đầu với Python 3.4, người ta có thể sử dụng phương pháp from pathlib import Path for file_path in Path('src').glob('**/*.c'): print(file_path) # do whatever you need with these files 2 của một trong các lớp from pathlib import Path for file_path in Path('src').glob('**/*.c'): print(file_path) # do whatever you need with these files 3 trong mô -đun Pathlib mới, hỗ trợ các ký tự đại diện >>> import glob2 >>> all_header_files = glob2.glob('src/**/*.c') 4. Ví dụ:
Cập nhật: Bắt đầu với Python 3.5, cú pháp tương tự cũng được hỗ trợ bởi from pathlib import Path for file_path in Path('src').glob('**/*.c'): print(file_path) # do whatever you need with these files 5.Đã trả lời ngày 11 tháng 11 năm 2014 lúc 16:08Feb 2, 2010 at 18:24
TaleinattaleinatGeoff Reedy
8.2111 Huy hiệu vàng29 Huy hiệu bạc42 Huy hiệu đồng3 gold badges54 silver badges77 bronze badges
from pathlib import Path for file_path in Path('src').glob('**/*.c'): print(file_path) # do whatever you need with these files 6 cung cấp cho bạn chính xác các mẫu giống như from pathlib import Path for file_path in Path('src').glob('**/*.c'): print(file_path) # do whatever you need with these files 7, vì vậy đây thực sự là một sự thay thế tuyệt vời cho from pathlib import Path for file_path in Path('src').glob('**/*.c'): print(file_path) # do whatever you need with these files 8 với ngữ nghĩa rất gần. Một phiên bản lặp (ví dụ: một trình tạo), IOW thay thế cho from pathlib import Path for file_path in Path('src').glob('**/*.c'): print(file_path) # do whatever you need with these files 9, là một sự thích ứng tầm thường (chỉ import os import fnmatch def recursive_glob(treeroot, pattern): results = [] for base, dirs, files in os.walk(treeroot): goodfiles = fnmatch.filter(files, pattern) results.extend(os.path.join(base, f) for f in goodfiles) return results 0 kết quả trung gian khi bạn đi, thay vì import os import fnmatch def recursive_glob(treeroot, pattern): results = [] for base, dirs, files in os.walk(treeroot): goodfiles = fnmatch.filter(files, pattern) results.extend(os.path.join(base, f) for f in goodfiles) return results 1 về một danh sách kết quả duy nhất để trả về ở cuối).
import os cfiles = [os.path.join(root, filename) for root, dirnames, filenames in os.walk('src') for filename in filenames if filename.endswith('.c')]Đã trả lời ngày 2 tháng 2 năm 2010 lúc 18:39
import os;cfiles=[os.path.join(r,f) for r,d,fs in os.walk('src') for f in fs if f.endswith('.c')]Alex Martellialex Martelli
import fnmatch import os matches = [] for root, dirnames, filenames in os.walk('src'): for filename in fnmatch.filter(filenames, '*.c'): matches.append(os.path.join(root, filename)) 0826K163 Huy hiệu vàng1203 Huy hiệu bạc1382 Huy hiệu Đồng
import fnmatch import os matches = [] for root, dirnames, filenames in os.walk('src'): for filename in fnmatch.filter(filenames, '*.c'): matches.append(os.path.join(root, filename)) 1
Bạn sẽ muốn sử dụng >>> import glob2 >>> all_header_files = glob2.glob('src/**/*.c') 1 để thu thập các tên tệp phù hợp với tiêu chí của bạn. Ví dụ:
import os cfiles = [] for root, dirs, files in os.walk('src'): for file in files: if file.endswith('.c'): cfiles.append(os.path.join(root, file)) 4 gold badges75 silver badges71 bronze badges
Đã trả lời ngày 2 tháng 2 năm 2010 lúc 18:24Nov 2, 2011 at 8:10
Geoff Reedygeoff Reedyakaihola
33,9K3 Huy hiệu vàng54 Huy hiệu bạc77 Huy hiệu đồng6 gold badges59 silver badges67 bronze badges
Dưới đây là một giải pháp với sự hiểu biết danh sách lồng nhau, >>> import glob2 >>> all_header_files = glob2.glob('src/**/*.c') 1 và kết hợp hậu tố đơn giản thay vì from pathlib import Path for file_path in Path('src').glob('**/*.c'): print(file_path) # do whatever you need with these files 7:
import fnmatch import os matches = [] for root, dirnames, filenames in os.walk('src'): for filename in fnmatch.filter(filenames, '*.c'): matches.append(os.path.join(root, filename)) 2Nó có thể được nén thành một lớp lót:
hoặc tổng quát như một chức năng:
Nếu bạn cần các mẫu kiểu from pathlib import Path for file_path in Path('src').glob('**/*.c'): print(file_path) # do whatever you need with these files 7 đầy đủ, bạn có thể theo dõi ví dụ của Alex và Bruno và sử dụng from pathlib import Path for file_path in Path('src').glob('**/*.c'): print(file_path) # do whatever you need with these files 6:May 23, 2019 at 12:11
blueyedpylang
26,5K4 Huy hiệu vàng75 Huy hiệu bạc71 Huy hiệu đồng11 gold badges121 silver badges112 bronze badges
0
import fnmatch import os matches = [] for root, dirnames, filenames in os.walk('src'): for filename in fnmatch.filter(filenames, '*.c'): matches.append(os.path.join(root, filename)) 3
- Đã trả lời ngày 2 tháng 11 năm 2011 lúc 8:10
- Akaiholaakaihola
- 25.8K6 Huy hiệu vàng59 Huy hiệu bạc67 Huy hiệu Đồng
- Hãy xem xét import os import fnmatch def recursive_glob(treeroot, pattern): results = [] for base, dirs, files in os.walk(treeroot): goodfiles = fnmatch.filter(files, pattern) results.extend(os.path.join(base, f) for f in goodfiles) return results 7.
- Điều này giống như gọi import os import fnmatch def recursive_glob(treeroot, pattern): results = [] for base, dirs, files in os.walk(treeroot): goodfiles = fnmatch.filter(files, pattern) results.extend(os.path.join(base, f) for f in goodfiles) return results 8 với import os import fnmatch def recursive_glob(treeroot, pattern): results = [] for base, dirs, files in os.walk(treeroot): goodfiles = fnmatch.filter(files, pattern) results.extend(os.path.join(base, f) for f in goodfiles) return results 9 được thêm vào trước mẫu tương đối đã cho:
- Xem thêm Bài đăng liên quan của @Taleinat ở đây và một bài đăng tương tự ở nơi khác.
Đã trả lời ngày 23 tháng 5 năm 2019 lúc 12:11Aug 3, 2020 at 5:10
Pylangpylang
36,5K11 Huy hiệu vàng121 Huy hiệu bạc112 Huy hiệu đồng
import fnmatch import os matches = [] for root, dirnames, filenames in os.walk('src'): for filename in fnmatch.filter(filenames, '*.c'): matches.append(os.path.join(root, filename)) 4________ 70: Phù hợp với tất cả các tệp kết thúc trong import os
cfiles = []
for root, dirs, files in os.walk('src'):
for file in files:
if file.endswith('.c'):
cfiles.append(os.path.join(root, file))
1 trong thư mục hiện tại
os_walk: ~3.6sec
rglob ~14.5sec
iglob: ~16.9sec
________ 72: Giống như 1
________ 73: khớp với tất cả các tệp kết thúc trong import os cfiles = [] for root, dirs, files in os.walk('src'): for file in files: if file.endswith('.c'): cfiles.append(os.path.join(root, file)) 1 chỉ trong các thư mục con ngay lập tức, nhưng không phải trong thư mục hiện tạiJun 13, 2020 at 17:39
import os cfiles = [] for root, dirs, files in os.walk('src'): for file in files: if file.endswith('.c'): cfiles.append(os.path.join(root, file)) 5: Giống như 1Daniel
import os cfiles = [] for root, dirs, files in os.walk('src'): for file in files: if file.endswith('.c'): cfiles.append(os.path.join(root, file)) 6: Giống như 313 silver badges19 bronze badges
1
________ 77: khớp với tất cả các tệp kết thúc trong import os cfiles = [] for root, dirs, files in os.walk('src'): for file in files: if file.endswith('.c'): cfiles.append(os.path.join(root, file)) 1 trong thư mục hiện tại và trong tất cả các thư mục con
import fnmatch import os matches = [] for root, dirnames, filenames in os.walk('src'): for filename in fnmatch.filter(filenames, '*.c'): matches.append(os.path.join(root, filename)) 5
mmmmmm
31.7K27 Huy hiệu vàng88 Huy hiệu bạc114 Huy hiệu đồng27 gold badges88 silver badges114 bronze badges
Đã trả lời ngày 5 tháng 1 năm 2013 lúc 10:36Jan 5, 2013 at 10:36
Dựa trên các câu trả lời khác, đây là triển khai làm việc hiện tại của tôi, trong đó truy xuất các tệp XML lồng nhau trong thư mục gốc:
import fnmatch import os matches = [] for root, dirnames, filenames in os.walk('src'): for filename in fnmatch.filter(filenames, '*.c'): matches.append(os.path.join(root, filename)) 6Tôi thực sự vui vẻ với Python :)
Đã trả lời ngày 28 tháng 7 năm 2012 lúc 22:09Jul 28, 2012 at 22:09
Daveoncodedaveoncodedaveoncode
18.1K14 Huy hiệu vàng98 Huy hiệu bạc156 Huy hiệu đồng14 gold badges98 silver badges156 bronze badges
Johan và Bruno cung cấp các giải pháp tuyệt vời về yêu cầu tối thiểu như đã nêu. Tôi vừa phát hành Formic, trong đó thực hiện các tập tin Ant và Globs có thể xử lý các kịch bản này và phức tạp hơn. Việc thực hiện yêu cầu của bạn là:
import fnmatch import os matches = [] for root, dirnames, filenames in os.walk('src'): for filename in fnmatch.filter(filenames, '*.c'): matches.append(os.path.join(root, filename)) 7Đã trả lời ngày 15 tháng 5 năm 2012 lúc 8:53May 15, 2012 at 8:53
Andrew Alcockandrew AlcockAndrew Alcock
Phim thương hiệu vàng 19.2k44 gold badges41 silver badges60 bronze badges
1
Cho Python 3.5 trở lên
import fnmatch import os matches = [] for root, dirnames, filenames in os.walk('src'): for filename in fnmatch.filter(filenames, '*.c'): matches.append(os.path.join(root, filename)) 8Hơn nữa bạn có thể cần
import fnmatch import os matches = [] for root, dirnames, filenames in os.walk('src'): for filename in fnmatch.filter(filenames, '*.c'): matches.append(os.path.join(root, filename)) 9Đã trả lời ngày 21 tháng 6 năm 2019 lúc 21:08Jun 21, 2019 at 21:08
SamisamiSami
7.9748 Huy hiệu vàng66 Huy hiệu bạc95 Huy hiệu Đồng8 gold badges66 silver badges95 bronze badges
1
Một cách khác để làm điều đó chỉ bằng mô -đun GLOB. Chỉ cần tạo ra phương thức RGLOB với thư mục cơ sở bắt đầu và một mẫu để khớp và nó sẽ trả về một danh sách các tên tệp phù hợp.
import glob for f in glob.glob('/path/**/*.c', recursive=True): print(f) 0Đã trả lời ngày 13 tháng 9 năm 2011 lúc 22:59Sep 13, 2011 at 22:59
Hoặc với một danh sách hiểu:
import glob for f in glob.glob('/path/**/*.c', recursive=True): print(f) 1Đã trả lời ngày 24 tháng 6 năm 2013 lúc 10:41Jun 24, 2013 at 10:41
Xtoflxtoflxtofl
40K12 Huy hiệu vàng101 Huy hiệu bạc190 Huy hiệu Đồng12 gold badges101 silver badges190 bronze badges
Nếu các tệp nằm trên một hệ thống tệp từ xa hoặc bên trong kho lưu trữ, bạn có thể sử dụng một triển khai của lớp FSSPEC Enterrologfilesystem. Ví dụ: để liệt kê tất cả các tệp trong zipfile:remote file system or inside an archive, you can use an implementation of the fsspec AbstractFileSystem class. For example, to list all the files in a zipfile:
import glob for f in glob.glob('/path/**/*.c', recursive=True): print(f) 2hoặc để liệt kê tất cả các tệp trong nhóm S3 có sẵn công khai:
import glob for f in glob.glob('/path/**/*.c', recursive=True): print(f) 3Bạn cũng có thể sử dụng nó cho một hệ thống tập tin cục bộ, điều này có thể rất thú vị nếu việc triển khai của bạn phải là hệ thống tập tin-agnostic:
import glob for f in glob.glob('/path/**/*.c', recursive=True): print(f) 4Các triển khai khác bao gồm Google Cloud, GitHub, SFTP/SSH, Dropbox và Azure. Để biết chi tiết, xem tài liệu API FSSPEC.
Đã trả lời ngày 8 tháng 10 năm 2020 lúc 13:49Oct 8, 2020 at 13:49
Gerritgerritgerrit
21.8K16 Huy hiệu vàng89 Huy hiệu bạc164 Huy hiệu đồng16 gold badges89 silver badges164 bronze badges
Chỉ cần thực hiện cái này .. nó sẽ in các tệp và thư mục theo cách phân cấp
Nhưng tôi đã không sử dụng fnmatch hoặc đi bộ
import glob for f in glob.glob('/path/**/*.c', recursive=True): print(f) 5Đã trả lời ngày 27 tháng 7 năm 2013 lúc 18:12Jul 27, 2013 at 18:12
Shaurya Guptashaurya GuptaShaurya Gupta
5291 Huy hiệu vàng4 Huy hiệu bạc 6 Huy hiệu Đồng1 gold badge4 silver badges6 bronze badges
Mà người ta sử dụng fnmatch hoặc biểu thức chính quy:
import glob for f in glob.glob('/path/**/*.c', recursive=True): print(f) 6Đã trả lời ngày 2 tháng 8 năm 2013 lúc 16:01Aug 2, 2013 at 16:01
Hipertrackerhipertrackerhipertracker
2.34624 Huy hiệu bạc14 Huy hiệu đồng24 silver badges14 bronze badges
Ngoài các câu trả lời được đề xuất, bạn có thể thực hiện điều này với một số thế hệ lười biếng và phép thuật hiểu danh sách:
import glob for f in glob.glob('/path/**/*.c', recursive=True): print(f) 7Bên cạnh việc lắp một dòng và tránh các danh sách không cần thiết trong bộ nhớ, điều này cũng có tác dụng phụ tốt đẹp, bạn có thể sử dụng nó theo cách tương tự như toán tử **, ví dụ: bạn có thể sử dụng import os cfiles = [] for root, dirs, files in os.walk('src'): for file in files: if file.endswith('.c'): cfiles.append(os.path.join(root, file)) 9 để có được tất cả các tệp .c trong Tất cả các thư mục phụ của SRC có cấu trúc này.
Đã trả lời ngày 5 tháng 12 năm 2015 lúc 17:42Dec 5, 2015 at 17:42
f0xdxf0xdxf0xdx
1.27915 huy hiệu bạc19 Huy hiệu đồng15 silver badges19 bronze badges
Đây là một mã làm việc trên Python 2.7. Là một phần của công việc DevOps của tôi, tôi được yêu cầu viết một tập lệnh sẽ chuyển các tệp cấu hình được đánh dấu bằng ứng dụng trực tiếp.properies sang appName.properies. Có thể có các tệp tiện ích mở rộng khác cũng như ứng dụng trực tiếp.xml.
Dưới đây là mã làm việc cho việc này, tìm thấy các tệp trong các thư mục đã cho (mức lồng nhau) và sau đó đổi tên (di chuyển) nó thành tên tệp cần thiết
import glob for f in glob.glob('/path/**/*.c', recursive=True): print(f) 8Hàm này được gọi từ một tập lệnh chính
import glob for f in glob.glob('/path/**/*.c', recursive=True): print(f) 9Hy vọng điều này giúp ai đó đấu tranh với các vấn đề tương tự.
Đã trả lời ngày 3 tháng 4 năm 2020 lúc 10:03Apr 3, 2020 at 10:03
Phiên bản đơn giản hóa câu trả lời của Johan Dahlin, không có fnmatch.
import os, fnmatch def find_files(directory, pattern): for root, dirs, files in os.walk(directory): for basename in files: if fnmatch.fnmatch(basename, pattern): filename = os.path.join(root, basename) yield filename for filename in find_files('src', '*.c'): print 'Found C source:', filename 0Đã trả lời ngày 3 tháng 6 năm 2013 lúc 1:29Jun 3, 2013 at 1:29
Flowfreeflowfreeflowfree
16.1K12 Huy hiệu vàng49 Huy hiệu bạc76 Huy hiệu đồng12 gold badges49 silver badges76 bronze badges
Dưới đây là giải pháp của tôi bằng cách sử dụng danh sách hiểu để tìm kiếm nhiều phần mở rộng tệp một cách đệ quy trong một thư mục và tất cả các thư mục con:multiple file extensions recursively in a directory and all subdirectories:
import os, fnmatch def find_files(directory, pattern): for root, dirs, files in os.walk(directory): for basename in files: if fnmatch.fnmatch(basename, pattern): filename = os.path.join(root, basename) yield filename for filename in find_files('src', '*.c'): print 'Found C source:', filename 1Đã trả lời ngày 18 tháng 8 năm 2014 lúc 17:50Aug 18, 2014 at 17:50
import os, fnmatch def find_files(directory, pattern): for root, dirs, files in os.walk(directory): for basename in files: if fnmatch.fnmatch(basename, pattern): filename = os.path.join(root, basename) yield filename for filename in find_files('src', '*.c'): print 'Found C source:', filename 2
Đã trả lời ngày 27 tháng 1 năm 2014 lúc 19:03Jan 27, 2014 at 19:03
Tôi đã sửa đổi câu trả lời hàng đầu trong bài đăng này .. và gần đây đã tạo tập lệnh này sẽ lặp qua tất cả các tệp trong một thư mục nhất định (searchDir) và các thư mục phụ theo nó ... và in tên tệp, rootDir, ngày sửa đổi/tạo và ngày tạo và kích thước.
Hy vọng điều này sẽ giúp ai đó ... và họ có thể đi bộ thư mục và nhận FileInfo.
import os, fnmatch def find_files(directory, pattern): for root, dirs, files in os.walk(directory): for basename in files: if fnmatch.fnmatch(basename, pattern): filename = os.path.join(root, basename) yield filename for filename in find_files('src', '*.c'): print 'Found C source:', filename 3Đã trả lời ngày 15 tháng 11 năm 2014 lúc 13:39Nov 15, 2014 at 13:39
Ihightowerihightowerihightower
2.9106 Huy hiệu vàng32 Huy hiệu bạc48 Huy hiệu Đồng6 gold badges32 silver badges48 bronze badges
Dưới đây là một giải pháp sẽ phù hợp với mẫu so với đường dẫn đầy đủ và không chỉ tên tệp cơ sở.
Nó sử dụng import os cfiles = [os.path.join(root, filename) for root, dirnames, filenames in os.walk('src') for filename in filenames if filename.endswith('.c')] 0 để chuyển đổi mẫu kiểu cầu thành biểu thức chính quy, sau đó được khớp với đường dẫn đầy đủ của mỗi tệp được tìm thấy trong khi đi bộ thư mục.
import os cfiles = [os.path.join(root, filename) for root, dirnames, filenames in os.walk('src') for filename in filenames if filename.endswith('.c')] 1 là tùy chọn, nhưng mong muốn trên Windows vì bản thân hệ thống tệp không nhạy cảm với trường hợp. .
import os, fnmatch def find_files(directory, pattern): for root, dirs, files in os.walk(directory): for basename in files: if fnmatch.fnmatch(basename, pattern): filename = os.path.join(root, basename) yield filename for filename in find_files('src', '*.c'): print 'Found C source:', filename 4Đã trả lời ngày 30 tháng 6 năm 2015 lúc 15:39Jun 30, 2015 at 15:39
Yoyoyoyoyo
7.8504 Huy hiệu vàng54 Huy hiệu bạc48 Huy hiệu đồng4 gold badges54 silver badges48 bronze badges
Tôi cần một giải pháp cho Python 2.x hoạt động nhanh trên các thư mục lớn. Tôi bắt đầu với điều này:python 2.x that works fast on large directories.
I endet up with this:
Lưu ý rằng bạn có thể cần một số xử lý ngoại lệ trong trường hợp import os cfiles = [os.path.join(root, filename) for root, dirnames, filenames in os.walk('src') for filename in filenames if filename.endswith('.c')] 2 không tìm thấy bất kỳ tệp phù hợp nào.
Đã trả lời ngày 23 tháng 6 năm 2017 lúc 10:20Jun 23, 2017 at 10:20
RomanromanRoman
6778 Huy hiệu bạc16 Huy hiệu Đồng8 silver badges16 bronze badges
3