Tôi có một thư mục của 9 hình ảnh:Làm thế nào để liệt kê một chuỗi hình ảnh một cách hiệu quả? Numercial so sánh chuỗi bằng Python
image_0001, image_0002, image_0003 image_0010, image_0011 image_0011-1, image_0011-2, image_0011-3 image_9999
Tôi muốn để có thể liệt kê chúng trong một cách hiệu quả, như thế này (4 mục cho 9 hình ảnh):
(image_000[1-3], image_00[10-11], image_0011-[1-3], image_9999)
Có cách nào trong python, trả về một thư mục hình ảnh, theo cách ngắn/rõ ràng (không liệt kê mọi tệp) không?
Vì vậy, có thể là một cái gì đó như thế này:
danh sách tất cả hình ảnh, sắp xếp số lượng, tạo ra một danh sách (tính mỗi hình ảnh theo thứ tự từ đầu). Khi thiếu hình ảnh (tạo danh sách mới), tiếp tục cho đến khi danh sách tệp gốc hoàn tất. Bây giờ tôi chỉ nên có một số danh sách có chứa các chuỗi không bị hỏng.
Tôi đang cố gắng để dễ đọc/mô tả danh sách các số. Nếu tôi có một chuỗi 1000 tệp liên tiếp Có thể liệt kê rõ ràng là tệp [0001-1000] thay vì tệp ['0001', '0002', '0003' vv ...]
Edit1 (based về đề nghị): Với một danh sách phẳng, làm thế nào bạn sẽ lấy được các mẫu glob?
Edit2 Tôi đang cố gắng giải quyết vấn đề thành từng phần nhỏ hơn. Dưới đây là một ví dụ về một phần của giải pháp: công trình data1, data2 lợi nhuận 0010 là 64, data3 (các dữ liệu RealWorld) không hoạt động:
# Find runs of consecutive numbers using groupby. The key to the solution
# is differencing with a range so that consecutive numbers all appear in
# same group.
from operator import itemgetter
from itertools import *
data1=[01,02,03,10,11,100,9999]
data2=[0001,0002,0003,0010,0011,0100,9999]
data3=['image_0001','image_0002','image_0003','image_0010','image_0011','image_0011-2','image_0011-3','image_0100','image_9999']
list1 = []
for k, g in groupby(enumerate(data1), lambda (i,x):i-x):
list1.append(map(itemgetter(1), g))
print 'data1'
print list1
list2 = []
for k, g in groupby(enumerate(data2), lambda (i,x):i-x):
list2.append(map(itemgetter(1), g))
print '\ndata2'
print list2
lợi nhuận:
data1
[[1, 2, 3], [10, 11], [100], [9999]]
data2
[[1, 2, 3], [8, 9], [64], [9999]]
Tại sao 'image_00 [10-11] 'và không' image_001 [0-1] '? – eumiro
image_00 [10-11] hoặc image_001 [0-1], vâng tôi đoán đó là một ký tự ít hơn – user178686
Cynically: vâng, có một cách. Tôi nghi ngờ (nhưng có thể sai) rằng có một số chức năng thư viện để làm điều này. Viết một số mã, hỏi một cái gì đó cụ thể hơn (ví dụ như làm thế nào tôi có thể so sánh các chuỗi tương tự) sau khi bạn đã làm 'os.listdir (đường dẫn)', v.v. –