Tôi đang làm việc trên một tập lệnh Python cần tạo khoảng 50 tệp tạm thời riêng biệt, tất cả đều được nối thường xuyên trong quá trình tập lệnh và được hợp nhất vào cuối. Tôi chắc chắn rằng mô-đun tempfile
có thể làm những gì tôi cần, nhưng tôi đã không thể tìm ra cách đọc tài liệu.Làm thế nào để sử dụng tempfile của Python.NamedTemporaryFile()?
Tôi muốn sử dụng các tệp tạm thời - trái với các biến - để bảo tồn bộ nhớ hệ thống, vì các khối dữ liệu này lớn lên khi tập lệnh xử lý hàng chục nghìn tệp khác.
Các đoạn mã sau đây là hack Tôi hiện đang sử dụng để tạo ra những tập tin này (untemporarily) trong một thư mục untemporary:
item = (string from another file) # string must id file for future use
tmpfile = 'tmpfiles/' + item
if item not in totalitems:
totalitems.add(item)
with open(tmpfile, 'w') as itemfile:
output = some stuff
tmpfile.write(output)
else:
with open(tmpfile, 'a') as itemfile:
output = different stuff
tmpfile.write(output)
Tôi nghĩ rằng những gì tôi cần là tempfile.NamedTemporaryFile()
. Theo số documentation:
Tên đó có thể được lấy từ tên thành viên của đối tượng tệp.
Thật không may, tôi không hiểu điều đó có nghĩa là gì. Tôi chỉ cần có thể gọi lại từng tập tin sau khi tôi chạy lại "mục" tương ứng của nó một lần nữa trong các tập tin tôi đang xử lý. Tôi cho rằng điều này là khá thẳng về phía trước và tôi chỉ là dày đặc. Trong trường hợp nó quan trọng, tôi có các phiên bản của tập lệnh này cho cả Python 2.7.1 và 3.2.3. Tôi chỉ thực sự cần một hoặc một người khác để làm việc; Tôi tạo ra cả hai chỉ là một bài tập học tập.
thể trùng lặp của [Cách tốt nhất để tạo ra tên tập tin ngẫu nhiên trong Python] (http://stackoverflow.com/questions/10501247/best-way- to-generated-random-file-name-in-python) – Joe
@Joe, Một phần của câu hỏi này dường như là bản sao của chuỗi bạn đã liên kết. Một phần của nó không phải là; xem bình luận dưới câu trả lời của Levon dưới đây. – Gregory
Tại sao bạn cần các tệp này để được đặt tên? Nếu chúng chưa được đặt tên (bị xóa trước), sẽ có ít sai sót hơn trong việc dọn dẹp. Bạn có thể chỉ cần lưu trữ đối tượng tmpfile, không phải tên của nó, và sau đó gọi 'seek (0)' để đi đến đầu để sẵn sàng đọc ... hoặc mmap nội dung của nó, hoặc truy cập nó theo cách bạn muốn. –