Aracı Bağlamında Dosya Okuma ve Yazma
Aracı araçlarından open(), pathlib.Path ve CSV/JSON/TXT dosyalarını okuma.
Aracı Bağlamında Dosya Okuma ve Yazma, CoddyKit'te ücretsiz bir AI Agents dersidir. Bu, 4 dersinin 1. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, AI Agents öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. AI Agents kursu toplamda 4 dersten oluşur.
Dosya G/Ç'si Aracılar İçin Neden Önemlidir?
Aracıların yapılandırmayı okuması, ara sonuçları saklaması ve çıktı raporları yazması sıkça gerekir. Python, dosyalarla çalışmak için iki temel yöntem sunar: yerleşik open() işlevi ve modern pathlib modülü. Her ikisini de bilmek zorunludur.
Bir hata oluşsa bile dosyanın kapatılmasını sağlamak için her dosya işlemi bir bağlam yöneticisi (with ifadesi) kullanmalıdır.
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)open() ile Dosya Okuma
open() işlevi bir dosya adı ve bir kip alır. Metin okumak için 'r' kipini kullanın. Dosyanın tamamını tek seferde .read() ile, satır satır .readline() ile veya tüm satırları bir listeye alarak .readlines() ile okuyabilirsiniz.
Platforma özgü kodlama sorunlarını önlemek için her zaman encoding='utf-8' belirtin.
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)open() ile Dosya Yazma
Yazmak için 'w' kipini (oluşturur veya üzerine yazar), sona eklemek için 'a' kipini ve yalnızca oluşturmak için 'x' kipini kullanın (dosya mevcutsa başarısız olur). 'w' kipi önce dosyanın içeriğini siler; mevcut veriler konusunda dikkatli olun.
# 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 — Modern Dosya İşlemleri
pathlib.Path dosya yolları için nesne yönelimli bir yaklaşım sunar. os.path'ten daha okunabilirdir ve platformlar arası yol ayraçlarını otomatik olarak yönetir. Basit okuma/yazma işlemleri için read_text() ve write_text() en temiz yaklaşımdır.
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')JSON Dosyalarını Okuma ve Yazma
Ajanlar yapılandırılmış verileri sık sık JSON dosyaları aracılığıyla birbirleriyle paylaşır. Bir JSON dosyasını ayrıştırmak için json.load(), dosyaya yazmak için json.dump() kullanın. İnsanlar tarafından okunabilir çıktı için her zaman indent=2 kullanın ve Unicode karakterlerini korumak için ensure_ascii=False belirtin.
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')Bağlam Yöneticileri — Doğru Yol
with ifadesi (bağlam yöneticisi), bloktan çıkıldığında dosyanın kapatılmasını garanti eder; okuma sırasında bir istisna oluşsa bile. Bu ifade kullanılmadığında dosyalar açık kalabilir ve dosya tanımlayıcılarını tüketebilir; bu da dosya tanıtıcısı sınırı olan sistemlerde çökmelere neden olabilir.
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)İkili Dosyalarla Çalışma
İkili dosyaları (görüntüler, PDF'ler, ses dosyaları) okumak için 'rb', yazmak için 'wb' modunu kullanın. İkili içeriği metin olarak kodunu çözmeye çalışmayın; pathlib ile read_bytes()/write_bytes() ya da open() ile ikili modları kullanın.
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)Kodlama ve Satır Sonu Sorunlarını Yönetme
Farklı sistemler farklı satır sonu karakterleri kullanır (Linux/macOS'ta \n, Windows'ta \r\n). Her zaman encoding='utf-8' belirtin ve satır sonlarını newline=None (varsayılan) ile Python'un yönetmesine izin verin. BOM (bayt sırası işareti) içeren dosyalarda encoding='utf-8-sig' kullanın.
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))Satır Satır Verimli İşleme
Büyük dosyalarda (günlük dosyaları, veri kümeleri) her şeyi .read() ile belleğe yüklemekten kaçının. Doğrudan dosya nesnesi üzerinde yineleme yapın; Python her seferinde bir satır okur ve dosya boyutundan bağımsız olarak bellek kullanımını sabit tutar.
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')
Dizin Oluşturma ve Yönetimi
Dosyaları yazmadan önce üst dizinin mevcut olduğundan emin olun. İç içe dizinleri, zaten mevcut olsalar bile hata vermeden oluşturmak için Path.mkdir(parents=True, exist_ok=True) kullanın. Bu, çıktı dosyaları üreten her ajanın başlangıcında yapılan yaygın bir hazırlık adımıdır.
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')Ajanlar için Dosya Yollarında En İyi Uygulamalar
Ajanlar mutlak yollar ya da iyi tanımlanmış bir temel dizine göreli yollar kullanmalıdır. Ajanlar çoğu zaman farklı konumlardan başlatıldığı için geçerli çalışma dizinine (./) asla güvenmeyin. Betiğin dizinini temel olarak almak için Path(__file__).parent kullanın.
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)Hızlı Kontrol: Bağlam Yöneticileri
Dosya girdi/çıktısı için en iyi uygulamaları anlayıp anlamadığınızı sınayın.
Dosya Girdi/Çıktısı Özeti
Artık ajan kodunda dosya işlemleri için sağlam bir temele sahipsiniz:
- Okumak için
open('file', 'r', encoding='utf-8'), yazmak için'w', sona eklemek için'a'kullanın - Dosyaların kapatılmasını garanti etmek için her zaman with ifadesini kullanın
- pathlib.Path,
read_text()/write_text()ile temiz ve platformlar arası yol yönetimi sağlar - Yapılandırılmış veriler için
json.load(f)/json.dump(data, f, indent=2)kullanın - Bellek kullanımını en aza indirmek için büyük dosyalarda satır satır yineleme yapın
- Temel dizininiz olarak
Path(__file__).parentkullanın; cwd'ye asla güvenmeyin
Sıkça Sorulan Sorular
“Aracı Bağlamında Dosya Okuma ve Yazma” dersi ücretsiz mi?
Evet — “Aracı Bağlamında Dosya Okuma ve Yazma” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve AI Agents kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. AI Agents kursu toplamda 4 dersten oluşur.
“Aracı Bağlamında Dosya Okuma ve Yazma” dersinde ne öğreneceğim?
Aracı araçlarından open(), pathlib.Path ve CSV/JSON/TXT dosyalarını okuma. AI Agents ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.
AI Agents öğrenmeye başlamak için deneyim gerekli mi?
Önceden deneyim gerekmez. CoddyKit'te AI Agents, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 1. dersidir.
“Aracı Bağlamında Dosya Okuma ve Yazma” dersi ne kadar sürer?
Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.
Bu AI Agents dersinde kod yazıp çalıştırabilir miyim?
Evet. Her AI Agents dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.
Bu kursun tüm dersleri
- Aracı Bağlamında Dosya Okuma ve Yazma
- Dizin Geçişi ve Dosya Keşfi
- Dosya Biçimi İşleme: CSV, JSON ve TXT
- Hata İşleme ile Güvenli Dosya İşlemleri