当前位置:首页>python>大学生用 Python 处理文件,写作业快一倍的 5 个技巧

大学生用 Python 处理文件,写作业快一倍的 5 个技巧

  • 2026-10-11 07:55:25
大学生用 Python 处理文件,写作业快一倍的 5 个技巧

文件操作是 Python 最实用的技能之一——不管你是学生还是用 Python 做数据处理的打工人,迟早要和文件打交道。

这 5 个技巧,能让你告别手动操作,把重复劳动交给脚本。


1. 用 zipfile 处理压缩文件

做数据分析的朋友特别需要知道这个,能省掉很多手动处理的时间。

童生会这样写:


import subprocess
subprocess.run(['unzip', 'archive.zip', '-d', 'output/'])

状元会这样写:


import zipfile
# 解压
with zipfile.ZipFile('archive.zip', 'r') as zf:
    zf.extractall('output/')
    print(zf.namelist())
# 创建压缩包
with zipfile.ZipFile('result.zip', 'w') as zf:
    zf.writestr('info.txt', 'hello world')

zipfile 是 Python 标准库的 ZIP 处理模块,跨平台可用,不依赖外部命令。writestr 可以直接写入字符串内容,无需先创建文件。


2. 用 csv 模块处理 CSV 文件

有次代码评审被同事用这招秀了一脸,回去立马学会了。十年了还记得那个表情。

很多人会这样写:


with open('data.csv') as f:
    for line in f:
        fields = line.strip().split(',')
        # 如果字段包含逗号就出错了!

其实可以这样:


import csv
with open('data.csv', newline='', encoding='utf-8') as f:
    reader = csv.DictReader(f)
    for row in reader:
        print(row['name'], row['age'])

csv 模块正确处理引号、逗号转义等边界情况。DictReader 按列名访问比索引更可读。记得加 newline='' 避免空行问题。


3. 用 open 的 encoding 参数避免乱码

第一次看到这个写法的时候,我盯着屏幕愣了三秒。然后默默改了自己之前的代码。

菜鸟写法:


with open('chinese.txt') as f:
    content = f.read()  # Windows 可能用 GBK 解码,Linux 用 UTF-8

大神写法:


with open('chinese.txt', encoding='utf-8') as f:
    content = f.read()
# 或用 errors 参数处理解码错误
with open('messy.txt', encoding='utf-8', errors='replace') as f:
    content = f.read()

不指定 encoding 时,open() 使用系统默认编码(Windows 是 GBK),跨平台时容易乱码。始终显式指定 encoding='utf-8' 是好习惯。


4. 用 os.walk 递归遍历目录

学生时代要是早知道这个,我的课程作业至少能快一倍。

青铜写法:


import os
def list_files(path):
    for item in os.listdir(path):
        full = os.path.join(path, item)
        if os.path.isdir(full):
            list_files(full)
        else:
            print(full)

王者写法:


import os
for root, dirs, files in os.walk('.'):
    for f in files:
        if f.endswith('.py'):
            print(os.path.join(root, f))
    # 可以修改 dirs 来跳过目录
    dirs[:] = [d for d in dirs if not d.startswith('.')]

os.walk 自动递归遍历目录树,返回 (目录路径, 子目录列表, 文件列表) 三元组。修改 dirs[:] 可以动态控制遍历范围,如跳过隐藏目录。


5. 用 hashlib 计算文件哈希

我见过太多人在这个地方绕弯路了。不是你笨,是没人告诉你有捷径。

一般写法:


import hashlib
with open('large_file.bin', 'rb') as f:
    content = f.read()  # 大文件会撑爆内存
    md5 = hashlib.md5(content).hexdigest()

高阶写法:


import hashlib
def file_hash(path, algo='sha256', chunk_size=8192):
    h = hashlib.new(algo)
    with open(path, 'rb') as f:
        while chunk := f.read(chunk_size):
            h.update(chunk)
    return h.hexdigest()

print(file_hash('large_file.bin'))

分块读取文件并逐块更新哈希,内存占用恒定,可以处理任意大小的文件。用了海象运算符 := 简化了循环读取的写法。


以上就是今天的 5 个技巧。不管你是刚入门还是想提效,总有一个能帮上忙。

觉得有用就转给你身边正在学 Python 的朋友。

下期预告:函数技巧专场


关于作者

写了 10 年 Python,赶上了机器学习的热潮,又撞上了大模型的浪头,每次以为学明白了,行业又变了一次。不是什么大神,就是一个在互联网里摸爬滚打、把坑踩了个遍的老工人。还在写代码,还在折腾,还在想明白这个时代到底发生了什么。把自己踩过的坑、走过的弯路、看过的热闹,说给还在路上的人听。

关注「鲁叶的Python」,一起穿越迷茫期。

最新文章

随机文章