输入与输出

翻译整理自 Python Tutorial - Input and Output。

1. 格式化字符串

f-string(推荐,3.6+)

name = "Go"
year = 2009
f"{name} was released in {year}"           # 'Go was released in 2009'
f"{3.14159:.2f}"                          # '3.14'
f"{'center':*^20}"                        # '******center*******'
f"{1234567:,}"                            # '1,234,567'

str.format

"{0} is {1}".format("Go", "great")
"{name} likes {food}".format(name="Bob", food="pizza")
"{0:>10}".format("right")

printf 风格

"%s = %d" % ("x", 1)

repr 与 str

s = "Hello"
str(s)   # 'Hello'
repr(s)  # "'Hello'"

2. 文件读写

with open("file.txt", "r", encoding="utf-8") as f:
    text = f.read()
    # 或逐行
    for line in f:
        process(line)

写入:

with open("out.txt", "w", encoding="utf-8") as f:
    f.write("Hello\n")
    print("World", file=f)

模式:

模式 含义
r 只读(默认)
w 覆盖写
a 追加
b 二进制(与上组合:rb)
+ 读写

3. JSON

import json

data = {"name": "Go", "year": 2009}
json_str = json.dumps(data, ensure_ascii=False, indent=2)
loaded   = json.loads(json_str)

with open("data.json", "w", encoding="utf-8") as f:
    json.dump(data, f, ensure_ascii=False)

with open("data.json", "r", encoding="utf-8") as f:
    data2 = json.load(f)

4. CSV

import csv

with open("data.csv", "r", encoding="utf-8") as f:
    reader = csv.reader(f)
    for row in reader:
        print(row)

with open("out.csv", "w", newline="", encoding="utf-8") as f:
    writer = csv.writer(f)
    writer.writerow(["name", "age"])
    writer.writerows([["A", 1], ["B", 2]])

5. pickle 序列化

pickle 可以序列化几乎所有 Python 对象,但不安全,不要加载不可信来源:

import pickle
pickle.dumps([1, 2, 3])
pickle.loads(b'...')

6. 路径与文件系统

os.path 与 pathlib:

from pathlib import Path

p = Path("/tmp/data")
p.exists()
p.mkdir(parents=True, exist_ok=True)
(p / "file.txt").write_text("hi", encoding="utf-8")
list(p.glob("*.txt"))

7. 命令行参数

import sys
print(sys.argv)

# argparse 更强大
import argparse
parser = argparse.ArgumentParser()
parser.add_argument("--name", required=True)
parser.add_argument("--count", type=int, default=1)
args = parser.parse_args()

小结

掌握格式化、文件 IO、JSON、CSV、pathlib 后,已能处理大多数实际任务。下一章学习错误与异常。