Tôi cần cập nhật tệp. Tôi đọc nó và viết nó ra với những thay đổi. Tuy nhiên, tôi muốn viết vào một tập tin tạm thời và đổi tên nó thành vị trí.Trong python, tạo một tempfile trong cùng thư mục với một tệp khác?
temp = tempfile.NamedTemporaryFile()
tempname = temp.name
temp.write(new_data)
temp.close()
os.rename(tempname, data_file_name)
Vấn đề là tempfile.NamedTemporaryFile()
tạo tệp tạm thời trong /tmp
là hệ thống tệp khác. Điều này có nghĩa là os.rename()
không thành công. Nếu tôi sử dụng shlib.move()
thay vào đó thì tôi không có bản cập nhật nguyên tử "mv" cung cấp (cho các tệp trong cùng hệ thống tệp, yadda, yadda, v.v.)
Tôi biết tempfile.NamedTemporaryFile()
có thông số "dir", nhưng data_file_name có thể là "foo.txt" trong trường hợp dir = '.'; hoặc data_file_name có thể là "/path/to/the/data/foo.txt
" trong trường hợp đó dir = "/path/to/the/data
".
Điều tôi thực sự muốn là tệp tạm thời là data_file_name + "một số dữ liệu ngẫu nhiên". Điều này sẽ có lợi ích của thất bại trong một cách mà sẽ để lại đằng sau những manh mối hữu ích.
Đề xuất?
Tại sao bạn sử dụng tệp tạm thời ở địa điểm đầu tiên, nếu bạn không muốn tệp đó được đặt trong thư mục cho tệp tạm thời? Những gì nói chống lại bằng cách sử dụng các tập tin bình thường? –
David: Tôi muốn sử dụng một tập tin tạm thời bởi vì tôi muốn cập nhật là nguyên tử (hoặc là nguyên tử như một có thể được với os.rename()). Tức là, nếu hệ thống tệp đầy hoặc có một số vấn đề khác, tôi không muốn tệp được viết một nửa. – TomOnTime
Vâng, điều này có thể khó đạt được, vì bạn không bao giờ thực sự biết, nếu các tệp được ghi vào một thư mục khác nằm trên cùng một hệ thống tệp làm thư mục cục bộ của bạn. Tôi thấy lợi thế của việc tổ chức đầu ra của bạn trong một số loại cam kết. Để tương đối chắc chắn rằng đây là trường hợp, tôi có lẽ sẽ quản lý thư mục tạm thời của riêng tôi - mặc dù bạn sẽ chăm sóc cho việc dọn dẹp thư mục này. –