การจัดการรูปแบบไฟล์: CSV, JSON และ TXT
โมดูล csv, json.load/dump และการเข้ารหัสข้อความอย่างปลอดภัยสำหรับเครื่องมือตัวแทน
การจัดการรูปแบบไฟล์: CSV, JSON และ TXT เป็นบทเรียน AI Agents ฟรีบน CoddyKit นี่คือบทเรียนที่ 3 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน AI Agents และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส AI Agents มีบทเรียนทั้งหมด 4 บทเรียน
รูปแบบไฟล์สามประเภทที่เอเจนต์ใช้บ่อยที่สุด
เอเจนต์อ่านและเขียนรูปแบบไฟล์สามประเภทอยู่เป็นประจำ ได้แก่ CSV สำหรับข้อมูลแบบตาราง JSON สำหรับวัตถุที่มีโครงสร้าง และข้อความธรรมดาสำหรับไฟล์บันทึก คำสั่ง และรายงาน แต่ละรูปแบบมีข้อกำหนดในการแยกวิเคราะห์ กรณีขอบ และแนวทางปฏิบัติที่ดีแตกต่างกัน Python มีการรองรับทั้งสามรูปแบบในตัวอย่างดีเยี่ยม
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 พื้นฐาน
csv.reader แยกวิเคราะห์ไฟล์ CSV ทีละแถว และส่งคืนแต่ละแถวเป็นรายการสตริง ฟังก์ชันนี้จัดการช่องข้อมูลที่ครอบด้วยเครื่องหมายคำพูด เครื่องหมายจุลภาคที่อยู่ภายในค่า และอักขระขึ้นบรรทัดใหม่ภายในค่าที่ครอบด้วยเครื่องหมายคำพูดได้อย่างถูกต้อง ต่างจากการแยกด้วยเครื่องหมายจุลภาคด้วยตนเอง ซึ่งจะทำงานผิดพลาดในกรณีขอบ
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 — แถวในรูปพจนานุกรม
csv.DictReader อ่านแต่ละแถวเป็น OrderedDict (หรือพจนานุกรมทั่วไปใน Python 3.8 ขึ้นไป) โดยใช้หัวคอลัมน์เป็นคีย์ วิธีนี้ทำงานได้ง่ายกว่าการอ้างอิงตามตำแหน่งมาก โค้ดของคุณยังคงอ่านเข้าใจได้แม้มีการจัดเรียงคอลัมน์ใหม่
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 และ DictWriter — การเขียน CSV
ใช้ csv.writer เพื่อเขียนแถวในรูปแบบรายการ หรือใช้ csv.DictWriter เพื่อเขียนแถวในรูปแบบพจนานุกรม ควรส่ง newline='' เมื่อเปิดไฟล์เสมอ เพราะมอดูล csv จัดการจุดสิ้นสุดบรรทัดเองเพื่อหลีกเลี่ยงการขึ้นบรรทัดใหม่ซ้ำสองครั้งบน Windows
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() และ json.dump() — การรับส่งข้อมูลกับไฟล์
ใช้ json.load(file) เพื่อแยกวิเคราะห์ไฟล์ JSON และใช้ json.dump(obj, file) เพื่อเขียนไฟล์ ฟังก์ชันเหล่านี้ทำงานกับวัตถุไฟล์ หากทำงานกับสตริง ให้ใช้ json.loads(string) และ json.dumps(obj) ควรใช้ indent=2 เสมอเพื่อให้ผลลัพธ์อ่านได้ง่าย
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
ไฟล์ JSON ที่มีรูปแบบไม่ถูกต้องพบได้บ่อยในกระบวนการของเอเจนต์ เช่น การเขียนที่ไม่เสร็จสมบูรณ์ การดาวน์โหลดที่ถูกตัด หรือปัญหาการเข้ารหัส ควรครอบ json.load() ด้วยโครงสร้าง try/except เสมอ และแสดงข้อความข้อผิดพลาดที่ชัดเจนโดยระบุพาธไฟล์เพื่อช่วยแก้ไขข้อบกพร่อง
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)
API ปัญญาประดิษฐ์และกระบวนการข้อมูลจำนวนมากใช้ JSONL (JSON Lines) ซึ่งมีวัตถุ JSON หนึ่งรายการต่อบรรทัด รูปแบบนี้รองรับการประมวลผลแบบสตรีม และประมวลผลทีละบรรทัดได้ง่ายโดยไม่ต้องโหลดไฟล์ทั้งหมดเข้าสู่หน่วยความจำ แต่ละบรรทัดเป็นวัตถุ JSON ที่สมบูรณ์และเป็นอิสระในตัวเอง
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')การอ่านไฟล์ข้อความธรรมดา
ข้อความธรรมดาเป็นรูปแบบที่ง่ายที่สุด ใช้กับไฟล์บันทึก คำสั่ง รายงาน และไฟล์การกำหนดค่า อ่านไฟล์ทั้งหมดด้วย .read() หรือประมวลผลทีละบรรทัด สำหรับไฟล์ขนาดใหญ่ ควรใช้แนวทางทีละบรรทัดเสมอเพื่อให้การใช้หน่วยความจำคงที่
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 (เครื่องหมายลำดับไบต์)
ไฟล์ที่ส่งออกจาก Excel หรือเครื่องมือของ Windows มักเริ่มต้นด้วย BOM (เครื่องหมายลำดับไบต์) ซึ่งเป็นอักขระ \ufeff ที่มองไม่เห็น หากไม่จัดการ อักขระนี้จะทำให้ชื่อช่องข้อมูลแรกในการแยกวิเคราะห์ CSV เสียหาย ให้ใช้ encoding='utf-8-sig' เพื่อแยกอักขระนี้ออกโดยอัตโนมัติ
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)การจัดการข้อผิดพลาดด้านการเข้ารหัส
เมื่ออ่านไฟล์จากแหล่งที่ไม่ทราบแน่ชัด ข้อผิดพลาดด้านการเข้ารหัสเกิดขึ้นได้บ่อย พารามิเตอร์ errors ของ open() จะควบคุมสิ่งที่เกิดขึ้น ได้แก่ 'replace' แทนที่อักขระที่ไม่ถูกต้องด้วย ? ส่วน 'ignore' จะละทิ้งอักขระเหล่านั้น และ 'backslashreplace' จะแปลงอักขระเหล่านั้นเป็นรูปแบบหลีก สำหรับการตรวจสอบอย่างเข้มงวด ให้ใช้ 'strict' (ค่าเริ่มต้น)
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}')
การจัดการไฟล์ CSV ที่มีรูปแบบไม่ถูกต้อง
ไฟล์ CSV ในการใช้งานจริงอาจมีปัญหา เช่น เครื่องหมายจุลภาคเกิน ช่องข้อมูลหายไป การครอบด้วยเครื่องหมายคำพูดไม่สอดคล้องกัน หรือตัวคั่นปะปนกัน ให้ใช้ตัวเลือก quoting และ error_bad_lines และครอบการแยกวิเคราะห์แต่ละแถวด้วยโครงสร้าง try/except เพื่อข้ามแถวที่มีปัญหาได้อย่างเหมาะสม
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}')ตรวจสอบความเข้าใจ: CSV DictReader กับ reader
ทดสอบความเข้าใจเกี่ยวกับตัวเลือกในการแยกวิเคราะห์ CSV
สรุปการจัดการรูปแบบไฟล์
ขณะนี้คุณสามารถแยกวิเคราะห์และเขียนรูปแบบไฟล์หลักทั้งหมดที่เอเจนต์ใช้ได้แล้ว:
- CSV: ใช้
csv.DictReaderสำหรับแถวในรูปพจนานุกรม และใช้csv.DictWriterสำหรับผลลัพธ์ ควรใช้newline=''เมื่อเปิดไฟล์เสมอ - JSON: ใช้
json.load(f)เพื่อแยกวิเคราะห์ และใช้json.dump(obj, f, indent=2)เพื่อเขียน โดยดักจับJSONDecodeError - JSONL: อ่านและแยกวิเคราะห์แต่ละบรรทัดด้วย
json.loads(line)เหมาะอย่างยิ่งสำหรับข้อมูลแบบสตรีม - ข้อความธรรมดา: ใช้
.read()สำหรับไฟล์ขนาดเล็ก และวนอ่านทีละบรรทัดสำหรับไฟล์ขนาดใหญ่ - BOM: ใช้
encoding='utf-8-sig'สำหรับไฟล์ที่ส่งออกจาก Windows - ข้อผิดพลาดด้านการเข้ารหัส: ลองใช้ UTF-8 ก่อน เปลี่ยนไปใช้ latin-1 หากไม่สำเร็จ หรือใช้
errors='replace'
เรียนรู้ AI Agents ด้วย AI tutor — ฟรี
เขียนและเรียกใช้โค้ดจริงในเบราว์เซอร์ของคุณ รับความช่วยเหลือทันทีจาก AI tutor 24/7 และเรียนรู้ต่อจากที่คุณหยุดบนเว็บหรือในแอป
- คอร์ส
- 60
- บทเรียน
- 239
คำถามที่พบบ่อย
บทเรียน “การจัดการรูปแบบไฟล์: CSV, JSON และ TXT” ฟรีหรือไม่
ใช่ — ข้อความเต็มของ “การจัดการรูปแบบไฟล์: CSV, JSON และ TXT” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส AI Agents ให้อัปเกรดเป็น CoddyKit PRO คอร์ส AI Agents มีบทเรียนทั้งหมด 4 บทเรียน
คุณจะเรียนรู้อะไรในบทเรียน “การจัดการรูปแบบไฟล์: CSV, JSON และ TXT”
โมดูล csv, json.load/dump และการเข้ารหัสข้อความอย่างปลอดภัยสำหรับเครื่องมือตัวแทน คุณปฏิบัติ AI Agents ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน
คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน AI Agents หรือไม่
ไม่จำเป็นต้องมีประสบการณ์มาก่อน AI Agents บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 3 จากทั้งหมด 4 บทเรียน
บทเรียน “การจัดการรูปแบบไฟล์: CSV, JSON และ TXT” ใช้เวลานานแค่ไหน
บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย
ฉันเขียนและรันโค้ดในบทเรียน AI Agents นี้ได้ไหม
ได้ บทเรียน AI Agents ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- การอ่านและเขียนไฟล์ในบริบทของตัวแทน
- การไล่สำรวจไดเรกทอรีและค้นหาไฟล์
- การจัดการรูปแบบไฟล์: CSV, JSON และ TXT
- การดำเนินการกับไฟล์อย่างปลอดภัยพร้อมจัดการข้อผิดพลาด