Tiedostomuotojen käsittely: CSV, JSON ja TXT
csv-moduuli, json.load/dump ja turvallinen tekstikoodaus agenttityökaluja varten
Tiedostomuotojen käsittely: CSV, JSON ja TXT on ilmainen Tekoälyagentit-oppitunti CoddyKitissä. Tämä on oppitunti 3/4. Voit lukea koko oppitunnin alta ilmaiseksi ja harjoitella sen jälkeen käytännössä selaimessa sisäänrakennetulla koodieditorilla ja ympäri vuorokauden käytettävissä olevan tekoälytuutorin avulla. Oppitunti kuuluu Tekoälyagentit-oppimispolkuun, ja edistymisesi synkronoituu verkon ja CoddyKit-sovelluksen välillä. Tekoälyagentit-kurssilla on yhteensä 4 oppituntia.
Agenttien kolme yleisintä tiedostomuotoa
Agentit lukevat ja kirjoittavat jatkuvasti kolmea tiedostomuotoa: CSV taulukkomuotoiselle datalle, JSON jäsennellyille olioille ja pelkkä teksti lokeille, kehotteille ja raporteille. Jokaisella on erilaiset jäsennysvaatimukset, erityistapaukset ja parhaat käytännöt. Python tukee erinomaisesti kaikkia kolmea sisäänrakennetuilla toiminnoilla.
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 — CSV:n perusjäsennys
csv.reader jäsentää CSV-tiedoston rivi kerrallaan ja palauttaa jokaisen rivin merkkijonojen luettelona. Se käsittelee oikein lainausmerkeissä olevat kentät, arvojen sisältämät pilkut ja lainausmerkeissä olevien arvojen sisäiset rivinvaihdot — toisin kuin pilkuilla manuaalisesti jakaminen, joka ei toimi erityistapauksissa.
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 — rivi sanakirjana
csv.DictReader lukee jokaisen rivin OrderedDict-oliona (tai tavallisena dict-oliona Python 3.8:ssa ja uudemmissa versioissa), jossa sarakeotsikot ovat avaimina. Tämä on paljon helpompi tapa työskennellä kuin sijaintiin perustuva indeksointi — koodi pysyy luettavana, vaikka sarakkeiden järjestystä muutetaan.
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 ja DictWriter — CSV:n kirjoittaminen
Käyttäkää csv.writer-oliota rivien kirjoittamiseen luetteloina tai csv.DictWriter-oliota rivien kirjoittamiseen sanakirjoina. Välittäkää tiedostoa avatessa aina newline='' — csv-moduuli käsittelee rivinvaihdot itse ja estää näin ylimääräiset rivinvaihdot Windowsissa.
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() ja json.dump() — tiedosto-I/O
Käyttäkää json.load(file)-funktiota JSON-tiedoston jäsentämiseen ja json.dump(obj, file)-funktiota sen kirjoittamiseen. Nämä toimivat tiedosto-olioiden kanssa. Käyttäkää merkkijonoille funktioita json.loads(string) ja json.dumps(obj). Käyttäkää tulosteessa aina asetusta indent=2, jotta se on luettavaa.
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-dekoodausvirheiden käsittely
Virheelliset JSON-tiedostot ovat yleisiä agenttien putkissa: kirjoitus voi jäädä kesken, lataus voi katketa tai merkistössä voi olla ongelmia. Käärikää json.load() aina try/except-rakenteeseen ja ilmoittakaa virheestä selkeästi sisällyttämällä tiedostopolku vianmääritystä varten.
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-muodon (JSON Lines) lukeminen
Monet tekoäly-API:t ja datan käsittelyputket käyttävät JSONL-muotoa (JSON Lines), jossa on yksi JSON-olio riviä kohden. Tämä muoto tukee suoratoistoa, ja sitä on helppo käsitellä rivi kerrallaan lataamatta koko tiedostoa muistiin. Jokainen rivi on täydellinen, itsenäinen JSON-olio.
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')Pelkkien tekstitiedostojen lukeminen
Pelkkä teksti on yksinkertaisin tiedostomuoto: lokit, kehotteet, raportit ja määritystiedostot. Lukekaa koko tiedosto .read()-metodilla tai käsitelkää se rivi kerrallaan. Käyttäkää suurten tiedostojen kanssa aina rivi kerrallaan -menetelmää, jotta muistin käyttö pysyy vakiona.
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:n (Byte Order Mark) käsittely
Excelistä tai Windows-työkaluista viedyt tiedostot alkavat usein BOM-merkillä (Byte Order Mark), joka on näkymätön \ufeff-merkki. Jos sitä ei käsitellä, se turmelee CSV-jäsennyksessä ensimmäisen kentän nimen. Käyttäkää asetusta encoding='utf-8-sig' sen poistamiseen automaattisesti.
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)Merkistövirheiden käsittely
Tuntemattomista lähteistä luettavissa tiedostoissa merkistövirheet ovat yleisiä. open()-funktion parametri errors määrittää, mitä tapahtuu: 'replace' korvaa virheelliset merkit merkillä ?, 'ignore' poistaa ne ja 'backslashreplace' esittää ne kenoviivalla alkavina ohjausmerkkeinä. Käyttäkää tiukkaan kelpoisuustarkistukseen arvoa 'strict' (oletusarvo).
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}')
Virheellisten CSV-tiedostojen käsittely
Oikean maailman CSV-tiedostoissa on ongelmia: ylimääräisiä pilkkuja, puuttuvia kenttiä, epäjohdonmukaisia lainausmerkkejä tai sekoittuneita erotinmerkkejä. Käyttäkää asetuksia quoting ja error_bad_lines ja käärikää rivien jäsennys try/except-rakenteeseen, jotta virheelliset rivit voidaan ohittaa hallitusti.
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}')Pikatarkistus: CSV DictReader vs reader
Testatkaa ymmärrystänne CSV:n jäsennysvaihtoehdoista.
Tiedostomuotojen käsittelyn kertaus
Osaatte nyt jäsentää ja kirjoittaa kaikki tärkeimmät agenttien käyttämät tiedostomuodot:
- CSV: käyttäkää
csv.DictReader-oliota sanakirjariveihin jacsv.DictWriter-oliota tulosteeseen; käyttäkää avatessa aina asetustanewline='' - JSON:
json.load(f)jäsentämiseen jajson.dump(obj, f, indent=2)kirjoittamiseen; käsitelkääJSONDecodeError - JSONL: lukekaa ja jäsentäkää jokainen rivi komennolla
json.loads(line); sopii erinomaisesti suoratoistodatalle - Pelkkä teksti:
.read()pienille tiedostoille ja rivien läpikäynti suurille tiedostoille - BOM: käyttäkää asetusta
encoding='utf-8-sig'Windowsista viedyille tiedostoille - Merkistövirheet: kokeilkaa UTF-8:aa, käyttäkää varalla latin-1:tä tai asetusta
errors='replace'
Opi Tekoälyagentit tekoälytuutorin avulla — ilmaiseksi
Kirjoita ja suorita oikeaa koodia selaimessa, saa välitöntä apua tekoälytuutorilta ympäri vuorokauden ja jatka siitä, mihin jäit, verkossa tai sovelluksessa.
- Kurssit
- 60
- Oppitunnit
- 239
Usein kysytyt kysymykset
Onko oppitunti ”Tiedostomuotojen käsittely: CSV, JSON ja TXT” ilmainen?
Kyllä – oppitunnin ”Tiedostomuotojen käsittely: CSV, JSON ja TXT” koko tekstin voi lukea täällä verkossa ilmaiseksi. Jos haluat harjoitella interaktiivisesti sisäänrakennetulla koodieditorilla ja ympäri vuorokauden käytettävissä olevan tekoälytuutorin avulla sekä avata koko Tekoälyagentit-kurssin, päivitä CoddyKit PROhon. Tekoälyagentit-kurssilla on yhteensä 4 oppituntia.
Mitä opin oppitunnilla ”Tiedostomuotojen käsittely: CSV, JSON ja TXT”?
csv-moduuli, json.load/dump ja turvallinen tekstikoodaus agenttityökaluja varten Harjoittelet Tekoälyagentit-aihetta koodilla, jonka suoritat suoraan selaimessa. Ympäri vuorokauden käytettävissä oleva tekoälytuutori vastaa kysymyksiisi oppitunnin aikana.
Tarvitsenko kokemusta aloittaakseni Tekoälyagentit-opiskelun?
Aiempi kokemus ei ole tarpeen. CoddyKitin Tekoälyagentit-oppimispolku sopii vasta-alkajista edistyneisiin, joten voit aloittaa tästä tai alusta ja edetä omaan tahtiisi. Tämä on oppitunti 3/4.
Kuinka kauan ”Tiedostomuotojen käsittely: CSV, JSON ja TXT”-oppitunnin suorittaminen kestää?
Useimmat CoddyKitin oppitunnit kestävät noin 5–10 minuuttia. Jokainen oppitunti on lyhyt ja interaktiivinen, joten edistyt tasaisesti ja voit jatkaa siitä, mihin jäit – sekä verkossa että sovelluksessa.
Voinko kirjoittaa ja suorittaa koodia tällä Tekoälyagentit-oppitunnilla?
Kyllä. Jokainen Tekoälyagentit-oppitunti sisältää sisäänrakennetun koodieditorin, joten voit kirjoittaa ja suorittaa oikeaa koodia suoraan selaimessa ja saada välitöntä palautetta tekoälyltä – paikallista asennusta ei tarvita.
Kaikki tämän kurssin oppitunnit
- Tiedostojen lukeminen ja kirjoittaminen agentin kontekstissa
- Hakemistojen läpikäynti ja tiedostojen etsiminen
- Tiedostomuotojen käsittely: CSV, JSON ja TXT
- Turvalliset tiedosto-operaatiot virheenkäsittelyllä