Python Tutorial — Learn Python Step by Step
Key takeaway: Master Python programming from scratch — variables, loops, functions, OOP, file handling, and libraries — with clear human-readable explanations and runnable code examples.
Writing CSV Files in Python
Python's csv.writer and csv.DictWriter handle writing tabular data to CSV files, including proper quoting and escaping of special characters.
Basic Writing with csv.writer
import cs
import csv
# Write rows as lists
with open("output.csv", "w", newline="") as f:
writer = csv.writer(f)
# Write header
writer.writerow(["name", "age", "city"])
# Write individual rows
writer.writerow(["Alice", 30, "New York"])
writer.writerow(["Bob", 25, "London"])
# Write multiple rows at once
more_data = [
["Charlie", 35, "Tokyo"],
["Diana", 28, "Paris"],
]
writer.writerows(more_data)
# IMPORTANT: newline="" prevents double blank lines on Windows
Writing with csv.DictWriter
import csv
# Write from dictionaries — clearer and less error-prone
users = [
{"name": "Alice", "email": "alice@example.com", "role": "admin"},
{"name": "Bob", "email": "bob@example.com", "role": "user"},
{"name": "Charlie", "email": "charlie@example.com", "role": "user"},
]
with open("users.csv", "w", newline="") as f:
fieldnames = ["name", "email", "role"]
writer = csv.DictWriter(f, fieldnames=fieldnames)
writer.writeheader() # writes the header row
writer.writerows(users) # writes all data rows
# Handling missing keys with restval and extrasaction
with open("partial.csv", "w", newline="") as f:
writer = csv.DictWriter(
f,
fieldnames=["name", "email", "phone"],
restval="N/A", # value for missing keys
extrasaction="ignore" # ignore extra keys in dicts
)
writer.writeheader()
writer.writerow({"name": "Alice", "email": "alice@test.com"})
# phone column will show "N/A"
Customizing Output Format
import csv
data = [
["Product", "Price", "Description"],
["Widget", 19.99, "A useful widget, very popular"],
["Gadget", 49.99, "High-tech gadget (\"premium\")"],
]
# Tab-separated output
with open("output.tsv", "w", newline="") as f:
writer = csv.writer(f, delimiter="\t")
writer.writerows(data)
# Quote all fields
with open("quoted.csv", "w", newline="") as f:
writer = csv.writer(f, quoting=csv.QUOTE_ALL)
writer.writerows(data)
# Quote only non-numeric fields
with open("smart_quoted.csv", "w", newline="") as f:
writer = csv.writer(f, quoting=csv.QUOTE_NONNUMERIC)
writer.writerows(data)
# Quoting options:
# csv.QUOTE_MINIMAL — only quote when needed (default)
# csv.QUOTE_ALL — quote every field
# csv.QUOTE_NONNUMERIC — quote strings, leave numbers unquoted
# csv.QUOTE_NONE — never quote (use escapechar instead)
Appending to Existing CSV
import csv
import os
filename = "log.csv"
# Check if file exists to decide whether to write header
file_exists = os.path.exists(filename)
with open(filename, "a", newline="") as f: # "a" for append
writer = csv.writer(f)
if not file_exists:
writer.writerow(["timestamp", "event", "user"])
writer.writerow(["2024-01-15 10:30", "login", "alice"])
writer.writerow(["2024-01-15 10:35", "purchase", "alice"])
Practical: Export Database/API Results
import csv
# Convert a list of objects/dicts to CSV
def export_to_csv(data, filename, fields=None):
"""Export list of dicts to a CSV file."""
if not data:
print("No data to export")
return
# Auto-detect fields from first record if not provided
if fields is None:
fields = list(data[0].keys())
with open(filename, "w", newline="") as f:
writer = csv.DictWriter(f, fieldnames=fields)
writer.writeheader()
writer.writerows(data)
print(f"Exported {len(data)} records to {filename}")
# Usage
orders = [
{"id": 1, "product": "Widget", "qty": 5, "total": 99.95},
{"id": 2, "product": "Gadget", "qty": 2, "total": 99.98},
{"id": 3, "product": "Tool", "qty": 10, "total": 149.90},
]
export_to_csv(orders, "orders_export.csv")
# Export only specific columns
export_to_csv(orders, "summary.csv", fields=["product", "total"])
- Always use
newline="" when opening files for CSV writing to prevent blank rows. - Use
csv.DictWriter for clarity — column order is explicit and data is self-documenting. - The csv module auto-handles quoting of values containing commas, quotes, or newlines.
- Use append mode (
"a") to add rows without overwriting existing data. - Set
restval and extrasaction to handle incomplete or extra dictionary keys.
Python Programming Tutorial — Learn Python in a practical, step-by-step way. According to the official Python documentation, Python emphasizes code readability and simplicity, making it ideal for beginners.
Related tools: Python Online Compiler | Python Examples | JavaScript Tutorial | Java Tutorial
Python Career & Learning Guide
Python is the world's most popular programming language for beginners, data science, AI/ML, web development, and automation. This tutorial teaches Python step-by-step with clear explanations and runnable code examples in our free Python Compiler.
Why Learn Python in 2026?
- #1 Most Popular Language: Ranked first on TIOBE, Stack Overflow, and GitHub.
- AI and Data Science: The primary language for machine learning (TensorFlow, PyTorch, scikit-learn) and data analysis (Pandas, NumPy).
- Web Development: Django and Flask power scalable backends at companies like Instagram and Spotify.
- Automation & Scripting: Automate files, emails, web scraping, and data processing in minutes.
Python vs Other Languages
| Feature | Python | Java | JavaScript | C++ |
|---|---|---|---|---|
| Syntax | Very clean, readable | Verbose | Moderate | Complex |
| Typing | Dynamic, strong | Static, strong | Dynamic, weak | Static, strong |
| Best For | AI/ML, Data, Web | Enterprise, Android | Web Frontend/Backend | Systems, Games |
| Learning Time | 2–4 weeks basics | 4–6 weeks basics | 3–4 weeks basics | 8–12 weeks basics |
Frequently Asked Questions
Do I need prior programming experience to learn Python?
No! Python is specifically designed to be beginner-friendly. This tutorial starts from zero and builds up gradually.
Which Python version should I use?
Python 3.10+ is recommended. All examples in this tutorial use Python 3 syntax.
Is this Python tutorial completely free?
Yes, 100% free with no registration or sign-up required. Access all lessons and code examples anytime.