Tôi muốn tạo tệp có đường dẫn x
bằng python. Tôi đã sử dụng os.system(y)
nơi y = 'touch %s' % (x)
. Tôi đã tìm kiếm một phiên bản phi thư mục của os.mkdir
, nhưng tôi đã không thể tìm thấy bất cứ điều gì. Có một công cụ như thế này để tạo ra một tập tin mà không cần mở nó, hoặc sử dụng hệ thống hoặc popen/subprocess?Tạo tệp trống bằng python
Trả lời
Không có cách nào để tạo ra một tập tin mà không cần mở nó
Có os.mknod("newfile.txt")
(nhưng nó đòi hỏi quyền root trên OSX). Cuộc gọi hệ thống để tạo tệp thực sự là open()
với cờ O_CREAT
. Vì vậy, không có vấn đề làm thế nào, bạn sẽ luôn luôn mở tập tin.
Vì vậy, cách dễ nhất để chỉ cần tạo một tập tin mà không cần cắt bỏ nó trong trường hợp nó tồn tại là thế này:
open(x, 'a').close()
Trên thực tế bạn có thể bỏ qua các .close()
kể từ khi GC refcounting của CPython sẽ đóng nó lại ngay sau khi tuyên bố open()
hoàn thành - nhưng nó sạch hơn để làm điều đó một cách rõ ràng và dựa vào hành vi cụ thể của CPython cũng không tốt.
Trong trường hợp bạn muốn hành vi touch
's (tức cập nhật mtime trong trường hợp tập tin tồn tại):
import os
def touch(path):
with open(path, 'a'):
os.utime(path, None)
Bạn có thể mở rộng này cũng tạo ra bất kỳ thư mục trong đường dẫn không tồn tại:
basedir = os.path.dirname(path)
if not os.path.exists(basedir):
os.makedirs(basedir)
Có vẻ tốt ... "Cắt ngắn" về bản chất là "rõ ràng", phải không? – tkbx
Có, mở một tập tin có cờ 'w' (viết) làm trống nó trong khi mở nó bằng' a' (phụ lục) thì không. – ThiefMaster
Việc tính toán lại việc đóng tệp ngay lập tức không được dựa vào. Đây không phải là vấn đề sạch sẽ, vì việc đếm ngược chỉ là một chi tiết thực hiện. Không có Python ngoại trừ CPython làm điều đó. Bạn muốn làm cho chương trình của bạn năm lần nhanh hơn với PyPy, hoặc chạy nó trong một môi trường Java/.NET với Jython/IronPython? Cũng quá xấu bạn đã không đóng những tập tin đó, bây giờ chương trình của bạn bị rò rỉ như một cái rây;) Nó đặc biệt khủng khiếp kể từ 2.5, như 'with' làm cho nó * dễ dàng hơn * để đóng tập tin kịp thời (và ngay cả khi đối mặt với ngoại lệ và tham chiếu vòng tròn) ** và ** mã trở nên rõ ràng hơn để khởi động. – delnan
Tất nhiên có cách tạo tệp mà không cần mở. Nó dễ dàng như gọi os.mknod("newfile.txt")
. Hạn chế duy nhất là cuộc gọi này yêu cầu quyền root trên OSX.
Điểm tuyệt vời. Xem thêm https://docs.python.org/3/library/os.html – poolie
- 1. Tạo tệp PNG bằng Python
- 2. Tạo tệp trống để ghi?
- 3. Cách tạo tệp PDF bằng Python
- 4. Tạo danh sách trống trong Python
- 5. Tạo một tệp trống trong C#
- 6. php exec() - mysqldump tạo một tệp trống
- 7. Nhận thời gian tạo tệp bằng Python trên linux
- 8. Tạo hình thu nhỏ từ các tệp video bằng Python
- 9. Python - Kiểm tra xem tệp có trống hay không
- 10. Tạo tệp txt mới bằng VB.NET
- 11. Cắt/cắt tệp JPG với khoảng trống bằng Java
- 12. Tạo lại cấu trúc thư mục bên trong tệp Zip bằng Java - Các thư mục trống
- 13. Lưu hình ảnh động phân tán bằng matplotlib tạo tệp video trống
- 14. Cách tạo tệp trứng Python
- 15. Tạo tệp bằng template.erb
- 16. Tạo video bằng OpenCV 2.4.0 trong python
- 17. Cookiejar trống bằng SUDS
- 18. Phát tệp MP3 bằng Python
- 19. Mã hóa tệp bằng Python
- 20. Tạo một hình ảnh RGB OpenCV mới bằng Python?
- 21. đối số trống python
- 22. Làm cách nào để tạo tệp BMP bằng Python thuần túy?
- 23. Tạo kml từ csv bằng Python
- 24. Chuyển hướng trong PHP exec gọi tạo tệp trống
- 25. Công việc Cron tạo tệp trống mỗi khi nó chạy
- 26. Cách tạo định nghĩa trống cho tệp tiêu đề
- 27. Tạo mã Python bằng pyside-uic
- 28. Tạo tệp RDF bằng tệp txt làm đầu vào
- 29. Cách đọc các ô trống của tệp excel bằng POI
- 30. Tạo SVG bằng cách sử dụng Python
Tại sao mở cửa xấu? –
@LevLevitsky vì tôi phải đóng lại: P. Tôi phải tạo hàng ngàn tệp và chỉ cần chạm vào tệp có vẻ sạch hơn. – tkbx
FYI, trong khi sử dụng một lệnh bên ngoài cho điều này luôn luôn là xấu, cách thích hợp để thực hiện nó sẽ là 'subprocess.call (['touch', x])' – ThiefMaster