当前位置:首页>python>Python 文件处理不求人,这 5 个技巧覆盖 90% 场景

Python 文件处理不求人,这 5 个技巧覆盖 90% 场景

  • 2026-10-11 07:49:02
Python 文件处理不求人,这 5 个技巧覆盖 90% 场景

每次看到有人用最原始的方式读写文件,我就想把这篇文章甩过去。这 5 个文件操作技巧,学会了能省不少事。


1. 用 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 d != '__pycache__']

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


2. 用 csv 模块处理 CSV 文件

自己 split 逗号?遇到引号里的逗号就崩了:


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. 用 glob 批量匹配文件

别再写循环 + endswith 了:


import os
py_files = []
for f in os.listdir('.'):
    if f.endswith('.py'):
        py_files.append(f)

一行通配符搞定:


from pathlib import Path
py_files = list(Path('.').glob('*.py'))
print(py_files)
# 递归查找所有子目录
all_py = list(Path('.').rglob('*.py'))

glob 支持通配符匹配文件,rglob 递归搜索子目录。比 os.listdir + 手动过滤更简洁,支持 **, *, ? 等模式。


4. 用 configparser 读写 INI 配置

手撸配置解析器,费力不讨好:


# 手动解析配置文件
config = {}
with open('config.ini') as f:
    for line in f:
        if '=' in line:
            key, val = line.strip().split('=')
            config[key.strip()] = val.strip()

专为 INI 而生的模块不香吗:


import configparser
config = configparser.ConfigParser()
config.read('config.ini')
# 读取
host = config.get('database', 'host', fallback='localhost')
port = config.getint('database', 'port', fallback=3306)
print(f'{host}:{port}')

configparser 正确处理 INI 格式的 section、注释、多行值等,getint/getfloat/getboolean 自动类型转换,fallback 提供默认值。


5. 用 Path.stat() 获取文件信息

东一个 getsize,西一个 getmtime:


import os
size = os.path.getsize('file.txt')
mtime = os.path.getmtime('file.txt')
import time
print(time.ctime(mtime))

一次 stat,全部拿走:

from pathlib import Path
from datetime import datetime

p = Path('file.txt')
stat = p.stat()
print(f'Size: {stat.st_size} bytes')
print(f'Modified: {datetime.fromtimestamp(stat.st_mtime)}')
print(f'Exists: {p.exists()}')
print(f'Is file: {p.is_file()}')

Path.stat() 返回文件的所有元数据(大小、修改时间、权限等),配合 datetime 格式化时间戳。Path 的 exists/is_file/is_dir 等方法也很实用。


速查表

场景别这样写试试这样
递归遍历目录os.listdir + 手动递归os.walk 自动遍历
处理 CSV 文件line.strip().split(',')csv.DictReader
批量匹配文件os.listdir + endswithPath.glob('*.py')
读写 INI 配置手动 split 解析configparser
获取文件信息os.path.getsize + getmtimePath.stat()

以上就是文件操作的 5 个实用技巧,每个都是我在实际项目中踩过坑才总结出来的。挑一个今天就用上,慢慢积累,你的代码质量会肉眼可见地提升。

评论区聊聊:这 5 个技巧里哪个你之前不知道?

下期预告:函数技巧专场


关于作者

写了 10 年 Python,赶上了机器学习的热潮,又撞上了大模型的浪头,每次以为学明白了,行业又变了一次。把自己踩过的坑、走过的弯路、看过的热闹,说给还在路上的人听。

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

最新文章

随机文章