Membaca dan Menulis File dalam Konteks Agen
open(), pathlib.Path, serta membaca file CSV/JSON/TXT dari alat agen.
Membaca dan Menulis File dalam Konteks Agen adalah pelajaran AI Agents gratis di CoddyKit. Ini adalah pelajaran 1 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar AI Agents, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus AI Agents mencakup 4 pelajaran total.
Mengapa Operasi Berkas Penting bagi Agen
Agen sering kali perlu membaca konfigurasi, menyimpan hasil sementara, dan menulis laporan keluaran. Python menyediakan dua cara utama untuk bekerja dengan berkas: fungsi bawaan open() dan modul pengelolaan jalur modern. Keduanya penting untuk dipahami.
Setiap operasi berkas harus menggunakan pengelola konteks (pernyataan with) untuk memastikan berkas ditutup meskipun terjadi kesalahan.
with open('config.txt', 'w', encoding='utf-8') as f:
f.write('model=gpt-4o-mini\nmax_steps=20\n')
with open('config.txt', 'r', encoding='utf-8') as f:
content = f.read()
from pathlib import Path
content = Path('config.txt').read_text(encoding='utf-8')
print(content)Membaca Berkas dengan open()
Fungsi open() menerima nama berkas dan mode. Untuk membaca teks, gunakan mode 'r'. Anda dapat membaca seluruh berkas sekaligus dengan .read(), membacanya baris demi baris dengan .readline(), atau memasukkan semua baris ke dalam daftar dengan .readlines().
Selalu tentukan encoding='utf-8' untuk menghindari masalah pengodean yang berbeda-beda antarplatform.
with open('report.txt', 'w', encoding='utf-8') as f:
f.write('Quarterly agent report body text.')
with open('large_log.txt', 'w', encoding='utf-8') as f:
f.write('INFO: started\nERROR: timeout\nINFO: done\n')
with open('tasks.txt', 'w', encoding='utf-8') as f:
f.write('task one\ntask two\n')
with open('report.txt', 'r', encoding='utf-8') as f:
full_text = f.read()
print(f'Read {len(full_text)} characters')
with open('large_log.txt', 'r', encoding='utf-8') as f:
for line in f:
line = line.rstrip('\n')
if 'ERROR' in line:
print('Found error:', line)
with open('tasks.txt', 'r', encoding='utf-8') as f:
tasks = f.readlines()
tasks = [t.strip() for t in tasks]
print('Tasks:', tasks)Menulis Berkas dengan open()
Gunakan mode 'w' untuk menulis (membuat atau menimpa), 'a' untuk menambahkan, dan 'x' untuk membuat secara eksklusif (gagal jika berkas sudah ada). Mode 'w' akan memotong isi berkas terlebih dahulu—berhati-hatilah terhadap data yang sudah ada.
# Write a new file (or overwrite)
results = ['Task 1 complete', 'Task 2 complete', 'Task 3 failed']
with open('results.txt', 'w', encoding='utf-8') as f:
for result in results:
f.write(result + '\n')
# Append to existing file (add without overwriting)
with open('agent_log.txt', 'a', encoding='utf-8') as f:
f.write('2026-05-29 14:30: Agent completed batch\n')
# Create exclusively — error if file already exists
try:
with open('unique_report.txt', 'x', encoding='utf-8') as f:
f.write('This file is new')
except FileExistsError:
print('File already exists, skipping')
# --- demo ---
print('results.txt contents:')
with open('results.txt', encoding='utf-8') as f:
print(f.read())
# Try the exclusive create again now that the file exists
try:
with open('unique_report.txt', 'x', encoding='utf-8') as f:
f.write('This file is new')
except FileExistsError:
print('File already exists, skipping')
pathlib.Path — Operasi Berkas Modern
pathlib.Path menyediakan pendekatan berorientasi objek untuk jalur berkas. Pendekatan ini lebih mudah dibaca daripada os.path dan secara otomatis menangani pemisah jalur lintas platform. Untuk operasi baca/tulis sederhana, read_text() dan write_text() merupakan pendekatan yang paling bersih.
from pathlib import Path
base = Path('agent_workspace')
base.mkdir(exist_ok=True)
config_file = base / 'config.json'
config_file.write_text('{"model": "gpt-4o-mini"}', encoding='utf-8')
if config_file.exists():
content = config_file.read_text(encoding='utf-8')
print('Config:', content)
output = base / 'output' / 'report.txt'
output.parent.mkdir(parents=True, exist_ok=True)
output.write_text('Agent report\nLine 2', encoding='utf-8')
Path('image.png').write_bytes(b'\x89PNG\r\n\x1a\n' + bytes(range(100)))
binary_data = Path('image.png').read_bytes()
print(f'File size: {len(binary_data)} bytes')Membaca dan Menulis Berkas JSON
Agen sering bertukar data terstruktur dalam bentuk berkas JSON. Gunakan json.load() untuk mengurai berkas JSON dan json.dump() untuk menulisnya. Selalu gunakan indent=2 agar keluaran mudah dibaca manusia dan ensure_ascii=False untuk mempertahankan karakter Unicode.
import json
from pathlib import Path
config_path = Path('agent_config.json')
config_path.write_text(json.dumps({'max_retries': 5, 'model': 'gpt-4o-mini'}), encoding='utf-8')
with open(config_path, 'r', encoding='utf-8') as f:
config = json.load(f)
print('Max retries:', config.get('max_retries', 3))
print('Model:', config.get('model', 'gpt-4o-mini'))
results = {
'run_id': 'run-001',
'status': 'completed',
'items_processed': 142,
'errors': []
}
with open('results.json', 'w', encoding='utf-8') as f:
json.dump(results, f, indent=2, ensure_ascii=False)
print('Results written to results.json')Pengelola Konteks — Cara yang Tepat
Pernyataan with (pengelola konteks) menjamin berkas ditutup saat blok berakhir — bahkan jika terjadi pengecualian di tengah pembacaan. Tanpanya, berkas dapat tetap terbuka dan menyebabkan kebocoran deskriptor berkas, yang dapat memicu kerusakan pada sistem dengan batas jumlah pegangan berkas.
with open('data.txt', 'w', encoding='utf-8') as f:
f.write('sample content')
f = open('data.txt', 'r')
try:
content = f.read()
finally:
f.close()
with open('data.txt', 'r', encoding='utf-8') as f:
content = f.read()
with open('input.txt', 'w', encoding='utf-8') as f:
f.write('hello\nworld\n')
with open('input.txt', 'r') as infile, \
open('output.txt', 'w') as outfile:
for line in infile:
processed = line.upper()
outfile.write(processed)
print('Done:', content)Bekerja dengan Berkas Biner
Gunakan mode 'rb' untuk membaca berkas biner (gambar, PDF, audio) dan 'wb' untuk menulisnya. Jangan pernah mencoba mendekode konten biner sebagai teks — gunakan read_bytes()/write_bytes() dengan pathlib atau mode biner dengan open().
from pathlib import Path
import base64
image_path = Path('screenshot.png')
image_path.write_bytes(b'\x89PNG\r\n\x1a\n' + bytes(range(50)))
image_bytes = image_path.read_bytes()
print(f'Image size: {len(image_bytes)} bytes')
image_b64 = base64.b64encode(image_bytes).decode('utf-8')
print(f'Base64 length: {len(image_b64)}')
response_bytes = b'...binary content from API...'
output_path = Path('output') / 'generated_image.png'
output_path.parent.mkdir(exist_ok=True)
output_path.write_bytes(response_bytes)
print('Wrote', output_path)Menangani Masalah Pengodean dan Baris Baru
Sistem yang berbeda menggunakan karakter baris baru yang berbeda (\n di Linux/macOS, \r\n di Windows). Selalu tentukan encoding='utf-8' dan biarkan Python menangani baris baru dengan newline=None (nilai bawaan). Untuk berkas dengan BOM (penanda urutan byte), gunakan encoding='utf-8-sig'.
with open('data.txt', 'w', encoding='utf-8') as f:
f.write('hello world')
with open('windows_export.csv', 'wb') as f:
f.write('name,email\n'.encode('utf-8'))
with open('unknown_encoding.txt', 'wb') as f:
f.write('cafe resume'.encode('latin-1'))
with open('data.txt', 'r', encoding='utf-8') as f:
text = f.read()
with open('windows_export.csv', 'r', encoding='utf-8-sig') as f:
content = f.read()
try:
with open('unknown_encoding.txt', 'r', encoding='utf-8') as f:
text = f.read()
except UnicodeDecodeError:
with open('unknown_encoding.txt', 'r',
encoding='utf-8', errors='replace') as f:
text = f.read()
print('Warning: file had encoding errors (replaced with ?)')
print('All reads completed. csv content:', repr(content))Pemrosesan Efisien Baris demi Baris
Untuk berkas besar (berkas log, himpunan data), hindari memuat semuanya ke memori dengan .read(). Lakukan iterasi langsung pada objek berkas — Python membaca satu baris setiap kali, sehingga penggunaan memori tetap konstan terlepas dari ukuran berkas.
from pathlib import Path
def process_large_log(log_path):
error_count = 0
processed = 0
with open(log_path, 'r', encoding='utf-8') as f:
for line in f: # reads one line at a time
line = line.strip()
if not line:
continue
processed += 1
if '[ERROR]' in line:
error_count += 1
# Process error immediately without storing all lines
handle_error(line)
print(f'Processed {processed} lines, {error_count} errors')
def handle_error(line):
print(f'Error found: {line[:80]}')
# --- demo ---
with open('demo_agent.log', 'w', encoding='utf-8') as f:
f.write('[INFO] agent started\n')
f.write('[ERROR] timeout calling tool search_web\n')
f.write('[INFO] retrying\n')
f.write('[ERROR] tool search_web failed again\n')
process_large_log('demo_agent.log')
Membuat dan Mengelola Direktori
Sebelum menulis berkas, pastikan direktori induknya ada. Gunakan Path.mkdir(parents=True, exist_ok=True) untuk membuat direktori bersarang tanpa galat jika direktori tersebut sudah ada. Ini merupakan langkah penyiapan umum di awal agen apa pun yang menghasilkan berkas keluaran.
from pathlib import Path
import datetime
# Create output directory structure
today = datetime.date.today().isoformat() # '2026-05-29'
output_dir = Path('agent_output') / today / 'reports'
output_dir.mkdir(parents=True, exist_ok=True)
print(f'Output directory: {output_dir}')
# Now write files safely
for i in range(3):
report_path = output_dir / f'report_{i:02d}.json'
report_path.write_text(
'{"status": "ok"}',
encoding='utf-8'
)
# List all created files
for f in output_dir.iterdir():
print(f' {f.name}: {f.stat().st_size} bytes')Praktik Terbaik Jalur Berkas untuk Agen
Agen sebaiknya menggunakan jalur absolut atau jalur yang relatif terhadap direktori dasar yang telah ditentukan dengan jelas. Jangan pernah bergantung pada direktori kerja saat ini (./) karena agen sering diluncurkan dari lokasi yang berbeda. Gunakan Path(__file__).parent untuk memperoleh direktori skrip sebagai dasar.
from pathlib import Path
# Get absolute path relative to THIS script's location
SCRIPT_DIR = Path(__file__).parent
DATA_DIR = SCRIPT_DIR / 'data'
OUTPUT_DIR = SCRIPT_DIR / 'output'
# Always resolve to absolute path before use
config = DATA_DIR / 'config.json'
print('Config path:', config.resolve())
# Check if file exists before reading
if config.exists():
import json
with open(config, 'r', encoding='utf-8') as f:
settings = json.load(f)
else:
print(f'Config not found at {config.resolve()}')
settings = {}
# Safe output path
result_path = (OUTPUT_DIR / 'result.json').resolve()
print('Will write to:', result_path)Pemeriksaan Cepat: Pengelola Konteks
Uji pemahaman Anda tentang praktik terbaik operasi masukan/keluaran berkas.
Ringkasan Operasi Berkas
Sekarang Anda memiliki dasar yang kuat untuk operasi berkas dalam kode agen:
- Gunakan
open('file', 'r', encoding='utf-8')untuk membaca,'w'untuk menulis, dan'a'untuk menambahkan - Selalu gunakan pernyataan with untuk memastikan berkas ditutup
- pathlib.Path menyediakan penanganan jalur yang bersih dan lintas platform dengan
read_text()/write_text() - Gunakan
json.load(f)/json.dump(data, f, indent=2)untuk data terstruktur - Lakukan iterasi pada berkas baris demi baris untuk berkas besar guna meminimalkan penggunaan memori
- Gunakan
Path(__file__).parentsebagai direktori dasar Anda — jangan pernah bergantung pada direktori kerja saat ini
Pertanyaan yang Sering Diajukan
Apakah pelajaran “Membaca dan Menulis File dalam Konteks Agen” gratis?
Ya — teks lengkap “Membaca dan Menulis File dalam Konteks Agen” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus AI Agents, upgrade ke CoddyKit PRO. Kursus AI Agents mencakup 4 pelajaran total.
Apa yang akan aku pelajari di “Membaca dan Menulis File dalam Konteks Agen”?
open(), pathlib.Path, serta membaca file CSV/JSON/TXT dari alat agen. Kamu berlatih AI Agents dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.
Apakah aku perlu pengalaman untuk memulai AI Agents?
Tidak diperlukan pengalaman sebelumnya. AI Agents di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 1 dari 4.
Berapa lama pelajaran “Membaca dan Menulis File dalam Konteks Agen” memakan waktu?
Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.
Bisakah aku menulis dan menjalankan kode dalam pelajaran AI Agents ini?
Ya. Setiap pelajaran AI Agents menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.
Semua pelajaran dalam kursus ini
- Membaca dan Menulis File dalam Konteks Agen
- Penelusuran Direktori dan Penemuan File
- Penanganan Format File: CSV, JSON, dan TXT
- Operasi File yang Aman dengan Penanganan Error