Python-এ CSV থেকে JSON — json.dumps() গাইড
বিনামূল্যে অনলাইন CSV থেকে JSON সরাসরি আপনার ব্রাউজারে ব্যবহার করুন — ইনস্টলের প্রয়োজন নেই।
CSV থেকে JSON অনলাইনে ব্যবহার করুন →CSV ফাইল সর্বত্র পাওয়া যায় — রপ্তানি করা রিপোর্ট, ডেটাবেস ডাম্প, লগ এক্সট্র্যাক্ট — এবং দেরি হোক বা তাড়াতাড়ি আপনাকে Python-এ সেই CSV-কে JSON-এ রূপান্তর করতে হবে। স্ট্যান্ডার্ড লাইব্রেরি দুটি মডিউল দিয়ে এটি সামলায়: csv.DictReader প্রতিটি সারিকে Python dict-এ পরিণত করে, এবং json.dumps() সেই dict-গুলোকে JSON স্ট্রিংয়ে সিরিয়ালাইজ করে। কোড না লিখে দ্রুত এককালীন রূপান্তরের জন্য, CSV to JSON কনভার্টার ব্রাউজারে তাৎক্ষণিকভাবে কাজ করে। এই গাইড সম্পূর্ণ প্রোগ্রামাটিক পথ কভার করে: json.dump() বনাম json.dumps(), ফাইলে JSON লেখা, dataclass সিরিয়ালাইজেশন, CSV মানের টাইপ রূপান্তর, datetime ও Decimal সামলানো, এবং orjson-এর মতো উচ্চ-কার্যক্ষমতার বিকল্প। সব উদাহরণ Python 3.10+ লক্ষ্য করে।
- ✓csv.DictReader dict-এর একটি তালিকা তৈরি করে — সম্পূর্ণ তালিকাটি json.dump(rows, f, indent=2) দিয়ে JSON ফাইলে লিখুন।
- ✓json.dump() সরাসরি ফাইল অবজেক্টে লেখে। json.dumps() একটি স্ট্রিং রিটার্ন করে। সঠিকটি বেছে নিলে অপ্রয়োজনীয় কপি এড়ানো যায়।
- ✓CSV মান সবসময় স্ট্রিং। JSON-এ সিরিয়ালাইজ করার আগে সংখ্যাসূচক কলামগুলো স্পষ্টভাবে টাইপ-কাস্ট করুন (int(), float())।
- ✓আউটপুটে Unicode অক্ষর — অ্যাকসেন্টযুক্ত নাম, CJK টেক্সট — সংরক্ষণ করতে json.dumps()-এ ensure_ascii=False পাস করুন।
- ✓CSV থেকে datetime, UUID, বা Decimal-এর জন্য কাস্টম ফলব্যাক ফাংশন সহ default= প্যারামিটার ব্যবহার করুন।
order_id,product,quantity,price ORD-7291,Wireless Keyboard,2,49.99 ORD-7292,USB-C Hub,1,34.50
[
{
"order_id": "ORD-7291",
"product": "Wireless Keyboard",
"quantity": "2",
"price": "49.99"
},
{
"order_id": "ORD-7292",
"product": "USB-C Hub",
"quantity": "1",
"price": "34.50"
}
]"2", "49.99")। CSV-এর কোনো টাইপ সিস্টেম নেই — প্রতিটি মান স্ট্রিং। এটি ঠিক করার বিষয়টি নিচে টাইপ রূপান্তর বিভাগে আলোচিত হয়েছে।json.dumps() — Python Dict থেকে JSON স্ট্রিং সিরিয়ালাইজ করুন
json মডিউলটি প্রতিটি Python ইনস্টলেশনের সাথে আসে — কোনো pip install প্রয়োজন নেই। json.dumps(obj) একটি Python অবজেক্ট (dict, list, string, number, bool, বা None) নেয় এবং বৈধ JSON ধারণকারী একটি str রিটার্ন করে। একটি Python ডিকশনারি JSON অবজেক্টের মতো দেখতে হলেও, আসলে দুটো আলাদা জিনিস: dict মেমোরিতে Python-এর data structure, আর JSON স্ট্রিং হলো serialized text। এই কাজটা করতেই json.dumps() কল করুন।
সরল উদাহরণ — একটি CSV সারি থেকে JSON
import json
# Python dict হিসেবে উপস্থাপিত একটি CSV সারি
server_entry = {
"hostname": "web-prod-03",
"ip_address": "10.0.12.47",
"port": 8080,
"region": "eu-west-1"
}
# dict থেকে JSON স্ট্রিং তৈরি করুন
json_string = json.dumps(server_entry)
print(json_string)
# {"hostname": "web-prod-03", "ip_address": "10.0.12.47", "port": 8080, "region": "eu-west-1"}
print(type(json_string))
# <class 'str'>এটি কম্প্যাক্ট, এক-লাইন JSON তৈরি করে — পেলোড ও স্টোরেজের জন্য ভালো, কিন্তু পড়ার জন্য কঠিন। মানুষের পাঠযোগ্য আউটপুট পেতে indent=2 যোগ করুন:
import json
server_entry = {
"hostname": "web-prod-03",
"ip_address": "10.0.12.47",
"port": 8080,
"region": "eu-west-1"
}
pretty_json = json.dumps(server_entry, indent=2)
print(pretty_json)
# {
# "hostname": "web-prod-03",
# "ip_address": "10.0.12.47",
# "port": 8080,
# "region": "eu-west-1"
# }আরও দুটি প্যারামিটার যা আমি প্রায় প্রতিটি কলে ব্যবহার করি: sort_keys=True ডিকশনারি কীগুলো বর্ণানুক্রমিকভাবে সাজায় (সংস্করণ জুড়ে JSON ফাইলের পার্থক্য দেখার জন্য চমৎকার), এবং ensure_ascii=False non-ASCII অক্ষরগুলো \uXXXX সিকোয়েন্সে এস্কেপ করার পরিবর্তে সংরক্ষণ করে।
import json
warehouse_record = {
"sku": "WH-9031",
"location": "ঢাকা গুদাম ৩",
"quantity": 240,
"last_audit": "2026-03-10"
}
output = json.dumps(warehouse_record, indent=2, sort_keys=True, ensure_ascii=False)
print(output)
# {
# "last_audit": "2026-03-10",
# "location": "ঢাকা গুদাম ৩",
# "quantity": 240,
# "sku": "WH-9031"
# }separators প্যারামিটার সম্পর্কে সংক্ষিপ্ত নোট: ডিফল্ট হলো (", ", ": ") যা কমা ও কোলনের পরে স্পেস যোগ করে। সবচেয়ে কম্প্যাক্ট আউটপুটের জন্য (URL প্যারামিটারে JSON এম্বেড করা বা API রেসপন্স থেকে বাইট কমানোর জন্য উপযোগী), পাস করুন separators=(",", ":")।
json.dumps() Python-এর True-কে JSON true-তে, None-কে null-এ রূপান্তর করে এবং স্ট্রিংগুলো ডাবল কোটে মোড়ায় (Python একক কোট অনুমতি দেয়, JSON দেয় না)। বৈধ JSON তৈরি করতে সর্বদা json.dumps() ব্যবহার করুন — str() বা repr()-এর উপর নির্ভর করবেন না।csv.DictReader থেকে JSON ফাইল — সম্পূর্ণ পাইপলাইন
সবচেয়ে সাধারণ বাস্তব কাজ হলো একটি সম্পূর্ণ CSV ফাইল পড়া এবং JSON হিসেবে সংরক্ষণ করা। ১০ লাইনেরও কম কোডে এখানে সম্পূর্ণ স্ক্রিপ্ট দেওয়া হলো। csv.DictReader dict অবজেক্টের একটি ইটারেটর তৈরি করে — প্রথম লাইনকে কী হিসেবে ব্যবহার করে প্রতি সারিতে একটি। এটি list()-এ মুড়িয়ে দিলে সব সারি একটি Python তালিকায় সংগ্রহ হয়, যা JSON অ্যারে হিসেবে সিরিয়ালাইজ হয়।
import csv
import json
# ধাপ ১: CSV সারিগুলো dict-এর তালিকায় পড়ুন
with open("inventory.csv", "r", encoding="utf-8") as csv_file:
rows = list(csv.DictReader(csv_file))
# ধাপ ২: তালিকাটি JSON ফাইল হিসেবে লিখুন
with open("inventory.json", "w", encoding="utf-8") as json_file:
json.dump(rows, json_file, indent=2, ensure_ascii=False)
print(f"Converted {len(rows)} rows to inventory.json")দুটি open() কল: একটি CSV পড়ার জন্য, একটি JSON লেখার জন্য। এটাই সম্পূর্ণ প্যাটার্ন। লক্ষ্য করুন এটি json.dump() ব্যবহার করে (s ছাড়া) — এটি সরাসরি ফাইল হ্যান্ডেলে লেখে। json.dumps() ব্যবহার করলে একটি স্ট্রিং রিটার্ন হতো যা তারপর আলাদাভাবে f.write() দিয়ে লিখতে হতো। json.dump() বেশি মেমোরি-দক্ষ কারণ এটি প্রথমে সম্পূর্ণ স্ট্রিং মেমোরিতে তৈরি না করে আউটপুট স্ট্রিম করে।
ফাইলের পরিবর্তে JSON স্ট্রিং হিসেবে প্রয়োজন হলে — API পেলোডে এম্বেড করার জন্য, stdout-এ প্রিন্ট করার জন্য, বা ডেটাবেস কলামে ঢোকানোর জন্য — তখন json.dumps() ব্যবহার করুন:
import csv
import json
with open("sensors.csv", "r", encoding="utf-8") as f:
rows = list(csv.DictReader(f))
# ফাইলে না লিখে JSON স্ট্রিং হিসেবে নিন
json_payload = json.dumps(rows, indent=2)
print(json_payload)
# [
# {
# "sensor_id": "TMP-4401",
# "location": "ভবন ৭ - তলা ২",
# "reading": "22.4",
# "unit": "celsius"
# },
# ...
# ]একটি সারি বনাম সম্পূর্ণ ডেটাসেট: যদি json.dumps(single_dict) কল করেন তাহলে একটি JSON অবজেক্ট পাবেন ({...})। যদি json.dumps(list_of_dicts) কল করেন তাহলে একটি JSON অ্যারে পাবেন ([{...}, {...}])। বাইরের কন্টেইনারের আকৃতি নির্ভর করে আপনি কী পাস করছেন তার উপর। বেশিরভাগ ডাউনস্ট্রিম ব্যবহারকারী সারণিমূলক ডেটার জন্য অ্যারে প্রত্যাশা করে।
নন-স্ট্রিং মান সামলানো — CSV থেকে টাইপ রূপান্তর
এখানেই সবাই প্রথমবার আটকে যায়: csv.DictReader প্রতিটি মান স্ট্রিং হিসেবে রিটার্ন করে। আপনার CSV-এ 42 সংখ্যাটি dict-এ স্ট্রিং "42" হয়ে যায়। এটি সরাসরি json.dumps() দিয়ে সিরিয়ালাইজ করলে JSON-এ "quantity": "42" হবে "quantity": 42-এর পরিবর্তে। টাইপ যাচাইকারী API এটি প্রত্যাখ্যান করবে। মানগুলো স্পষ্টভাবে কাস্ট করতে হবে।
import csv
import json
def coerce_types(row: dict) -> dict:
"""স্ট্রিং মানগুলো উপযুক্ত Python টাইপে রূপান্তর করুন।"""
return {
"sensor_id": row["sensor_id"],
"location": row["location"],
"temperature": float(row["temperature"]),
"humidity": float(row["humidity"]),
"battery_pct": int(row["battery_pct"]),
"active": row["active"].lower() == "true",
}
with open("sensor_readings.csv", "r", encoding="utf-8") as f:
rows = [coerce_types(row) for row in csv.DictReader(f)]
print(json.dumps(rows[0], indent=2))
# {
# "sensor_id": "TMP-4401",
# "location": "ভবন ৭ - তলা ২",
# "temperature": 22.4,
# "humidity": 58.3,
# "battery_pct": 87,
# "active": true
# }এখন JSON আউটপুটে temperature একটি float, battery_pct একটি integer, এবং active একটি boolean। রূপান্তর ফাংশনটি আপনার CSV স্কিমার জন্য নির্দিষ্ট — CSV ডেটা থেকে টাইপ অনুমান করার কোনো সাধারণ উপায় নেই, তাই আমি প্রতিটি CSV ফরম্যাটের জন্য একটি ফাংশন লিখি।
কাস্টম অবজেক্ট এবং অ-মানক টাইপ সিরিয়ালাইজ করা
Python-এর json মডিউল নিজে থেকেই datetime, UUID, Decimal, বা কাস্টম ক্লাস সিরিয়ালাইজ করতে পারে না। এগুলোর যেকোনোটিতে json.dumps() কল করলে TypeError উত্থাপিত হয়। দুটি পদ্ধতি এটি সামলায়।
পদ্ধতি ১: default= প্যারামিটার
default=-এ একটি ফাংশন পাস করুন যা অজানা টাইপকে সিরিয়ালাইজযোগ্য কিছুতে রূপান্তর করে। এই ফাংশনটি কেবল সেই অবজেক্টগুলোর জন্য কল হয় যা JSON এনকোডার সামলাতে জানে না।
import json
from datetime import datetime
from decimal import Decimal
from uuid import UUID
def json_serial(obj):
"""অ-মানক টাইপের জন্য ফলব্যাক সিরিয়ালাইজার।"""
if isinstance(obj, datetime):
return obj.isoformat()
if isinstance(obj, UUID):
return str(obj)
if isinstance(obj, Decimal):
return float(obj)
raise TypeError(f"Type {type(obj).__name__} is not JSON serializable")
transaction = {
"txn_id": UUID("a1b2c3d4-e5f6-7890-abcd-ef1234567890"),
"amount": Decimal("149.99"),
"currency": "EUR",
"processed_at": datetime(2026, 3, 15, 14, 30, 0),
"gateway": "stripe",
}
print(json.dumps(transaction, indent=2, default=json_serial))
# {
# "txn_id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
# "amount": 149.99,
# "currency": "EUR",
# "processed_at": "2026-03-15T14:30:00",
# "gateway": "stripe"
# }default= ফাংশনের শেষে অচেনা টাইপের জন্য সর্বদা TypeError উত্থাপন করুন। যদি None রিটার্ন করেন বা নীরবে এড়িয়ে যান, তাহলে কোনো তথ্য হারানোর ইঙ্গিত ছাড়াই আউটপুটে null আসবে।পদ্ধতি ২: asdict() সহ Dataclasses
Python dataclass আপনার CSV সারিগুলোকে একটি সঠিক টাইপ সংজ্ঞা দেয়। একটি dataclass ইন্সট্যান্সকে সাধারণ dict-এ রূপান্তর করতে dataclasses.asdict() ব্যবহার করুন, তারপর এটি json.dumps()-এ পাস করুন।
import json
from dataclasses import dataclass, asdict
from datetime import datetime
@dataclass
class ShipmentRecord:
tracking_id: str
origin: str
destination: str
weight_kg: float
shipped_at: datetime
def json_serial(obj):
if isinstance(obj, datetime):
return obj.isoformat()
raise TypeError(f"Not serializable: {type(obj).__name__}")
shipment = ShipmentRecord(
tracking_id="SHP-9827",
origin="ঢাকা",
destination="চট্টগ্রাম",
weight_kg=1240.5,
shipped_at=datetime(2026, 3, 12, 8, 0, 0),
)
print(json.dumps(asdict(shipment), indent=2, default=json_serial))
# {
# "tracking_id": "SHP-9827",
# "origin": "ঢাকা",
# "destination": "চট্টগ্রাম",
# "weight_kg": 1240.5,
# "shipped_at": "2026-03-12T08:00:00"
# }asdict() নেস্টেড dataclass-গুলোকে recursively dict-এ রূপান্তর করে। যদি আপনার dataclass-এ অন্য dataclass-এর তালিকা থাকে, পুরো গাছটি রূপান্তরিত হয় — কোনো অতিরিক্ত কোড ছাড়াই।json.dumps() প্যারামিটার রেফারেন্স
json.dumps() এবং json.dump() দ্বারা গৃহীত কীওয়ার্ড আর্গুমেন্টের সম্পূর্ণ তালিকা। উভয় ফাংশন একই প্যারামিটার গ্রহণ করে — json.dump() ফাইল অবজেক্টের জন্য একটি অতিরিক্ত প্রথম আর্গুমেন্ট নেয়।
csv.DictReader — CSV-কে Python Dict-এ পড়া
csv.DictReader হলো CSV-থেকে-JSON পাইপলাইনের অন্য অর্ধেক। এটি একটি ফাইল অবজেক্টকে মোড়ায় এবং প্রথম লাইনকে ফিল্ড নাম হিসেবে ব্যবহার করে প্রতি সারিতে একটি dict দেয়। সাধারণ তালিকা দেওয়া csv.reader-এর তুলনায়, DictReader column-এর নাম দিয়ে access করতে দেয় — সংখ্যার index যেমন row[3] নয়।
import csv
import json
# ডেটাবেস এক্সপোর্ট থেকে ট্যাব-বিভক্ত ফাইল
with open("user_sessions.tsv", "r", encoding="utf-8") as f:
reader = csv.DictReader(f, delimiter="\t")
sessions = list(reader)
print(json.dumps(sessions[:2], indent=2))
# [
# {
# "session_id": "sess_8f2a91bc",
# "user_id": "usr_4421",
# "started_at": "2026-03-15T09:12:00Z",
# "duration_sec": "342",
# "pages_viewed": "7"
# },
# {
# "session_id": "sess_3c7d44ef",
# "user_id": "usr_1187",
# "started_at": "2026-03-15T09:14:22Z",
# "duration_sec": "128",
# "pages_viewed": "3"
# }
# ]csv.DictReader সম্পূর্ণ ফাইলটি অলসভাবে পড়ে — একসময়ে একটি সারি দেয়। list(reader) কল করলে সব সারি মেমোরিতে লোড হয়। লক্ষ লক্ষ সারির ফাইলের জন্য, সব সংগ্রহ না করে স্ট্রিমিং পদ্ধতিতে সারি প্রক্রিয়া করুন।ফাইল এবং API রেসপন্স থেকে CSV রূপান্তর করুন
দুটি প্রোডাকশন পরিস্থিতি: ডিস্ক থেকে CSV ফাইল পড়ে রূপান্তর করা, এবং একটি API এন্ডপয়েন্ট থেকে CSV ডেটা ফেচ করা (অনেক রিপোর্টিং সার্ভিস CSV রিটার্ন করে)। উভয়ের জন্যই সঠিক ত্রুটি হ্যান্ডলিং প্রয়োজন।
CSV ফাইল পড়ুন → রূপান্তর করুন → JSON লিখুন
import csv
import json
import sys
def csv_to_json_file(csv_path: str, json_path: str) -> int:
"""CSV ফাইলকে JSON-এ রূপান্তর করুন। লেখা সারির সংখ্যা রিটার্ন করে।"""
try:
with open(csv_path, "r", encoding="utf-8") as f:
rows = list(csv.DictReader(f))
except FileNotFoundError:
print(f"Error: {csv_path} not found", file=sys.stderr)
sys.exit(1)
except csv.Error as e:
print(f"CSV parse error in {csv_path}: {e}", file=sys.stderr)
sys.exit(1)
with open(json_path, "w", encoding="utf-8") as f:
json.dump(rows, f, indent=2, ensure_ascii=False)
return len(rows)
count = csv_to_json_file("fleet_vehicles.csv", "fleet_vehicles.json")
print(f"Wrote {count} records to fleet_vehicles.json")API থেকে CSV ফেচ করুন → পার্স করুন → JSON
import csv
import io
import json
import urllib.request
def fetch_csv_as_json(url: str) -> str:
"""URL থেকে CSV ফেচ করুন এবং JSON স্ট্রিং হিসেবে রিটার্ন করুন।"""
try:
with urllib.request.urlopen(url, timeout=10) as resp:
raw = resp.read().decode("utf-8")
except urllib.error.URLError as e:
raise RuntimeError(f"Failed to fetch {url}: {e}")
reader = csv.DictReader(io.StringIO(raw))
rows = list(reader)
if not rows:
raise ValueError("CSV response was empty or had no data rows")
return json.dumps(rows, indent=2, ensure_ascii=False)
# উদাহরণ: CSV রিটার্নকারী এক্সপোর্ট এন্ডপয়েন্ট
try:
result = fetch_csv_as_json("https://reports.internal/api/v2/daily-metrics.csv")
print(result)
except (RuntimeError, ValueError) as e:
print(f"Error: {e}")উভয় উদাহরণ প্রতিটি ফাইল খোলায় স্পষ্ট encoding="utf-8" ব্যবহার করে। এটি non-ASCII অক্ষর সহ CSV ফাইলের জন্য গুরুত্বপূর্ণ — অ্যাকসেন্টযুক্ত নাম, বিশেষ অক্ষর সহ ঠিকানা, CJK টেক্সট। স্পষ্ট এনকোডিং ছাড়া Python সিস্টেম ডিফল্টে ফিরে যায়, যা Windows-এ প্রায়ই cp1252 হয় এবং নীরবে মাল্টিবাইট অক্ষর নষ্ট করে দেয়।
json.loads() দিয়ে JSON আউটপুট যাচাই করা
CSV-কে JSON স্ট্রিংয়ে রূপান্তর করার পরে, ফলাফলটি json.loads() দিয়ে আবার পার্স করে যাচাই করতে পারেন। এই রাউন্ড-ট্রিপ এনকোডিং সমস্যা, ভাঙা এস্কেপ সিকোয়েন্স, বা অসাবধানতাবশত স্ট্রিং কনক্যাটিনেশন ধরে ফেলে যা অবৈধ JSON তৈরি করতে পারে। try/except ব্লকে কলটি মোড়িয়ে দিন।
import json
json_string = json.dumps({"order_id": "ORD-7291", "total": 129.99})
# আবার পার্স করে বৈধ JSON কিনা যাচাই করুন
try:
parsed = json.loads(json_string)
print(f"Valid JSON with {len(parsed)} keys")
except json.JSONDecodeError as e:
print(f"Invalid JSON: {e}")
# Valid JSON with 2 keysকমান্ড-লাইন থেকে CSV থেকে JSON রূপান্তর
টার্মিনাল থেকে দ্রুত রূপান্তর — কোনো স্ক্রিপ্ট ফাইলের প্রয়োজন নেই। Python-এর -c ফ্ল্যাগ ইনলাইন কোড চালায়, এবং সুন্দরভাবে প্রিন্ট করার জন্য ফলাফলটি python3 -m json.tool-এর মধ্য দিয়ে পাইপ করতে পারেন।
python3 -c " import csv, json, sys rows = list(csv.DictReader(sys.stdin)) json.dump(rows, sys.stdout, indent=2) " < inventory.csv > inventory.json
python3 -c "import csv,json,sys; print(json.dumps(list(csv.DictReader(sys.stdin))))" < data.csv | python3 -m json.tool
python3 -c "import csv,json,sys; json.dump(list(csv.DictReader(sys.stdin)),sys.stdout)" < report.csv | jq .
python3 -m json.tool হলো অন্তর্নির্মিত JSON ফরম্যাটার। এটি stdin থেকে JSON পড়ে, যাচাই করে এবং ৪-স্পেস ইন্ডেন্টেশন সহ প্রিন্ট করে। আপনার CSV-থেকে-JSON রূপান্তর বৈধ আউটপুট তৈরি করেছে কিনা যাচাই করতে উপযোগী। ২-স্পেস ইন্ডেন্ট পছন্দ করলে বা ফিল্টারিং দরকার হলে, এর পরিবর্তে jq ব্যবহার করুন।উচ্চ-কার্যক্ষমতার বিকল্প — orjson
বেশিরভাগ CSV ফাইলের জন্য অন্তর্নির্মিত json মডিউল ভালোভাবে কাজ করে। কিন্তু আপনি যদি লুপে হাজার হাজার সারির ডেটাসেট প্রক্রিয়া করছেন, বা আপনার API-কে প্রতিটি অনুরোধে CSV-থেকে-প্রাপ্ত ডেটা সিরিয়ালাইজ করতে হয়, তাহলে orjson ৫–১০ গুণ দ্রুত। এটি Rust-এ লেখা, str-এর পরিবর্তে bytes রিটার্ন করে, এবং কাস্টম default= ফাংশন ছাড়াই নেটিভলি datetime, UUID, এবং numpy অ্যারে সিরিয়ালাইজ করে।
pip install orjson
import csv
import orjson
with open("telemetry_events.csv", "r", encoding="utf-8") as f:
rows = list(csv.DictReader(f))
# orjson.dumps() str নয়, bytes রিটার্ন করে
json_bytes = orjson.dumps(rows, option=orjson.OPT_INDENT_2)
with open("telemetry_events.json", "wb") as f: # নোট: bytes-এর জন্য "wb"
f.write(json_bytes)
print(f"Wrote {len(rows)} events ({len(json_bytes)} bytes)")API সামান্য আলাদা: orjson.dumps() bytes রিটার্ন করে এবং কীওয়ার্ড আর্গুমেন্টের পরিবর্তে option= ফ্ল্যাগ ব্যবহার করে। orjson আউটপুট লেখার সময় বাইনারি রাইট মোডে ("wb") ফাইল খুলুন। স্ট্রিং প্রয়োজন হলে ফলাফলে .decode("utf-8") কল করুন।
সিনট্যাক্স হাইলাইটিং সহ টার্মিনাল আউটপুট — rich
রঙিন আউটপুট দিয়ে টার্মিনালে CSV-থেকে-JSON রূপান্তর ডিবাগ করা সহজ হয়। rich লাইব্রেরি সিনট্যাক্স হাইলাইটিং সহ JSON রেন্ডার করে — কী, স্ট্রিং, সংখ্যা এবং boolean প্রত্যেকটি আলাদা রং পায়।
pip install rich
import csv
import json
from rich.console import Console
from rich.syntax import Syntax
console = Console()
with open("deployment_log.csv", "r", encoding="utf-8") as f:
rows = list(csv.DictReader(f))
json_output = json.dumps(rows[:3], indent=2, ensure_ascii=False)
syntax = Syntax(json_output, "json", theme="monokai", line_numbers=True)
console.print(syntax)rich আউটপুটে ANSI এস্কেপ কোড যোগ করে। rich-ফরম্যাটেড আউটপুট কোনো ফাইলে বা API রেসপন্সে লিখবেন না — এতে অদৃশ্য কন্ট্রোল অক্ষর থাকবে। rich কেবল টার্মিনাল প্রদর্শনের জন্য ব্যবহার করুন।বড় CSV ফাইলের সাথে কাজ করা
list(csv.DictReader(f)) দিয়ে ৫০০ MB CSV ফাইল লোড করলে মেমোরিতে সম্পূর্ণ ডেটাসেট বরাদ্দ হয়, তারপর json.dump() তার উপরে সম্পূর্ণ JSON স্ট্রিং তৈরি করে। ৫০–১০০ MB-এর চেয়ে বড় ফাইলের জন্য, স্ট্রিমিং পদ্ধতিতে যান অথবা NDJSON (নিউলাইন-বিভক্ত JSON) লিখুন — প্রতি লাইনে একটি JSON অবজেক্ট।
NDJSON — প্রতি লাইনে একটি JSON অবজেক্ট
import csv
import json
def csv_to_ndjson(csv_path: str, ndjson_path: str) -> int:
"""CSV থেকে NDJSON-এ রূপান্তর করুন, একসময়ে একটি সারি প্রক্রিয়া করে।"""
count = 0
with open(csv_path, "r", encoding="utf-8") as infile, \
open(ndjson_path, "w", encoding="utf-8") as outfile:
for row in csv.DictReader(infile):
outfile.write(json.dumps(row, ensure_ascii=False) + "\n")
count += 1
return count
rows_written = csv_to_ndjson("access_log.csv", "access_log.ndjson")
print(f"Wrote {rows_written} lines to access_log.ndjson")
# প্রতিটি লাইন একটি স্বতন্ত্র JSON অবজেক্ট:
# {"timestamp":"2026-03-15T09:12:00Z","method":"GET","path":"/api/v2/orders","status":"200"}
# {"timestamp":"2026-03-15T09:12:01Z","method":"POST","path":"/api/v2/payments","status":"201"}বড় JSON ইনপুটের জন্য ijson দিয়ে স্ট্রিমিং
import ijson # pip install ijson
def count_high_value_orders(json_path: str, threshold: float) -> int:
"""সম্পূর্ণ ফাইল লোড না করে একটি সীমার উপরে অর্ডার গণনা করুন।"""
count = 0
with open(json_path, "rb") as f:
for item in ijson.items(f, "item"):
if float(item.get("total", 0)) > threshold:
count += 1
return count
# স্থির মেমোরি ব্যবহারে ২ GB JSON ফাইল প্রক্রিয়া করুন
high_value = count_high_value_orders("all_orders.json", 500.0)
print(f"Found {high_value} orders above $500")ijson বড় JSON ফাইল আবার পড়ার জন্য — লেখার দিক থেকে, উপরের NDJSON প্যাটার্ন ফাইলের আকার নির্বিশেষে মেমোরি ব্যবহার স্থির রাখে।সাধারণ ভুলসমূহ
সমস্যা: json.dumps() একটি স্ট্রিং রিটার্ন করে। f.write() দিয়ে লেখা কাজ করে কিন্তু মেমোরিতে একটি অপ্রয়োজনীয় মধ্যবর্তী স্ট্রিং তৈরি করে — বড় ডেটাসেটের জন্য অপচয়।
সমাধান: সরাসরি ফাইল অবজেক্টে লিখতে json.dump(data, f) ব্যবহার করুন। এটি প্রথমে সম্পূর্ণ স্ট্রিং তৈরি না করেই আউটপুট স্ট্রিম করে।
json_string = json.dumps(rows, indent=2)
with open("output.json", "w") as f:
f.write(json_string) # unnecessary intermediate stringwith open("output.json", "w", encoding="utf-8") as f:
json.dump(rows, f, indent=2, ensure_ascii=False) # direct writeসমস্যা: csv.DictReader সব মান স্ট্রিং হিসেবে রিটার্ন করে। JSON আউটপুটে "quantity": 5-এর পরিবর্তে "quantity": "5" থাকে, যা টাইপ-যাচাইকারী API ভোক্তাদের জন্য সমস্যা তৈরি করে।
সমাধান: সিরিয়ালাইজ করার আগে সংখ্যাসূচক কলামগুলো স্পষ্টভাবে int() বা float() দিয়ে কাস্ট করুন।
rows = list(csv.DictReader(f))
json.dumps(rows)
# [{"port": "8080", "workers": "4"}] ← strings, not numbersrows = list(csv.DictReader(f))
for row in rows:
row["port"] = int(row["port"])
row["workers"] = int(row["workers"])
json.dumps(rows)
# [{"port": 8080, "workers": 4}] ← proper integersসমস্যা: Windows-এ ডিফল্ট এনকোডিং cp1252। Non-ASCII অক্ষর (অ্যাকসেন্টযুক্ত নাম, CJK টেক্সট) নীরবে নষ্ট হয়ে যায় বা UnicodeDecodeError উত্থাপিত হয়।
সমাধান: CSV পড়া এবং JSON লেখা উভয়ের জন্য open()-এ সর্বদা encoding='utf-8' পাস করুন।
with open("locations.csv", "r") as f: # uses system default encoding
rows = list(csv.DictReader(f))with open("locations.csv", "r", encoding="utf-8") as f:
rows = list(csv.DictReader(f))সমস্যা: str(my_dict) Python সিনট্যাক্স তৈরি করে (একক কোট, True, None) যা বৈধ JSON নয়। API এবং JSON পার্সার এটি প্রত্যাখ্যান করে।
সমাধান: বৈধ JSON তৈরি করতে সর্বদা json.dumps() ব্যবহার করুন। এটি True-কে true, None-কে null-এ রূপান্তর করে এবং ডাবল কোট ব্যবহার করে।
output = str({"active": True, "note": None})
# "{'active': True, 'note': None}" ← NOT valid JSONoutput = json.dumps({"active": True, "note": None})
# '{"active": true, "note": null}' ← valid JSONjson.dumps() বনাম বিকল্পসমূহ — দ্রুত তুলনা
বেশিরভাগ CSV-থেকে-JSON রূপান্তরের জন্য, স্ট্যান্ডার্ড লাইব্রেরি csv + json সমন্বয়ই সঠিক পছন্দ: কোনো নির্ভরতা নেই, Python-এর সাথে আসে, সর্বত্র কাজ করে। প্রোফাইলিং দেখালে সিরিয়ালাইজেশন বাধা — বড় পরিসরে গতির পার্থক্য বাস্তব — তখন orjson ব্যবহার করুন। JSON-এ রূপান্তরের আগে ডেটা পরিষ্কার, ফিল্টার বা সমষ্টি করার প্রয়োজন হলে pandas ব্যবহার করুন। কোড না লিখে দ্রুত রূপান্তরের জন্য, অনলাইন CSV to JSON কনভার্টার তাৎক্ষণিকভাবে সামলায়।
সচরাচর জিজ্ঞাসা
Python-এ json.dump() এবং json.dumps()-এর মধ্যে পার্থক্য কী?
json.dump(obj, file) JSON আউটপুট সরাসরি একটি ফাইল-সদৃশ অবজেক্টে (যেকোনো .write() মেথড সহ কিছু) লেখে। json.dumps(obj) একটি JSON-ফরম্যাটেড স্ট্রিং রিটার্ন করে। ফাইলে লেখার সময় json.dump() ব্যবহার করুন, লগিং, পেলোডে এম্বেড করা বা সকেটের মাধ্যমে পাঠানোর জন্য JSON স্ট্রিং প্রয়োজন হলে json.dumps() ব্যবহার করুন। উভয় ফাংশন একই কীওয়ার্ড আর্গুমেন্ট গ্রহণ করে (indent, sort_keys, ensure_ascii, default)।
Python ডিকশনারিকে JSON স্ট্রিংয়ে কীভাবে রূপান্তর করব?
json.dumps(your_dict) কল করুন। রিটার্ন মান হলো বৈধ JSON ধারণকারী একটি str। পাঠযোগ্য আউটপুটের জন্য indent=2 যোগ করুন। যদি ডিকশনারিতে non-ASCII মান থাকে, তাহলে অ্যাকসেন্টযুক্ত অক্ষর বা CJK টেক্সটের মতো অক্ষর সংরক্ষণ করতে ensure_ascii=False পাস করুন।
import json
server_config = {"host": "api.internal", "port": 8443, "debug": False}
json_string = json.dumps(server_config, indent=2)
print(json_string)
# {
# "host": "api.internal",
# "port": 8443,
# "debug": false
# }Python-এর dict-এর তালিকাকে JSON ফাইল হিসেবে কীভাবে সংরক্ষণ করব?
UTF-8 এনকোডিং সহ write মোডে একটি ফাইল খুলুন, তারপর json.dump(your_list, f, indent=2, ensure_ascii=False) কল করুন। ফাইল আউটপুটের জন্য সর্বদা json.dump() ব্যবহার করুন (json.dumps() নয়) — এটি মেমোরিতে মধ্যবর্তী স্ট্রিং তৈরি না করেই সরাসরি ফাইল হ্যান্ডেলে লেখে।
import json
records = [
{"order_id": "ORD-4821", "total": 129.99, "currency": "USD"},
{"order_id": "ORD-4822", "total": 89.50, "currency": "EUR"},
]
with open("orders.json", "w", encoding="utf-8") as f:
json.dump(records, f, indent=2, ensure_ascii=False)কেন json.dumps() True-কে true এবং None-কে null-এ পরিণত করে?
Python বুলিয়ান (True, False) এবং None বৈধ JSON টোকেন নয়। JSON স্পেসিফিকেশন ছোট হাতের true, false এবং null ব্যবহার করে। json.dumps() এই রূপান্তর স্বয়ংক্রিয়ভাবে পরিচালনা করে — True হয় true, False হয় false, None হয় null। এগুলো ম্যানুয়ালি রূপান্তর করার প্রয়োজন নেই। বিপরীত দিকে, json.loads() এগুলোকে Python টাইপে ম্যাপ করে ফিরিয়ে দেয়।
CSV ডেটা JSON-এ রূপান্তর করার সময় datetime অবজেক্ট কীভাবে সামলাবো?
json.dumps()-এ একটি default= ফাংশন পাস করুন যা datetime অবজেক্টকে ISO 8601 স্ট্রিংয়ে রূপান্তর করে। default ফাংশন যেকোনো অবজেক্টের জন্য কল হয় যা json নেটিভলি সিরিয়ালাইজ করতে পারে না। datetime ইন্সট্যান্সের জন্য obj.isoformat() রিটার্ন করুন এবং অন্য সবকিছুর জন্য TypeError উত্থাপন করুন।
import json
from datetime import datetime
def json_default(obj):
if isinstance(obj, datetime):
return obj.isoformat()
raise TypeError(f"Not serializable: {type(obj)}")
event = {"action": "login", "timestamp": datetime(2026, 3, 15, 9, 30, 0)}
print(json.dumps(event, default=json_default))
# {"action": "login", "timestamp": "2026-03-15T09:30:00"}pandas ছাড়া কি CSV থেকে JSON-এ রূপান্তর করা সম্ভব?
হ্যাঁ। Python স্ট্যান্ডার্ড লাইব্রেরিতেই সব প্রয়োজনীয় সরঞ্জাম রয়েছে। প্রতিটি সারি ডিকশনারি হিসেবে পড়তে csv.DictReader ব্যবহার করুন, সারিগুলো একটি তালিকায় সংগ্রহ করুন এবং json.dump() বা json.dumps() দিয়ে সিরিয়ালাইজ করুন। কোনো তৃতীয়-পক্ষ লাইব্রেরির প্রয়োজন নেই। pandas কেবল তখনই যুক্ত করার মূল্য আছে যখন আপনার ডেটা পরিষ্কার করা, টাইপ অনুমান বা প্রকল্পের অন্য জায়গায় ইতিমধ্যে ব্যবহার করার প্রয়োজন হয়।
import csv
import json
with open("inventory.csv", "r", encoding="utf-8") as csv_file:
rows = list(csv.DictReader(csv_file))
with open("inventory.json", "w", encoding="utf-8") as json_file:
json.dump(rows, json_file, indent=2, ensure_ascii=False)কোনো Python না লিখে এক-ক্লিকে বিকল্প পেতে, CSV to JSON কনভার্টার ব্যবহার করুন — আপনার CSV ডেটা পেস্ট করুন এবং তাৎক্ষণিকভাবে ফরম্যাটেড JSON আউটপুট পান।
সংশ্লিষ্ট সরঞ্জাম
Maria is a backend developer specialising in Python and API integration. She has broad experience with data pipelines, serialisation formats, and building reliable server-side services. She is an active member of the Python community and enjoys writing practical, example-driven guides that help developers solve real problems without unnecessary theory.
Priya is a data scientist and machine learning engineer who has worked across the full Python data stack — from raw data ingestion and cleaning to model deployment and monitoring. She is passionate about reproducible research, Jupyter-based workflows, and the practical engineering side of ML. She writes about NumPy, Pandas, data serialisation, and the Python patterns that make data pipelines reliable at scale.