2011-10-21 34 views

Trả lời

19

Bạn không thể xóa bộ xử lý tệp, chỉ đường dẫn tệp vì nhiều đường dẫn có thể refer to the same file và một số tệp (như ổ cắm) thậm chí không có đường dẫn. Do đó:

import os 
f = open('/tmp/test.txt', 'w') 
os.unlink(f.name) 
# You can still use f here, it's just only visible for people having a handle. 
# close it when you're finished. 

Tuy nhiên, bạn không nên làm điều đó - có một cách tốt hơn để giải quyết vấn đề của bạn. Sử dụng mô-đun tempfile tự động xóa tệp hoặc chỉ ghi vào /dev/null nếu bạn chỉ cần xử lý tệp và không quan tâm đến nội dung đang được ghi.

+2

+1 - Tôi nghi ngờ tempfile thực sự là điều người hỏi cần. –

4

Bạn có thể lấy tên tập tin từ name thành viên và xóa như thường lệ:

In [1]: f = open('/tmp/test.txt', 'w') 

In [2]: f.name 
Out[2]: '/tmp/test.txt' 
2

câu trả lời đầy đủ:

f = open('/tmp/test.txt', 'w') 
f.close() 

os.remove(f.name) 

Bạn nên đóng tập tin trước khi xóa (tài liệu nói rằng nó ném ngoại lệ theo Windows nếu tệp được mở - không kiểm tra điều này). f trong trường hợp của bạn chỉ là một xử lý. Nó không phải là một tập tin chính nó, vì vậy bạn không thể xóa nó trực tiếp.

0

Tùy thuộc vào nhu cầu của bạn, bạn cũng có thể thoát ra mà không cần tạo tệp nào. Nếu tất cả những gì bạn cần là một đối tượng giống như tệp, hầu hết thời gian bạn có thể sử dụng một thể hiện của io.StringIO thay cho một tệp. Điều này có thể hữu ích để ngăn chặn các hoạt động i/o không cần thiết.

>>> from io import StringIO 
>>> f=StringIO() 
>>> f.write(u'Hello, world!') 
13 
>>> f.seek(0) 
0 
>>> f.read() 
u'Hello, world!' 
>>> f.close() 
Các vấn đề liên quan