7. Files & APIs
Read and write files safely, work with paths, and call web APIs reliably.
Question: What is the best way to read from a file?
Answer: The with open(...)
statement is the standard. It automatically handles closing the file, even if errors occur. The pathlib
module is a modern, object-oriented way to handle file paths.
from pathlib import Path
path = Path("data.txt")
# write
path.write_text("Hello", encoding="utf-8")
# read
with path.open("r", encoding="utf-8") as f:
data = f.read()
Question: How do you make an HTTP request to a web API?
Answer: The requests
library is the standard for making HTTP requests. You can use it to GET
data from or POST
data to web services.
import requests
response = requests.get("https://api.github.com/users/python")
if response.status_code == 200:
data = response.json() # .json() parses the JSON response
Question: What is JSON and how do you use it in Python?
Answer: JSON is a lightweight text format for data exchange, common in web APIs. Python's built-in json
module can parse JSON strings into Python dictionaries (json.loads()
) and convert Python objects into JSON strings (json.dumps()
).
import json
data = json.loads('{"name": "Ada", "age": 30}')
text = json.dumps(data, indent=2, ensure_ascii=False)
Question: How do you build a simple CLI with
argparse
?
Answer: Use argparse.ArgumentParser
to define arguments and parse them from the command line.
import argparse
parser = argparse.ArgumentParser()
parser.add_argument("name")
parser.add_argument("--times", type=int, default=1)
args = parser.parse_args(["Ada", "--times", "2"]) # example
for _ in range(args.times):
print(f"Hello {args.name}")
Question: How do you work with CSV files?
Answer: Use the csv
module for robust parsing and writing; always open files with newline=""
on Windows to avoid extra blank lines.
import csv
from pathlib import Path
with Path("data.csv").open("w", newline="", encoding="utf-8") as f:
writer = csv.writer(f)
writer.writerow(["name", "age"])
writer.writerows([["Ada", 30], ["Bob", 25]])
with Path("data.csv").open("r", newline="", encoding="utf-8") as f:
reader = csv.DictReader(f)
rows = list(reader)
Question: How to read/write binary files?
Answer: Use modes "rb" and "wb"; process bytes objects.
data = Path("image.png").read_bytes()
Path("copy.png").write_bytes(data)
Question: How to make HTTP requests robustly?
Answer: Always set timeouts, handle exceptions, and consider retries/backoff.
import requests
try:
resp = requests.get("https://example.com", timeout=5)
resp.raise_for_status()
except requests.exceptions.RequestException as e:
print("Request failed:", e)
Question: How do you work with paths using
pathlib
?
Answer: Use Path
methods like joinpath
, glob
, and iterdir
for cross-platform path handling.
from pathlib import Path
logs_dir = Path("logs")
for p in logs_dir.glob("*.log"):
print(p.name)