2014-06-10 16 views
11

Tôi đang cố gắng sử dụng tệp mới nhất trong thư mục 'tải lên' có phần mở rộng '.log' để được Python xử lý. Tôi sử dụng máy chủ web Ubuntu và tệp tải lên được thực hiện bằng tập lệnh html. Tệp được tải lên được xử lý bởi một tập lệnh Python và kết quả được ghi vào cơ sở dữ liệu MySQL. Tôi đã sử dụng câu trả lời this cho mã của mình.Python lấy tệp gần đây nhất trong một thư mục có phần mở rộng nhất định

import glob 
newest = max(glob.iglob('upload/*.log'), key=os.path.getctime) 
print newest 
f = open(newest,'r') 

Nhưng điều này không nhận được tệp mới nhất trong thư mục, thay vào đó tệp này không nhận được tệp mới nhất trong thư mục. Tại sao?

+3

thử 'min' thay vì 'max' - logic * đảo ngược * ? –

+0

Điều này cho tôi tập tin mới nhất khi tôi chạy nó từ giao diện điều khiển tương tác python. – Himanshu

+1

Suy nghĩ về nó, bạn có thể muốn 'os.path.getmtime' - thời gian tạo và thời gian sửa đổi khác nhau mặc dù ... vậy err ... không chắc chắn –

Trả lời

18

Vấn đề là nghịch đảo logic của maxmin:

newest = max(glob.iglob('upload/*.log'), key=os.path.getctime) 

Đối với mục đích của bạn nên là:

newest = min(glob.iglob('upload/*.log'), key=os.path.getctime) 
+2

Người mới tìm kiếm một cách để xác định các tập tin mới nhất cần phải cẩn thận vì getctime tối đa phải là ngày mới nhất, do đó mới nhất. Tôi tìm thấy tối đa cho các tập tin mới nhất trên Linux trên AMD64 và mâm xôi pi. Tự hỏi điều gì đang xảy ra ở đây. – Paul

+0

@Paul thực sự ... Tôi nhớ khi tôi trả lời suy nghĩ này cách tiếp cận OPs là chính xác và đề nghị 'min' trên' max' thực sự là một gợi ý để xem họ có muốn lâu đời nhất không (hoặc chỉ để xem ngược lại là cái gì họ thực sự muốn) ... –

+0

@JonClements Xin chào Tôi đang làm một cái gì đó tương tự, lấy một định dạng tập tin nhất định, nơi nó phải là mới nhất và trong một thư mục. Đã tự hỏi nếu có bất kỳ cách nào cho việc này được thực hiện chỉ bằng cách sử dụng các mô-đun 'os' mà không sử dụng 'glob'? – yan

Các vấn đề liên quan