2011-12-20 47 views
21

tôi có chức năng này chỉ dẫn đến con đường của một tập tin:tạo một file tmp trong python

some_obj.file_name(FILE_PATH) 

nơi FILE_PATH là một chuỗi các con đường của một tập tin, ví dụ 'H: /path/FILE_NAME.ext '

tôi muốn tạo ra một tập tin FILE_NAME.ext bên trong kịch bản python của tôi với nội dung của một string:

some_string = 'this is some content' 

Làm thế nào để làm việc này? Tập lệnh python sẽ được đặt bên trong một hộp linux. Tôi nghĩ rằng tôi phải sử dụng

import tempfile 
import os 
import sys 
os.getcwd() 

hoặc điều gì đó dọc theo các dòng đó. Cảm ơn!

+0

Open with 'w' và sau đó đóng nó lại, sử dụng 'os.touch (fname)'. – khachik

+0

Tại sao bạn cần tệp tạm thời? – plaes

+0

Tôi có một hàm gọi FILE_PATH của đối tượng, vì vậy nó cần phải có ở đó – SuperString

Trả lời

24

Có một tempfile module cho trăn, nhưng một sáng tạo tập tin đơn giản cũng làm các trick:

new_file = open("path/to/FILE_NAME.ext", "w") 

Bây giờ bạn có thể viết thư cho nó bằng cách sử dụng write phương pháp:

new_file.write('this is some content') 

Với mô-đun tempfile có thể trông giống như sau:

import tempfile 

new_file, filename = tempfile.mkstemp() 

print(filename) 

os.write(new_file, "this is some content") 
os.close(new_file) 

Với mkstemp bạn chịu trách nhiệm xóa tệp sau khi bạn đã hoàn tất. Với các đối số khác, bạn có thể ảnh hưởng đến thư mục và tên của tệp.


CẬP NHẬT

Như đúng là chỉ ra bởi Emmet Speer, có security considerations khi sử dụng mkstemp, vì mã khách hàng là trách nhiệm bế mạc/dọn dẹp các tập tin được tạo ra. Một cách tốt hơn để xử lý nó là đoạn mã sau (như lấy từ link):

import os 

fd, path = tempfile.mkstemp() 
try: 
    with os.fdopen(fd, 'w') as tmp: 
     # do stuff with temp file 
     tmp.write('stuff') 
finally: 
    os.remove(path) 

Các os.fdopen kết thúc tốt đẹp mô tả tập tin trong một đối tượng tập tin Python, mà đóng cửa tự động khi with thoát. Cuộc gọi đến os.remove xóa tệp khi không còn cần thiết nữa.

+0

Tham số thứ hai của 'mkstemp' là tên tệp. Tôi nghĩ điều đó có thể quan trọng đối với một vài người. Bạn vui lòng đề cập đến nó? –

+0

@MartinThoma: Hm, các tài liệu (https://docs.python.org/3/library/tempfile.html#tempfile.mkstemp) nói cách khác: các tham số của 'mkstemp' là' tiền tố', 'hậu tố',' dir' và 'text'. Chắc chắn, tất cả đều ảnh hưởng đến tên tập tin cuối cùng, nhưng để thực sự xác định tên tập tin hoàn chỉnh là không thể. – Constantinius

+0

@Constantinus: Rất tiếc, tôi không muốn viết thông số nhưng trả về giá trị. –

62

Tôi nghĩ rằng bạn đang tìm kiếm này: http://docs.python.org/library/tempfile.html

import tempfile 
f = tempfile.NamedTemporaryFile(delete=False) 
f.close() 
f.name 
+2

đây là câu trả lời hay dựa trên chủ đề của câu hỏi, mà google lưu ý, thay vì vấn đề cụ thể của SuperString –

+0

Trong duckduckgo là người đầu tiên: D – ZiTAL