Dosya Biçimi İşleme: CSV, JSON ve TXT
csv modülü, json.load/dump ve aracı araçları için güvenli metin kodlaması.
Dosya Biçimi İşleme: CSV, JSON ve TXT, CoddyKit'te ücretsiz bir AI Agents dersidir. Bu, 4 dersinin 3. 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.
Ajanların En Yaygın Üç Dosya Biçimi
Ajanlar sürekli olarak üç dosya biçimini okur ve yazar: tablo verileri için CSV, yapılandırılmış nesneler için JSON ve günlükler, istemler ile raporlar için düz metin. Her birinin farklı ayrıştırma gereksinimleri, uç durumları ve en iyi uygulamaları vardır. Python, üçünün de tümü için mükemmel yerleşik destek sunar.
import csv
import json
from pathlib import Path
# Detect format from extension
def read_data_file(file_path):
path = Path(file_path)
if path.suffix == '.csv':
return read_csv(path)
elif path.suffix == '.json':
return read_json(path)
elif path.suffix == '.txt':
return path.read_text(encoding='utf-8')
else:
raise ValueError(f'Unsupported format: {path.suffix}')csv.reader — Temel CSV Ayrıştırma
csv.reader, bir CSV dosyasını satır satır ayrıştırır ve her satırı dizelerden oluşan bir liste olarak döndürür. Tırnak içine alınmış alanları, alanların içindeki virgülleri ve tırnak içine alınmış değerlerin içindeki satır sonlarını doğru biçimde yönetir; kenar durumlarında bozulan virgüllere göre elle bölme yönteminin aksine.
import csv
with open('sales.csv', 'w', newline='') as f:
f.write('product,qty,price\nWidget,3,9.99\nGadget,1,19.99\n')
with open('sales.csv', 'r', encoding='utf-8', newline='') as f:
reader = csv.reader(f)
header = next(reader)
print('Columns:', header)
for row in reader:
product = row[0]
quantity = int(row[1])
price = float(row[2])
print(f'{product}: {quantity} units at ${price}')csv.DictReader — Satırın Sözlük Olarak Okunması
csv.DictReader, her satırı sütun başlıklarının anahtar olarak kullanıldığı bir OrderedDict (veya Python 3.8 ve sonraki sürümlerde normal bir dict) olarak okur. Bu yöntem konum tabanlı indekslemeden çok daha kolaydır; sütunların sırası değişse bile kodunuz okunabilirliğini korur.
import csv
with open('employees.csv', 'w', newline='') as f:
f.write('name,department,salary\nAlice,Eng,95000\nBob,Sales,70000\n')
with open('employees.csv', 'r', encoding='utf-8', newline='') as f:
reader = csv.DictReader(f)
print('Fields:', reader.fieldnames)
total_salary = 0
for row in reader:
name = row['name']
department = row['department']
salary = float(row['salary'])
total_salary += salary
print(f'{name} ({department}): ${salary:,.2f}')
print(f'Total payroll: ${total_salary:,.2f}')csv.writer ve DictWriter — CSV Yazma
Satırları liste olarak yazmak için csv.writer, sözlük olarak yazmak için csv.DictWriter kullanın. Dosyayı açarken her zaman newline='' geçirin; csv modülü, Windows'ta çift satır sonlarını önlemek için satır sonlarını kendisi yönetir.
import csv
results = [
{'task_id': 'T001', 'status': 'completed', 'duration_s': 12.5},
{'task_id': 'T002', 'status': 'failed', 'duration_s': 3.1},
{'task_id': 'T003', 'status': 'completed', 'duration_s': 45.8},
]
fieldnames = ['task_id', 'status', 'duration_s']
with open('task_results.csv', 'w', newline='', encoding='utf-8') as f:
writer = csv.DictWriter(f, fieldnames=fieldnames)
writer.writeheader() # write column names
writer.writerows(results)
print('Wrote task_results.csv')json.load() ve json.dump() — Dosya Girdi/Çıktısı
Bir JSON dosyasını ayrıştırmak için json.load(file), dosyaya yazmak için json.dump(obj, file) kullanın. Bunlar dosya nesneleriyle çalışır. Dizeler için json.loads(string) ve json.dumps(obj) kullanın. Okunabilir çıktı için her zaman indent=2 belirtin.
import json
with open('config.json', 'w', encoding='utf-8') as f:
json.dump({'api_url': 'https://api.example.com', 'timeout': 15}, f)
with open('config.json', 'r', encoding='utf-8') as f:
config = json.load(f)
print('API URL:', config.get('api_url'))
print('Timeout:', config.get('timeout', 30))
output_data = {
'run_id': 'abc123',
'items': [1, 2, 3],
'meta': {'agent': 'v2', 'model': 'gpt-4o'}
}
with open('output.json', 'w', encoding='utf-8') as f:
json.dump(
output_data, f,
indent=2,
ensure_ascii=False
)
print('Written output.json')JSON Ayrıştırma Hatalarını Yönetme
Bozuk biçimli JSON dosyaları, ajan işlem hatlarında yaygındır; bunun nedeni tamamlanmamış yazma işlemleri, kesilmiş indirmeler veya kodlama sorunları olabilir. json.load() işlemini her zaman bir try/except bloğuna alın ve hata ayıklamayı kolaylaştırmak için dosya yolunu içeren açık hata iletileri sağlayın.
import json
from pathlib import Path
def safe_load_json(file_path):
path = Path(file_path)
try:
with open(path, 'r', encoding='utf-8') as f:
return json.load(f)
except json.JSONDecodeError as e:
print(f'Invalid JSON in {path}: line {e.lineno}, col {e.colno}')
print(f' Error: {e.msg}')
# Show the problem area
content = path.read_text(encoding='utf-8')
lines = content.split('\n')
if e.lineno <= len(lines):
print(f' Content: {lines[e.lineno-1][:80]}')
return None
except FileNotFoundError:
print(f'File not found: {path}')
return None
# --- demo ---
Path('good.json').write_text('{"model": "gpt-4o"}', encoding='utf-8')
Path('bad.json').write_text('{"model": "gpt-4o", }', encoding='utf-8')
print('Loading good.json:', safe_load_json('good.json'))
print('Loading bad.json:', safe_load_json('bad.json'))
JSONL (JSON Lines) Biçimini Okuma
Birçok yapay zekâ API'si ve veri işlem hattı, her satırda bir JSON nesnesi bulunan JSONL (JSON Lines) biçimini kullanır. Bu biçim akışı destekler ve dosyanın tamamını belleğe yüklemeden satır satır işlenmesi kolaydır. Her satır eksiksiz ve kendi içinde bağımsız bir JSON nesnesidir.
import json
with open('events.jsonl', 'w', encoding='utf-8') as f:
f.write('{"event": "start"}\n{"event": "stop"}\nnot json\n')
results = []
with open('events.jsonl', 'r', encoding='utf-8') as f:
for line_num, line in enumerate(f, 1):
line = line.strip()
if not line:
continue
try:
event = json.loads(line)
results.append(event)
except json.JSONDecodeError as e:
print(f'Bad JSON on line {line_num}: {e}')
print(f'Loaded {len(results)} events')
with open('output.jsonl', 'w', encoding='utf-8') as f:
for record in results:
f.write(json.dumps(record, ensure_ascii=False) + '\n')Düz Metin Dosyalarını Okuma
Düz metin en basit biçimdir; günlükler, istemler, raporlar ve yapılandırma dosyaları bu biçimi kullanır. Dosyanın tamamını .read() ile okuyabilir veya satır satır işleyebilirsiniz. Büyük dosyalarda bellek kullanımını sabit tutmak için her zaman satır satır yaklaşımı kullanın.
from pathlib import Path
Path('system_prompt.txt').write_text('You are a helpful agent.', encoding='utf-8')
with open('agent.log', 'w', encoding='utf-8') as f:
f.write('INFO: boot\nERROR: disk full\nCRITICAL: crash\nINFO: recovered\n')
prompt = Path('system_prompt.txt').read_text(encoding='utf-8')
print(f'Prompt length: {len(prompt)} characters')
error_lines = []
with open('agent.log', 'r', encoding='utf-8') as f:
for line in f:
line = line.rstrip()
if not line:
continue
if 'ERROR' in line or 'CRITICAL' in line:
error_lines.append(line)
print(f'Found {len(error_lines)} error lines')
with open('summary.txt', 'w', encoding='utf-8') as f:
f.write('Agent Run Summary\n')
f.write('=' * 40 + '\n')
for error in error_lines[:10]:
f.write(f' {error}\n')
print('Summary written')BOM (Bayt Sırası İşareti) Yönetimi
Excel'den veya Windows araçlarından dışa aktarılan dosyalar genellikle BOM (Byte Order Mark) ile, yani görünmez bir \ufeff karakteriyle başlar. Bu karakter işlenmezse CSV ayrıştırma sırasında ilk alan adını bozar. Otomatik olarak kaldırmak için encoding='utf-8-sig' kullanın.
import csv
with open('windows_export.csv', 'wb') as f:
f.write('name,email,age\nAlice,alice@x.com,30\n'.encode('utf-8'))
with open('file.txt', 'wb') as f:
f.write(b'\xef\xbb\xbfhello')
with open('windows_export.csv', 'r', encoding='utf-8') as f:
reader = csv.DictReader(f)
first = next(reader)
print(list(first.keys()))
with open('windows_export.csv', 'r', encoding='utf-8-sig') as f:
reader = csv.DictReader(f)
first = next(reader)
print(list(first.keys()))
content = open('file.txt', 'rb').read()
if content.startswith(b'\xef\xbb\xbf'):
content = content[3:]
text = content.decode('utf-8')
print('Decoded:', text)Kodlama Hatalarını Yönetme
Bilinmeyen kaynaklardan dosya okurken kodlama hataları yaygındır. open() işlevinin errors parametresi ne olacağını denetler: 'replace' hatalı karakterleri ? ile değiştirir, 'ignore' bunları yok sayar ve 'backslashreplace' bunları kaçış dizileriyle gösterir. Sıkı doğrulama için 'strict' kullanın; bu varsayılan değerdir.
from pathlib import Path
def read_with_fallback(file_path):
path = Path(file_path)
# Try UTF-8 first
try:
return path.read_text(encoding='utf-8')
except UnicodeDecodeError:
pass
# Try Latin-1 (handles most European files)
try:
return path.read_text(encoding='latin-1')
except UnicodeDecodeError:
pass
# Last resort: replace bad characters
text = path.read_text(encoding='utf-8', errors='replace')
print(f'Warning: {path.name} had encoding errors (chars replaced)')
return text
# --- demo ---
Path('notes_utf8.txt').write_text('Notes: café, naïve, résumé', encoding='utf-8')
text = read_with_fallback('notes_utf8.txt')
print(f'Read {len(text)} chars: {text!r}')
Bozuk Biçimli CSV Dosyalarını Yönetme
Gerçek dünyadaki CSV dosyalarında fazladan virgüller, eksik alanlar, tutarsız tırnak kullanımı veya karışık ayraçlar bulunabilir. quoting ve error_bad_lines seçeneklerini kullanın ve hatalı satırları sorunsuzca atlamak için satır ayrıştırmayı try/except bloğuna alın.
import csv
with open('messy_data.csv', 'w', newline='') as f:
f.write('name,email,score\nAlice,alice@x.com,88\nBob,,90\nCarol,carol@x.com,notanumber\n')
valid_rows = []
error_count = 0
with open('messy_data.csv', 'r', encoding='utf-8', newline='') as f:
reader = csv.DictReader(f)
expected_fields = {'name', 'email', 'score'}
for line_num, row in enumerate(reader, start=2):
try:
if not all(row.get(f, '').strip() for f in expected_fields):
raise ValueError(f'Missing required field in row {line_num}')
score = float(row['score'])
valid_rows.append({
'name': row['name'].strip(),
'email': row['email'].strip().lower(),
'score': score
})
except (ValueError, KeyError) as e:
error_count += 1
print(f'Skipping row {line_num}: {e}')
print(f'Valid: {len(valid_rows)}, Errors: {error_count}')Hızlı Kontrol: CSV DictReader ve reader Karşılaştırması
CSV ayrıştırma seçeneklerini anlayıp anlamadığınızı sınayın.
Dosya Biçimi İşleme Özeti
Artık tüm temel ajan dosyası biçimlerini ayrıştırıp yazabilirsiniz:
- CSV: Sözlük biçimindeki satırlar için
csv.DictReader, çıktı içincsv.DictWriterkullanın; açarken her zamannewline=''belirtin - JSON: Ayrıştırmak için
json.load(f), yazmak içinjson.dump(obj, f, indent=2)kullanın;JSONDecodeErrorhatasını yakalayın - JSONL: Her satırı
json.loads(line)ile okuyup ayrıştırın; akış verileri için idealdir - Düz metin: Küçük dosyalar için
.read(), büyük dosyalar için satır satır yineleme kullanın - BOM: Windows'tan dışa aktarılan dosyalar için
encoding='utf-8-sig'kullanın - Kodlama hataları: UTF-8'i deneyin, latin-1'e geri dönün veya
errors='replace'kullanın
Yapay zeka eğitmeniyle AI Agents öğren — ücretsiz
Tarayıcında gerçek kod yaz ve çalıştır, 7/24 yapay zeka eğitmeninden anında yardım al; web'de ya da uygulamada kaldığın yerden devam et.
- Kurslar
- 60
- Dersler
- 239
Sıkça Sorulan Sorular
“Dosya Biçimi İşleme: CSV, JSON ve TXT” dersi ücretsiz mi?
Evet — “Dosya Biçimi İşleme: CSV, JSON ve TXT” 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.
“Dosya Biçimi İşleme: CSV, JSON ve TXT” dersinde ne öğreneceğim?
csv modülü, json.load/dump ve aracı araçları için güvenli metin kodlaması. 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 3. dersidir.
“Dosya Biçimi İşleme: CSV, JSON ve TXT” 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