Writing Your First Python Script: A Comprehensive Guide
Table of Contents
1. [Introduction to Python Scripting](#introduction-to-python-scripting) 2. [Setting Up Your Development Environment](#setting-up-your-development-environment) 3. [Understanding Python Syntax Basics](#understanding-python-syntax-basics) 4. [Creating Your First Script](#creating-your-first-script) 5. [Variables and Data Types](#variables-and-data-types) 6. [Control Structures](#control-structures) 7. [Functions in Python](#functions-in-python) 8. [File Operations](#file-operations) 9. [Error Handling](#error-handling) 10. [Best Practices and Code Organization](#best-practices-and-code-organization) 11. [Advanced Script Examples](#advanced-script-examples) 12. [Debugging and Testing](#debugging-and-testing) 13. [Command Line Arguments](#command-line-arguments) 14. [Common Python Libraries for Scripting](#common-python-libraries-for-scripting)Introduction to Python Scripting
Python scripting refers to writing Python code in files that can be executed to perform specific tasks. Unlike interactive Python sessions, scripts are saved in files with the .py extension and can be run repeatedly. Python scripts are particularly useful for automation, data processing, system administration, and rapid prototyping.
Why Choose Python for Scripting?
| Advantage | Description | |-----------|-------------| | Readable Syntax | Python's syntax closely resembles natural language, making it easy to read and write | | Cross-platform | Python scripts run on Windows, macOS, and Linux with minimal modifications | | Extensive Libraries | Vast ecosystem of third-party packages for various tasks | | Interpreted Language | No compilation step required; scripts run directly | | Strong Community | Large community support and extensive documentation | | Versatility | Suitable for web development, data science, automation, and more |
Setting Up Your Development Environment
Installing Python
Before writing your first script, ensure Python is installed on your system.
#### Windows Installation
`bash
Download from python.org and run the installer
Or use Windows Package Manager
winget install Python.Python.3.11`#### macOS Installation
`bash
Using Homebrew
brew install python3Or download from python.org
`#### Linux Installation
`bash
Ubuntu/Debian
sudo apt update sudo apt install python3 python3-pipCentOS/RHEL
sudo yum install python3 python3-pipArch Linux
sudo pacman -S python python-pip`Verifying Installation
`bash
Check Python version
python --versionor
python3 --versionCheck pip version
pip --versionor
pip3 --version`Choosing a Text Editor or IDE
| Editor/IDE | Pros | Cons | Best For | |------------|------|------|----------| | VS Code | Free, extensive extensions, integrated terminal | Can be resource-heavy | General development | | PyCharm | Professional IDE, excellent debugging | Paid version for full features | Professional development | | Sublime Text | Fast, lightweight, customizable | Not free for commercial use | Quick scripting | | Vim/Neovim | Highly customizable, available everywhere | Steep learning curve | System administrators | | IDLE | Comes with Python, simple interface | Limited features | Beginners | | Jupyter Notebook | Interactive, great for data science | Not ideal for traditional scripts | Data analysis |
Understanding Python Syntax Basics
Python Syntax Rules
Python syntax is designed to be intuitive and readable. Here are the fundamental rules:
#### Indentation Python uses indentation to define code blocks instead of curly braces or keywords.
`python
Correct indentation
if True: print("This is indented correctly") if True: print("This is nested indentation")Incorrect indentation (will cause IndentationError)
if True: print("This will cause an error")`#### Comments Comments are essential for code documentation and readability.
`python
This is a single-line comment
""" This is a multi-line comment or docstring. It can span multiple lines. """
def example_function():
"""
This is a docstring that describes
what the function does.
"""
pass # This is also a comment indicating placeholder code
`
#### Line Continuation Long lines can be continued using backslashes or implicit continuation within parentheses.
`python
Using backslash
total = item_one + \ item_two + \ item_threeUsing parentheses (preferred)
total = (item_one + item_two + item_three)`Creating Your First Script
Hello World Script
Let's create your first Python script. Create a file named hello_world.py:
`python
#!/usr/bin/env python3
"""
My First Python Script
This script prints a greeting message.
"""
def main(): """Main function that executes the script logic.""" print("Hello, World!") print("Welcome to Python scripting!") # Get user input name = input("What's your name? ") print(f"Nice to meet you, {name}!")
if __name__ == "__main__":
main()
`
Running Your Script
`bash
Method 1: Using python command
python hello_world.pyMethod 2: Using python3 (on systems with both Python 2 and 3)
python3 hello_world.pyMethod 3: Making script executable (Unix-like systems)
chmod +x hello_world.py ./hello_world.py`Script Structure Explanation
| Component | Purpose | Example |
|-----------|---------|---------|
| Shebang Line | Tells system which interpreter to use | #!/usr/bin/env python3 |
| Module Docstring | Describes what the script does | """This script does...""" |
| Imports | Import required modules | import os, sys |
| Functions | Reusable code blocks | def my_function(): |
| Main Guard | Ensures code runs only when script is executed directly | if __name__ == "__main__": |
Variables and Data Types
Variable Declaration and Assignment
Python variables don't need explicit declaration. They're created when first assigned.
`python
Variable assignment examples
name = "Alice" # String age = 30 # Integer height = 5.6 # Float is_student = True # Boolean grades = [85, 90, 78, 92] # List person = {"name": "Bob", "age": 25} # Dictionary`Data Types Overview
| Data Type | Description | Example | Common Methods |
|-----------|-------------|---------|----------------|
| int | Whole numbers | 42, -17, 0 | abs(), pow(), divmod() |
| float | Decimal numbers | 3.14, -2.5, 1.0 | round(), int(), is_integer() |
| str | Text strings | "Hello", 'World' | upper(), lower(), split(), join() |
| bool | True/False values | True, False | and, or, not operators |
| list | Ordered, mutable collection | [1, 2, 3] | append(), remove(), sort() |
| dict | Key-value pairs | {"key": "value"} | keys(), values(), items() |
| tuple | Ordered, immutable collection | (1, 2, 3) | count(), index() |
| set | Unordered, unique elements | {1, 2, 3} | add(), remove(), union() |
Type Checking and Conversion
`python
Type checking
print(type(42)) #Type conversion
number_str = "123" number_int = int(number_str) # Convert string to integer number_float = float(number_str) # Convert string to float back_to_str = str(number_int) # Convert integer back to stringSafe conversion with error handling
def safe_int_convert(value): """Safely convert value to integer.""" try: return int(value) except ValueError: print(f"Cannot convert '{value}' to integer") return None`Control Structures
Conditional Statements
`python
Basic if-elif-else structure
def grade_classifier(score): """Classify grade based on score.""" if score >= 90: grade = "A" elif score >= 80: grade = "B" elif score >= 70: grade = "C" elif score >= 60: grade = "D" else: grade = "F" return gradeTernary operator (conditional expression)
status = "Pass" if score >= 60 else "Fail"Multiple conditions
if score >= 60 and attendance >= 75: print("Eligible for certificate") elif score >= 90 or extra_credit: print("Exceptional performance")`Loops
#### For Loops
`python
Iterating over a list
fruits = ["apple", "banana", "cherry"] for fruit in fruits: print(f"I like {fruit}")Using range()
for i in range(5): # 0 to 4 print(f"Number: {i}")for i in range(1, 6): # 1 to 5 print(f"Number: {i}")
for i in range(0, 10, 2): # 0, 2, 4, 6, 8 print(f"Even number: {i}")
Enumerate for index and value
for index, fruit in enumerate(fruits): print(f"{index}: {fruit}")Dictionary iteration
person = {"name": "Alice", "age": 30, "city": "New York"} for key, value in person.items(): print(f"{key}: {value}")`#### While Loops
`python
Basic while loop
count = 0 while count < 5: print(f"Count: {count}") count += 1While loop with user input
while True: user_input = input("Enter 'quit' to exit: ") if user_input.lower() == 'quit': break print(f"You entered: {user_input}")`#### Loop Control Statements
| Statement | Purpose | Example |
|-----------|---------|---------|
| break | Exit loop completely | if condition: break |
| continue | Skip to next iteration | if condition: continue |
| else | Execute if loop completes normally | for...: else: print("Done") |
`python
Loop control examples
for i in range(10): if i == 3: continue # Skip when i is 3 if i == 7: break # Exit loop when i is 7 print(i) else: print("Loop completed normally") # Won't execute due to break`Functions in Python
Function Definition and Calling
`python
def greet(name, greeting="Hello"):
"""
Greet a person with a custom message.
Args:
name (str): Person's name
greeting (str): Greeting message (default: "Hello")
Returns:
str: Formatted greeting message
"""
return f"{greeting}, {name}!"
Function calls
print(greet("Alice")) # Hello, Alice! print(greet("Bob", "Hi")) # Hi, Bob! print(greet(greeting="Hey", name="Charlie")) # Hey, Charlie!`Function Parameters and Arguments
| Parameter Type | Description | Example |
|----------------|-------------|---------|
| Positional | Arguments passed by position | func(a, b, c) |
| Keyword | Arguments passed by name | func(a=1, b=2) |
| Default | Parameters with default values | def func(a, b=10): |
| Variable Length | Accept any number of arguments | def func(args, *kwargs): |
`python
def flexible_function(required, default_param="default", args, *kwargs):
"""Demonstrate different parameter types."""
print(f"Required: {required}")
print(f"Default: {default_param}")
print(f"Extra positional args: {args}")
print(f"Extra keyword args: {kwargs}")
Example calls
flexible_function("must_have") flexible_function("must_have", "custom", "extra1", "extra2", key1="value1", key2="value2")`Lambda Functions
`python
Lambda function syntax
square = lambda x: x 2 print(square(5)) # 25Using lambda with built-in functions
numbers = [1, 2, 3, 4, 5] squared = list(map(lambda x: x 2, numbers)) even_numbers = list(filter(lambda x: x % 2 == 0, numbers))Sorting with lambda
students = [("Alice", 85), ("Bob", 90), ("Charlie", 78)] students.sort(key=lambda student: student[1]) # Sort by grade`File Operations
Reading Files
`python
def read_file_methods():
"""Demonstrate different ways to read files."""
# Method 1: Basic file reading
file = open("example.txt", "r")
content = file.read()
file.close()
# Method 2: Using with statement (recommended)
with open("example.txt", "r") as file:
content = file.read()
print(content)
# Method 3: Reading line by line
with open("example.txt", "r") as file:
for line_number, line in enumerate(file, 1):
print(f"Line {line_number}: {line.strip()}")
# Method 4: Reading all lines into a list
with open("example.txt", "r") as file:
lines = file.readlines()
return [line.strip() for line in lines]
`
Writing Files
`python
def write_file_examples():
"""Demonstrate different ways to write files."""
# Writing text to file
with open("output.txt", "w") as file:
file.write("Hello, World!\n")
file.write("This is line 2\n")
# Appending to file
with open("output.txt", "a") as file:
file.write("This line is appended\n")
# Writing multiple lines
lines = ["Line 1\n", "Line 2\n", "Line 3\n"]
with open("output.txt", "w") as file:
file.writelines(lines)
`
File Operation Modes
| Mode | Description | File Pointer | Creates File | |------|-------------|--------------|--------------| | 'r' | Read only | Beginning | No | | 'w' | Write only (overwrites) | Beginning | Yes | | 'a' | Append only | End | Yes | | 'r+' | Read and write | Beginning | No | | 'w+' | Read and write (overwrites) | Beginning | Yes | | 'x' | Create and write (fails if exists) | Beginning | Yes | | 'b' | Binary mode (combine with others) | - | - |
File Path Operations
`python
import os
import pathlib
def file_path_operations():
"""Demonstrate file path operations."""
# Using os module
current_dir = os.getcwd()
file_path = os.path.join(current_dir, "data", "file.txt")
# Check if file/directory exists
if os.path.exists(file_path):
print(f"File size: {os.path.getsize(file_path)} bytes")
# Using pathlib (modern approach)
path = pathlib.Path("data") / "file.txt"
if path.exists():
print(f"File size: {path.stat().st_size} bytes")
print(f"Parent directory: {path.parent}")
print(f"File extension: {path.suffix}")
`
Error Handling
Try-Except Blocks
`python
def safe_division(a, b):
"""Safely divide two numbers with error handling."""
try:
result = a / b
return result
except ZeroDivisionError:
print("Error: Cannot divide by zero!")
return None
except TypeError:
print("Error: Both arguments must be numbers!")
return None
except Exception as e:
print(f"Unexpected error: {e}")
return None
else:
print("Division completed successfully")
finally:
print("Division operation attempted")
`
Common Exception Types
| Exception | Description | Common Causes |
|-----------|-------------|---------------|
| ValueError | Invalid value for operation | int("abc"), math.sqrt(-1) |
| TypeError | Wrong data type | "string" + 5, len(42) |
| IndexError | List index out of range | list[10] when list has 5 elements |
| KeyError | Dictionary key not found | dict["nonexistent_key"] |
| FileNotFoundError | File doesn't exist | Opening non-existent file |
| AttributeError | Object has no attribute | "string".nonexistent_method() |
| ImportError | Module import failed | import nonexistent_module |
Custom Exception Handling
`python
class CustomError(Exception):
"""Custom exception class."""
def __init__(self, message, error_code=None):
super().__init__(message)
self.error_code = error_code
def validate_age(age): """Validate age with custom exception.""" if not isinstance(age, int): raise CustomError("Age must be an integer", "TYPE_ERROR") if age < 0: raise CustomError("Age cannot be negative", "VALUE_ERROR") if age > 150: raise CustomError("Age seems unrealistic", "RANGE_ERROR") return True
Usage
try: validate_age(-5) except CustomError as e: print(f"Validation error: {e}") if hasattr(e, 'error_code'): print(f"Error code: {e.error_code}")`Best Practices and Code Organization
PEP 8 Style Guide
`python
Good: Clear variable names
user_name = "alice" total_amount = 150.50 is_valid = TrueBad: Unclear variable names
un = "alice" ta = 150.50 iv = TrueGood: Function naming
def calculate_total_price(items): """Calculate total price of items.""" passGood: Class naming
class ShoppingCart: """Represents a shopping cart.""" passGood: Constants
MAX_RETRY_ATTEMPTS = 3 DEFAULT_TIMEOUT = 30`Code Organization Structure
`python
#!/usr/bin/env python3
"""
Script Description: Brief description of what the script does
Author: Your Name
Date: Creation date
Version: 1.0
"""
Standard library imports
import os import sys import json from datetime import datetimeThird-party imports
import requests import pandas as pdLocal imports
from my_module import helper_functionConstants
MAX_CONNECTIONS = 10 DEFAULT_CONFIG_FILE = "config.json"Global variables (use sparingly)
debug_mode = Falseclass MyClass: """Class docstring.""" pass
def utility_function(): """Utility function docstring.""" pass
def main(): """Main function that orchestrates the script execution.""" # Main script logic here pass
if __name__ == "__main__":
main()
`
Documentation Best Practices
`python
def process_data(data, format_type="json", validate=True):
"""
Process data according to specified format and validation rules.
This function takes raw data and processes it according to the specified
format type. It can optionally validate the data before processing.
Args:
data (dict or list): Raw data to be processed
format_type (str, optional): Output format ('json', 'csv', 'xml').
Defaults to 'json'.
validate (bool, optional): Whether to validate data before processing.
Defaults to True.
Returns:
str: Processed data in the specified format
Raises:
ValueError: If data format is invalid
TypeError: If data is not dict or list
Examples:
>>> data = {"name": "Alice", "age": 30}
>>> result = process_data(data, format_type="json")
>>> print(result)
'{"name": "Alice", "age": 30}'
>>> data_list = [1, 2, 3, 4, 5]
>>> result = process_data(data_list, format_type="csv")
>>> print(result)
'1,2,3,4,5'
"""
pass
`
Advanced Script Examples
File Processing Script
`python
#!/usr/bin/env python3
"""
File Processing Script
Processes text files and generates statistics.
"""
import os import sys import argparse from collections import Counter import re
class FileProcessor: """Handles file processing operations.""" def __init__(self, file_path): """Initialize with file path.""" self.file_path = file_path self.content = "" self.stats = {} def read_file(self): """Read file content.""" try: with open(self.file_path, 'r', encoding='utf-8') as file: self.content = file.read() return True except FileNotFoundError: print(f"Error: File '{self.file_path}' not found") return False except PermissionError: print(f"Error: Permission denied for file '{self.file_path}'") return False def analyze_content(self): """Analyze file content and generate statistics.""" if not self.content: return lines = self.content.split('\n') words = re.findall(r'\b\w+\b', self.content.lower()) self.stats = { 'total_characters': len(self.content), 'total_lines': len(lines), 'total_words': len(words), 'unique_words': len(set(words)), 'average_line_length': sum(len(line) for line in lines) / len(lines) if lines else 0, 'most_common_words': Counter(words).most_common(10) } def generate_report(self): """Generate and return analysis report.""" if not self.stats: return "No statistics available" report = f""" File Analysis Report for: {self.file_path} {'=' * 50} Total Characters: {self.stats['total_characters']:,} Total Lines: {self.stats['total_lines']:,} Total Words: {self.stats['total_words']:,} Unique Words: {self.stats['unique_words']:,} Average Line Length: {self.stats['average_line_length']:.2f}
Most Common Words: {'-' * 20} """ for word, count in self.stats['most_common_words']: report += f"{word:<15} {count:>5}\n" return report def save_report(self, output_file): """Save report to file.""" report = self.generate_report() try: with open(output_file, 'w', encoding='utf-8') as file: file.write(report) print(f"Report saved to: {output_file}") except Exception as e: print(f"Error saving report: {e}")
def main(): """Main function.""" parser = argparse.ArgumentParser(description='Analyze text files') parser.add_argument('file', help='Path to the text file to analyze') parser.add_argument('-o', '--output', help='Output file for report') parser.add_argument('-v', '--verbose', action='store_true', help='Verbose output') args = parser.parse_args() if args.verbose: print(f"Processing file: {args.file}") processor = FileProcessor(args.file) if not processor.read_file(): sys.exit(1) processor.analyze_content() if args.output: processor.save_report(args.output) else: print(processor.generate_report())
if __name__ == "__main__":
main()
`
Web Scraping Script
`python
#!/usr/bin/env python3
"""
Web Scraping Script
Scrapes data from websites and saves to file.
"""
import requests from bs4 import BeautifulSoup import csv import time import logging from urllib.parse import urljoin, urlparse
Configure logging
logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(levelname)s - %(message)s')class WebScraper: """Web scraping utility class.""" def __init__(self, base_url, headers=None, delay=1): """Initialize scraper with base URL and options.""" self.base_url = base_url self.delay = delay self.session = requests.Session() # Set default headers default_headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36' } self.session.headers.update(headers or default_headers) def fetch_page(self, url): """Fetch a single page.""" try: response = self.session.get(url, timeout=10) response.raise_for_status() return response.text except requests.RequestException as e: logging.error(f"Error fetching {url}: {e}") return None def parse_content(self, html, selectors): """Parse HTML content using CSS selectors.""" soup = BeautifulSoup(html, 'html.parser') data = {} for key, selector in selectors.items(): elements = soup.select(selector) if elements: data[key] = [elem.get_text(strip=True) for elem in elements] else: data[key] = [] return data def scrape_multiple_pages(self, urls, selectors, output_file): """Scrape multiple pages and save to CSV.""" all_data = [] for i, url in enumerate(urls, 1): logging.info(f"Scraping page {i}/{len(urls)}: {url}") html = self.fetch_page(url) if html: data = self.parse_content(html, selectors) all_data.append(data) # Be respectful to the server time.sleep(self.delay) # Save to CSV self.save_to_csv(all_data, output_file) def save_to_csv(self, data_list, filename): """Save scraped data to CSV file.""" if not data_list: logging.warning("No data to save") return # Get all unique keys all_keys = set() for data in data_list: all_keys.update(data.keys()) with open(filename, 'w', newline='', encoding='utf-8') as csvfile: writer = csv.writer(csvfile) # Write header writer.writerow(list(all_keys)) # Write data for data in data_list: row = [] for key in all_keys: values = data.get(key, []) row.append('; '.join(values) if values else '') writer.writerow(row) logging.info(f"Data saved to {filename}")
def main(): """Main function demonstrating web scraping.""" # Example: Scraping news headlines urls = [ "https://example-news-site.com/page1", "https://example-news-site.com/page2", ] selectors = { 'headlines': 'h2.headline', 'authors': '.author-name', 'dates': '.publish-date' } scraper = WebScraper("https://example-news-site.com", delay=2) scraper.scrape_multiple_pages(urls, selectors, "news_data.csv")
if __name__ == "__main__":
main()
`
Debugging and Testing
Debugging Techniques
`python
import pdb
import logging
Configure logging for debugging
logging.basicConfig(level=logging.DEBUG, format='%(asctime)s - %(name)s - %(levelname)s - %(message)s')def debug_example_function(numbers): """Function with debugging examples.""" logging.debug(f"Function called with: {numbers}") # Print debugging print(f"DEBUG: Processing {len(numbers)} numbers") # Assertion for debugging assert isinstance(numbers, list), "Input must be a list" assert len(numbers) > 0, "List cannot be empty" result = [] for i, num in enumerate(numbers): # Breakpoint for debugging if num < 0: pdb.set_trace() # Debugger will stop here processed = num * 2 result.append(processed) logging.debug(f"Processed item {i}: {num} -> {processed}") return result
Using try-except for debugging
def safe_operation(data): """Demonstrate error handling for debugging.""" try: result = risky_operation(data) return result except Exception as e: logging.error(f"Error in safe_operation: {e}") logging.debug(f"Data that caused error: {data}") raise # Re-raise the exception`Simple Testing
`python
def test_functions():
"""Simple test function."""
# Test cases
test_cases = [
([1, 2, 3], [2, 4, 6]),
([0, -1, 5], [0, -2, 10]),
([], [])
]
for i, (input_data, expected) in enumerate(test_cases):
try:
result = debug_example_function(input_data)
if result == expected:
print(f"Test {i+1}: PASSED")
else:
print(f"Test {i+1}: FAILED - Expected {expected}, got {result}")
except Exception as e:
print(f"Test {i+1}: ERROR - {e}")
Run tests
if __name__ == "__main__": test_functions()`Command Line Arguments
Using argparse
`python
import argparse
import sys
def create_argument_parser(): """Create and configure argument parser.""" parser = argparse.ArgumentParser( description='Example script with command line arguments', epilog='Example: python script.py -f input.txt -o output.txt --verbose' ) # Positional arguments parser.add_argument('input_file', help='Input file path') # Optional arguments parser.add_argument('-o', '--output', help='Output file path', default='output.txt') parser.add_argument('-v', '--verbose', action='store_true', help='Enable verbose output') parser.add_argument('--format', choices=['json', 'csv', 'txt'], default='txt', help='Output format') parser.add_argument('-n', '--number', type=int, default=10, help='Number of items to process') return parser
def main(): """Main function using command line arguments.""" parser = create_argument_parser() args = parser.parse_args() # Use arguments if args.verbose: print(f"Processing file: {args.input_file}") print(f"Output file: {args.output}") print(f"Format: {args.format}") print(f"Number of items: {args.number}") # Your script logic here process_file(args.input_file, args.output, args.format, args.number)
def process_file(input_file, output_file, format_type, num_items): """Process file based on arguments.""" # Implementation here pass
if __name__ == "__main__":
main()
`
Common Python Libraries for Scripting
Essential Libraries Overview
| Library | Purpose | Installation | Common Use Cases |
|---------|---------|--------------|------------------|
| os | Operating system interface | Built-in | File operations, environment variables |
| sys | System-specific parameters | Built-in | Command line args, exit codes |
| json | JSON data handling | Built-in | API responses, configuration files |
| csv | CSV file handling | Built-in | Data import/export |
| datetime | Date and time operations | Built-in | Timestamps, date calculations |
| re | Regular expressions | Built-in | Text pattern matching |
| requests | HTTP library | pip install requests | Web APIs, downloading files |
| pandas | Data manipulation | pip install pandas | Data analysis, CSV/Excel processing |
| pathlib | Object-oriented file paths | Built-in (Python 3.4+) | Modern path handling |
Library Usage Examples
`python
Working with dates
from datetime import datetime, timedelta import json import csvdef date_operations(): """Demonstrate date operations.""" now = datetime.now() yesterday = now - timedelta(days=1) print(f"Current time: {now.strftime('%Y-%m-%d %H:%M:%S')}") print(f"Yesterday: {yesterday.strftime('%Y-%m-%d')}")
JSON operations
def json_operations(): """Demonstrate JSON operations.""" data = { "name": "Alice", "age": 30, "hobbies": ["reading", "swimming"] } # Write JSON with open("data.json", "w") as f: json.dump(data, f, indent=2) # Read JSON with open("data.json", "r") as f: loaded_data = json.load(f) print(loaded_data)CSV operations
def csv_operations(): """Demonstrate CSV operations.""" # Writing CSV data = [ ["Name", "Age", "City"], ["Alice", 30, "New York"], ["Bob", 25, "London"] ] with open("people.csv", "w", newline="") as f: writer = csv.writer(f) writer.writerows(data) # Reading CSV with open("people.csv", "r") as f: reader = csv.DictReader(f) for row in reader: print(f"{row['Name']} is {row['Age']} years old")`This comprehensive guide provides a solid foundation for writing Python scripts. Start with simple scripts and gradually incorporate more advanced features as you become comfortable with the basics. Remember to follow best practices, handle errors gracefully, and document your code thoroughly for maintainability.