Python mkstemp xóa tập tin

Thông thường, chúng tôi muốn tạo các tệp tạm thời để lưu dữ liệu mà chúng tôi không thể lưu trong bộ nhớ hoặc chuyển sang các chương trình bên ngoài phải đọc từ tệp. Cách rõ ràng để thực hiện việc này là tạo một tên tệp duy nhất trong một thư mục tạm thời chung của hệ thống chẳng hạn như/tmp, nhưng thực hiện đúng như vậy khó hơn tưởng tượng. Tạo một tệp hoặc thư mục tạm thời một cách an toàn có nghĩa là tuân theo một số quy tắc [xem tài liệu tham khảo để biết thêm chi tiết]. Chúng ta không bao giờ nên tự làm điều này mà hãy sử dụng đúng chức năng thư viện hiện có. Chúng tôi cũng phải cẩn thận dọn dẹp các tệp tạm thời của mình ngay cả khi gặp lỗi

Nếu chúng ta không thực hiện tất cả các biện pháp phòng ngừa này, chúng ta sẽ gặp phải một số vấn đề bảo mật nguy hiểm. Người dùng độc hại có thể dự đoán tên tệp và ghi vào thư mục chứa tệp tạm thời có thể chiếm đoạt tệp tạm thời một cách hiệu quả bằng cách tạo một liên kết tượng trưng với tên của tệp tạm thời trước khi chương trình tự tạo tệp. Điều này cho phép người dùng độc hại cung cấp dữ liệu độc hại hoặc gây ra các hành động của chương trình ảnh hưởng đến các tệp đã chọn của kẻ tấn công. Các tài liệu tham khảo có mô tả rộng hơn về những nguy cơ tiềm ẩn

Hầu hết các ngôn ngữ lập trình đều cung cấp chức năng tạo tệp tạm thời. Tuy nhiên, một số chức năng này không an toàn và không nên sử dụng. Chúng ta cần phải cẩn thận để sử dụng các chức năng an toàn

Mặc dù các API tạo tệp tạm thời an toàn hơn nhưng chúng tôi vẫn phải biết nơi chúng tôi đang tạo các tệp tạm thời. Nói chung, các tệp tạm thời phải luôn được tạo trên hệ thống tệp cục bộ. Nhiều hệ thống tệp từ xa [ví dụ: NFSv2] không hỗ trợ cờ mở cần thiết để tạo tệp tạm thời một cách an toàn

con trăn

Sử dụng

Ngăn ngừa

tệp tạm thời. Tập tin tạm thời

tệp tạm thời. mktemp

tệp tạm thời. Được đặt tênTệp tạm thời

mở

tệp tạm thời. SpoolTệp Tạm Thời

tệp tạm thời. mkstemp

tệp tạm thời. mkdtemp

tệp tạm thời. Tệp tạm thời nên được sử dụng bất cứ khi nào có thể. Ngoài việc tạo các tệp tạm thời một cách an toàn, nó còn ẩn tệp và tự động dọn dẹp tệp

Không đúng

Việc tạo các tệp tạm thời với các đường dẫn có thể dự đoán được khiến chúng có thể bị tấn công theo thời gian kiểm tra, thời gian sử dụng [TOCTOU]. Đưa ra đoạn mã sau, kẻ tấn công có thể đặt trước một tệp tại vị trí đã chỉ định

import os
import tempfile

# This will most certainly put you at risk
tmp = os.path.join[tempfile.gettempdir[], filename]
if not os.path.exists[tmp]:
    with open[tmp, "w"] file:
        file.write["defaults"]

Ngoài ra còn có một phương thức không an toàn trong thư viện chuẩn Python không thể được sử dụng theo cách an toàn để tạo tạo tệp tạm thời

import os
import tempfile

open[tempfile.mktemp[], "w"]

Cuối cùng, có nhiều cách chúng tôi có thể cố gắng tạo một tên tệp an toàn sẽ không an toàn và dễ đoán

filename = "{}/{}.tmp".format[tempfile.gettempdir[], os.getpid[]]
open[filename, "w"]

Chính xác

Thư viện chuẩn Python cung cấp một số cách an toàn để tạo các tệp và thư mục tạm thời. Sau đây là những ví dụ về cách bạn có thể sử dụng chúng

Tạo tập tin

import os
import tempfile

# Use the TemporaryFile context manager for easy clean-up
with tempfile.TemporaryFile[] as tmp:
    # Do stuff with tmp
    tmp.write['stuff']

# Clean up a NamedTemporaryFile on your own
# delete=True means the file will be deleted on close
tmp = tempfile.NamedTemporaryFile[delete=True]
try:
    # do stuff with temp
    tmp.write['stuff']
finally:
    tmp.close[]  # deletes the file

# Handle opening the file yourself. This makes clean-up
# more complex as you must watch out for exceptions
fd, path = tempfile.mkstemp[]
try:
    with os.fdopen[fd, 'w'] as tmp:
        # do stuff with temp file
        tmp.write['stuff']
finally:
    os.remove[path]

Chúng tôi cũng có thể tạo một thư mục tạm thời một cách an toàn và tạo các tệp tạm thời bên trong nó. Chúng ta cần đặt ô trước khi tạo tệp để đảm bảo các quyền trên tệp chỉ cho phép người tạo quyền truy cập đọc và ghi

import os
import tempfile

tmpdir = tempfile.mkdtemp[]
predictable_filename = 'myfile'

# Ensure the file is read/write by the creator only
saved_umask = os.umask[0077]

path = os.path.join[tmpdir, predictable_filename]
print path
try:
    with open[path, "w"] as tmp:
        tmp.write["secrets!"]
except IOError as e:
    print 'IOError'
else:
    os.remove[path]
finally:
    os.umask[saved_umask]
    os.rmdir[tmpdir]

Hậu quả

  • Chương trình có thể bị lừa để thực hiện các hành động đối với tệp sai hoặc sử dụng tệp độc hại thay vì tệp tạm thời dự kiến

    Tôi đang cố gắng quay lại Python và tôi không chắc bắt đầu từ đâu, nhưng tôi muốn tải xuống tệp nén cục bộ zip xuống tệp tạm thời, trích xuất tệp và sau đó hiển thị danh sách tệp [là 99,99% tệp CSV thời gian . Tôi muốn liệt kê các tệp để tôi có thể xử lý thêm một số tệp trong các tệp dựa trên logic với lợi ích của thư mục TEMP đã bị xóa tự động

    Nội dung chính Hiển thị

    • Trích xuất tất cả các tệp từ tệp zip vào thư mục hiện tại
    • Trích xuất tất cả các tệp từ tệp zip sang các thư mục khác nhau
    • Trích xuất một vài tệp từ một tệp zip dựa trên điều kiện
    • Làm cách nào để trích xuất một tệp zip trong Python?
    • Làm cách nào để tạo tệp TMP trong Python?
    • Làm cách nào để tạo một thư mục tạm thời trong Python?
    • Làm cách nào để trích xuất tệp zip trong máy tính xách tay Jupyter?

    Tôi có thể làm hầu hết mọi người ở trên trong R khá ngắn gọn, nhưng yêu cầu của tôi là ánh xạ ý tưởng này đến với Python và từ các tìm kiếm trên Google ban đầu của tôi, các giải pháp mà tôi thấy như không đơn

    Mọi sự giúp đỡ sẽ rất được trân trọng

    Hỏi ngày 17 tháng 4 năm 2019 lúc 2. 09 17/04/2019 lúc 2. 09

    Btibert3Btibert3 Btibert3

    37. 6K44 Huy hiệu vàng126 Huy hiệu bạc167 Huy hiệu đồng44 huy hiệu vàng126 huy hiệu bạc167 huy hiệu đồng

    1

    Chúng tôi bắt đầu bằng cách tải xuống tệp qua các yêu cầu

    import requests
    
    results = requests.get['']
    with open['/tmp/zip_folder.zip', 'wb'] as f:
        f.write[results.content]
    

    Sau đó chúng tôi trích xuất tệp zip vào /tmp bằng zipfile

    import zipfile
    file = zipfile.ZipFile['/tmp/zip_folder.zip']
    file.extractall[path='/tmp']
    

    Sau đó chúng tôi liệt kê các tập tin

    files = os.listdir['/tmp/zip_folder']
    for file in files:
        if 'csv' in file:
            print[file]
    

    Đã trả lời ngày 17 tháng 4 năm 2019 lúc 2. 41 17/04/2019 lúc 2. 41

    3

    Trong bài viết này, chúng tôi sẽ thảo luận về các cách khác nhau để giải nén hoặc trích xuất đơn, nhiều hoặc tất cả các tệp từ kho lưu trữ zip đến thư mục hiện tại hoặc khác nhau

    Trong mô-đun Zipfile của Python, lớp Zipfile cung cấp chức năng thành viên để trích xuất tất cả nội dung từ kho lưu trữ zip,

    ________số 8

    Nó chấp nhận các đối số sau

    • thành viên. Full name of file will be quote export. Nó phải là một từ danh sách các tên tệp được lưu trữ được trả về bởi zipfile. danh sách tên []. vị trí cần trích xuất tệp zip, nếu không được cung cấp, nó sẽ trích xuất nội dung trong thư mục hiện tại
    • thành viên. Danh sách các tập tin sẽ được trích xuất. Nó sẽ trích xuất tất cả các tệp trong zip nếu các đối số này không được cung cấp. . danh sách các tập tin được giải nén. Nó sẽ giải nén tất cả các tệp trong zip nếu đối số này không được cung cấp
    • NKT. Nếu tệp zip được mã hóa, hãy chuyển mật khẩu trong mặc định đối số này là không có. . Nếu tệp zip được mã hóa thì chuyển mật khẩu trong đối số này mặc định là Không có

    Modul request

    from zipfile import ZipFile

    Hãy sử dụng điều này để trích xuất tất cả nội dung từ các tệp zip

    Trích xuất tất cả các tệp từ tệp zip vào thư mục hiện tại

    Giả sử chúng ta có một tệp zip 'sample. khóa kéo. Trong thư mục hiện tại của chúng tôi, hãy xem cách trích xuất tất cả các tệp từ nó. Để giải nén nó trước tiên hãy tạo tệp zip đối tượng bằng cách mở tệp zip ở chế độ đọc và sau đó gọi trích xuất [] trên đối tượng đó, tức là.
    Để giải nén nó, trước tiên hãy tạo một đối tượng ZipFile bằng cách mở tệp zip ở chế độ đọc và sau đó gọi extractall[] trên đối tượng đó i. e.

    import os
    import tempfile
    
    open[tempfile.mktemp[], "w"]
    
    0

    Nó sẽ xuất tất cả các tệp trong zip tại thư mục hiện tại.  

    Quảng cáo

    Trích xuất tất cả các tệp từ tệp zip sang các thư mục khác nhau

    Để trích xuất tất cả các tệp từ tệp ZIP sang một thư mục khác, chúng ta có thể chuyển vị trí đích dưới dạng đối số trong Extractall []. Đường dẫn có thể là tương đối hoặc tuyệt đối

    import os
    import tempfile
    
    open[tempfile.mktemp[], "w"]
    
    1

    Nó sẽ trích xuất tất cả các tệp trong 'mẫu. nén, trong  . thư mục tạm thời

    Trích xuất một vài tệp từ một tệp zip dựa trên điều kiện

    Giả sử chúng ta có một tệp zip rất lớn và chúng ta cần một vài tệp từ hàng ngàn tệp trong kho lưu trữ. Giải nén tất cả các tập tin từ zip có thể mất vài phút. Nhưng nếu chỉ quan tâm đến một vài tệp được lưu trữ, thì  

    Trong mô-đun Zipfile của Python, lớp Zipfile cung cấp chức năng thành viên để trích xuất một đơn từ tệp zip,

    import os
    import tempfile
    
    open[tempfile.mktemp[], "w"]
    
    2

    Nó chấp nhận các đối số sau

    • thành viên. Full name of file will be quote export. Nó phải là một từ danh sách các tên tệp được lưu trữ được trả về bởi zipfile. danh sách tên []. Tên đầy đủ của tập tin được trích xuất. Nó phải là một từ danh sách tên tệp lưu trữ được trả về bởi ZipFile. danh sách tên[]
    • Đường dẫn. Vị trí cần trích xuất tệp zip, nếu không được cung cấp, nó sẽ trích xuất tệp trong thư mục hiện tại. vị trí cần giải nén tệp zip, nếu không được cung cấp, nó sẽ giải nén tệp trong thư mục hiện tại
    • NKT. Nếu tệp zip được mã hóa, hãy chuyển mật khẩu trong mặc định đối số này là không có. Nếu tệp zip được mã hóa thì chuyển mật khẩu trong đối số này mặc định là Không có

    Vui lòng sử dụng điều này để chỉ xuất các tệp CSV từ tệp zip, tức là

    import os
    import tempfile
    
    open[tempfile.mktemp[], "w"]
    
    3

    Nó sẽ chỉ trích xuất các tệp CSV từ kho lưu trữ zip đã cho

    Ví dụ hoàn chỉnh như sau,

    import os
    import tempfile
    
    open[tempfile.mktemp[], "w"]
    
    4& nbsp;
     

    Làm cách nào để trích xuất một tệp zip trong Python?

    Python3. # vào một vị trí cụ thể. Nhập mô-đun zipfile Tạo đối tượng tệp ZIP bằng lớp ZipFile. Gọi phương thức trích xuất [] trên đối tượng tệp zip và truyền tên của tệp để được trích xuất xuất và đường dẫn nơi tệp cần được trích xuất và trích xuất tệp cụ thể có thể có trong tệp zip. Gọi phương thức extract[] trên đối tượng tệp zip và chuyển tên của tệp cần giải nén và đường dẫn nơi tệp cần được giải nén và Giải nén tệp cụ thể có trong zip< . .

    Làm cách nào để tạo tệp TMP trong Python?

    Tạo các tập tin tạm thời. .

    Đầu tiên, chúng ta phải nhập tempfile sau đó tệp được tạo bằng hàm tạm thời tệp []

    Tệp được mở trong chế độ W+B [đọc và ghi vào tệp mở] theo mặc định

    Hàm này tạo tệp tạm thời trong thư mục tạm thời và trả về một tệp đối tượng

    Làm cách nào để tạo một thư mục tạm thời trong Python?

    Papa time [] Hàm này tạo một tệp tạm thời trong thư mục TEMP và trả về một tệp đối tượng, tương tự như hàm Open-in [] tích hợp

    Có thể đặt tênTemdyFile [] Hàm này tương tự như hàm tạm thời []

    Tạm thờiDirectory[] Hàm này tạo ra một thư mục tạm thời

    Mkstemp []

    mkdtemp[]

    gettempdir[]

    Làm cách nào để trích xuất tệp zip trong máy tính xách tay Jupyter?

    Bài viết này sẽ hiển thị thông tin qua các ví dụ về cách giải quyết cách trích xuất tệp zip trong Notebook Jupyter lỗi. .

    Đã nén = [["A", 1], ["B", 2]]

    đã giải nén_object = zip [*zipped]

    unzipped_list = list [unzipped_object] các phần tử được ghép nối riêng biệt trong tuple để phân tách các bộ dữ liệu

Chủ Đề