Traffine I/O

Bahasa Indonesia

2023-03-31

Mengelola Berkas dan Direktori Sementara dengan Modul Tempfile Python

APA itu Tempfile Module

Modul tempfile pada Python adalah alat yang kuat yang dirancang untuk membuat dan mengelola file dan direktori sementara dengan aman dan efisien. File sementara berguna dalam situasi di mana data perlu disimpan sementara selama eksekusi program atau ketika Anda ingin bekerja dengan kumpulan data besar tanpa mengonsumsi terlalu banyak memori. Modul tempfile menyediakan berbagai metode untuk membuat file sementara, file sementara bernama, direktori sementara, dan file sementara yang dispool, semuanya dilengkapi dengan mekanisme pembersihan bawaan.

TemporaryFile

Membuat file sementara menggunakan tempfile.TemporaryFile() sangat mudah. Fungsi ini menggunakan argumen opsional berikut:

python
tempfile.TemporaryFile(mode='w+b', buffering=None, encoding=None, newline=None, suffix=None, prefix=None, dir=None)
Argumen Deskripsi
mode Mode akses file, yang defaultnya adalah 'w+b' (membaca dan menulis dalam mode biner).
buffering Kebijakan buffering, yang mengikuti aturan standar untuk objek file. Jika tidak ditentukan, defaultnya adalah menggunakan kebijakan buffering default sistem.
encoding Encoding yang digunakan saat membuka file dalam mode teks. Diabaikan jika file dibuka dalam mode biner.
newline Mengontrol bagaimana newline universal bekerja. Defaultnya adalah None.
suffix Sufiks opsional untuk nama file sementara.
prefix Awalan opsional untuk nama file sementara.
dir Direktori di mana file sementara akan dibuat. Jika tidak ditentukan, defaultnya adalah direktori sementara default sistem.

Mode dan Encoding TemporaryFile

Seperti yang disebutkan sebelumnya, mode default untuk TemporaryFile adalah 'w+b', yang berarti akses membaca dan menulis dalam mode biner. Namun, Anda dapat mengubah mode menjadi 'w+t' jika Anda lebih suka bekerja dengan data teks.

Contoh

Misalkan Anda memproses file CSV besar, dan Anda perlu menyaring baris berdasarkan kriteria tertentu. Anda dapat menggunakan TemporaryFile untuk menyimpan data yang difilter sementara sebelum menulisnya ke file CSV baru.

python
import csv
import tempfile

input_file = 'large_data.csv'
output_file = 'filtered_data.csv'

with open(input_file, 'r') as csv_file:
    reader = csv.reader(csv_file)
    header = next(reader)

    with tempfile.TemporaryFile(mode='w+t', newline='') as temp_file:
        writer = csv.writer(temp_file)
        writer.writerow(header)

        for row in reader:
            if some_criteria(row):
                writer.writerow(row)

        temp_file.seek(0)

        with open(output_file, 'w') as out_file:
            out_file.writelines(temp_file.readlines())

NamedTemporaryFile

tempfile.NamedTemporaryFile() mirip dengan TemporaryFile tetapi menghasilkan file sementara bernama yang dapat diakses oleh proses lain menggunakan namanya. Fungsi ini menggunakan argumen opsional yang sama dengan TemporaryFile:

python
tempfile.NamedTemporaryFile(mode='w+b', buffering=None, encoding=None, newline=None, suffix=None, prefix=None, dir=None, delete=True)
Argument Description
delete If set to True (default), the file will be deleted when it is closed.

Mode dan Encoding NamedTemporaryFile

Mode dan opsi encoding default untuk NamedTemporaryFile sama dengan TemporaryFile. Anda dapat mengubahnya berdasarkan kebutuhan Anda.

Contoh

Misalkan Anda sedang mengerjakan aplikasi web di mana pengguna dapat mengunggah gambar untuk diproses. Anda dapat menggunakan NamedTemporaryFile untuk menyimpan sementara gambar yang diunggah sebelum diproses.

python
import os
from flask import Flask, request
from werkzeug.utils import secure_filename
import tempfile

app = Flask(__name__)

@app.route('/upload', methods=['POST'])
def upload_file():
    file = request.files['image']
    filename = secure_filename(file.filename)

    with tempfile.NamedTemporaryFile(suffix='.jpg', delete=False) as temp:
        file.save(temp.name)

        # Process the image using the temporary file
        processed_image = process_image(temp.name)

        # Remove the temporary file
        os.remove(temp.name)

    return send_file(processed_image)

if __name__ == '__main__':
    app.run()

TemporaryDirectory

tempfile.TemporaryDirectory() membuat direktori sementara yang dapat digunakan sebagai pengelola konteks. Fungsi ini menggunakan argumen opsional berikut:

python
tempfile.TemporaryDirectory(suffix=None, prefix=None, dir=None)

suffix, prefix, dan dir memiliki arti yang sama seperti pada TemporaryFile dan NamedTemporaryFile.

Contoh

Bayangkan Anda sedang mengembangkan skrip yang mengunduh beberapa file dari server remote, memprosesnya, dan kemudian menggabungkan hasilnya. Anda dapat menggunakan TemporaryDirectory untuk menyimpan dan mengelola file yang diunduh.

python
import urllib.request
import tempfile
import os

urls = ['https://example.com/file1.txt', 'https://example.com/file2.txt']
temp_dir_path = None

with tempfile.TemporaryDirectory() as temp_dir:
    temp_dir_path = temp_dir

    for url in urls:
        filename = os.path.basename(url)
        temp_file_path = os.path.join(temp_dir_path, filename)

        with urllib.request.urlopen(url) as response, open(temp_file_path, 'wb') as out_file:
            out_file.write(response.read())

    # Process and combine files from the temporary directory
    combined_result = process_files(temp_dir_path)

# Temporary directory and its contents are automatically deleted

SpooledTemporaryFile

tempfile.SpooledTemporaryFile() membuat file sementara yang disimpan di dalam memori sampai ukuran tertentu tercapai, setelah itu secara otomatis digulirkan ke disk. Fungsi ini menggunakan argumen opsional yang sama dengan TemporaryFile, dengan argumen tambahan:

python
tempfile.SpooledTemporaryFile(max_size=0, mode='w+b', buffering=None, encoding=None, newline=None, suffix=None, prefix=None, dir=None)
Argumen Deskripsi
max_size Ukuran maksimum (dalam byte) file sementara yang akan disimpan di memori sebelum digulirkan ke disk. Jika diatur ke 0 (default), file akan disimpan di memori secara tidak terbatas.

Mode dan Encoding SpooledTemporaryFile

Mode dan opsi encoding default untuk SpooledTemporaryFile sama dengan TemporaryFile dan NamedTemporaryFile. Anda dapat mengubahnya berdasarkan kebutuhan Anda.

Contoh

Misalkan Anda mengambil data JSON dari REST API, dan Anda perlu menyimpan data tersebut ke file. Anda dapat menggunakan SpooledTemporaryFile untuk menyimpan data sementara di memori dan menulisnya ke file saat ukurannya melebihi ambang batas tertentu.

python
import requests
import json
import tempfile

api_url = 'https://api.example.com/data'
output_file = 'large_data.json'
max_size = 1024 * 1024  # 1 MB

response = requests.get(api_url)
json_data = json.dumps(response.json())

with tempfile.SpooledTemporaryFile(max_size=max_size, mode='w+t', encoding='utf-8') as temp_file:
    temp_file.write(json_data)

    temp_file.seek(0)

    with open(output_file, 'w') as out_file:
        out_file.writelines(temp_file.readlines())

Referensi

https://docs.python.org/3/library/tempfile.html

Ryusei Kakujo

researchgatelinkedingithub

Focusing on data science for mobility

Bench Press 100kg!