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:
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.
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
:
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.
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:
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.
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:
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.
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