Python文件操作笔记

Python文件操作笔记

📚 目录

  1. 文件操作基础
  2. 文件读取操作
  3. 文件写入操作
  4. 文件夹操作
  5. 路径操作
  6. 文件复制和移动
  7. 实用技巧
  8. 常见错误和注意事项
  9. 练习示例

文件操作基础

1.1 打开文件的基本语法

python 复制代码
# 基本语法
file = open('filename.txt', 'mode')
# 操作文件
file.close()

# 推荐使用with语句(自动关闭文件)
with open('filename.txt', 'mode') as file:
    # 文件操作
    pass

1.2 文件打开模式

模式 说明 示例
'r' 只读模式(默认) open('file.txt', 'r')
'w' 写入模式(覆盖原文件) open('file.txt', 'w')
'a' 追加模式 open('file.txt', 'a')
'x' 独占创建模式 open('file.txt', 'x')
'b' 二进制模式 open('file.txt', 'rb')
't' 文本模式(默认) open('file.txt', 'rt')

1.3 编码设置

python 复制代码
# 指定编码格式(推荐)
with open('file.txt', 'r', encoding='utf-8') as file:
    content = file.read()

# 常见编码格式
# utf-8: 支持中文和特殊字符
# gbk: 中文编码
# ascii: 英文编码

文件读取操作

2.1 读取整个文件

python 复制代码
# 读取整个文件内容
with open('file.txt', 'r', encoding='utf-8') as file:
    content = file.read()
    print(content)

2.2 逐行读取

python 复制代码
# 方法1:使用for循环
with open('file.txt', 'r', encoding='utf-8') as file:
    for line in file:
        print(line.strip())  # strip()去除行末换行符

# 方法2:使用readlines()
with open('file.txt', 'r', encoding='utf-8') as file:
    lines = file.readlines()
    for line in lines:
        print(line.strip())

2.3 读取指定字节数

python 复制代码
# 读取前100个字符
with open('file.txt', 'r', encoding='utf-8') as file:
    content = file.read(100)
    print(content)

2.4 读取JSON文件

python 复制代码
import json

# 读取JSON文件
with open('data.json', 'r', encoding='utf-8') as file:
    data = json.load(file)
    print(data['name'])
    print(data['age'])

文件写入操作

3.1 写入文本

python 复制代码
# 写入文本(会覆盖原文件)
with open('output.txt', 'w', encoding='utf-8') as file:
    file.write('Hello, World!\n')
    file.write('这是第二行\n')
    file.write('这是第三行\n')

3.2 追加内容

python 复制代码
# 追加内容到文件末尾
with open('output.txt', 'a', encoding='utf-8') as file:
    file.write('这是追加的内容\n')
    file.write('追加模式不会覆盖原文件\n')

3.3 写入多行

python 复制代码
# 写入多行内容
lines = ['第一行\n', '第二行\n', '第三行\n']
with open('output.txt', 'w', encoding='utf-8') as file:
    file.writelines(lines)

3.4 写入JSON文件

python 复制代码
import json

data = {
    'name': '张三',
    'age': 25,
    'city': '北京',
    'hobbies': ['读书', '游泳', '编程']
}

with open('data.json', 'w', encoding='utf-8') as file:
    json.dump(data, file, ensure_ascii=False, indent=2)

文件夹操作

4.1 创建文件夹

python 复制代码
import os

# 创建单个文件夹
os.mkdir('new_folder')

# 创建多层文件夹
os.makedirs('parent/child/grandchild', exist_ok=True)
# exist_ok=True: 如果文件夹已存在,不会报错

4.2 删除文件夹

python 复制代码
import os
import shutil

# 删除空文件夹
os.rmdir('empty_folder')

# 删除文件夹及其内容
shutil.rmtree('folder_to_delete')

4.3 列出文件夹内容

python 复制代码
import os

# 列出当前目录内容
print(os.listdir('.'))

# 列出指定目录内容
print(os.listdir('/path/to/directory'))

# 区分文件和文件夹
for item in os.listdir('.'):
    if os.path.isfile(item):
        print(f"文件: {item}")
    elif os.path.isdir(item):
        print(f"文件夹: {item}")

4.4 遍历文件夹

python 复制代码
import os

# 遍历文件夹及其子文件夹
for root, dirs, files in os.walk('.'):
    print(f'当前目录: {root}')
    print(f'子目录: {dirs}')
    print(f'文件: {files}')
    print('-' * 30)

路径操作

5.1 路径拼接

python 复制代码
import os

# 路径拼接(跨平台兼容)
path = os.path.join('folder', 'subfolder', 'file.txt')
print(path)  # Windows: folder\subfolder\file.txt
             # Linux/Mac: folder/subfolder/file.txt

5.2 路径信息获取

python 复制代码
import os

file_path = '/path/to/file.txt'

# 获取文件名
filename = os.path.basename(file_path)
print(filename)  # file.txt

# 获取目录名
dirname = os.path.dirname(file_path)
print(dirname)  # /path/to

# 获取文件扩展名
extension = os.path.splitext(file_path)[1]
print(extension)  # .txt

# 检查文件是否存在
exists = os.path.exists(file_path)
print(exists)  # True/False

5.3 使用pathlib(现代Python推荐)

python 复制代码
from pathlib import Path

# 创建路径对象
file_path = Path('folder/subfolder/file.txt')

# 路径信息
print(f"文件路径: {file_path}")
print(f"文件名: {file_path.name}")
print(f"文件扩展名: {file_path.suffix}")
print(f"父目录: {file_path.parent}")
print(f"是否存在: {file_path.exists()}")
print(f"文件大小: {file_path.stat().st_size} 字节")

# 路径拼接
new_path = Path('folder') / 'subfolder' / 'file.txt'

文件复制和移动

6.1 复制文件

python 复制代码
import shutil

# 复制文件
shutil.copy('source.txt', 'destination.txt')

# 复制文件夹
shutil.copytree('source_folder', 'destination_folder')

6.2 移动文件

python 复制代码
import shutil

# 移动文件或文件夹
shutil.move('old_location.txt', 'new_location.txt')

6.3 重命名文件

python 复制代码
import os

# 重命名文件
os.rename('old_name.txt', 'new_name.txt')

实用技巧

7.1 文件备份

python 复制代码
import shutil
from datetime import datetime

# 创建带时间戳的备份
timestamp = datetime.now().strftime('%Y%m%d_%H%M%S')
backup_name = f'file_backup_{timestamp}.txt'
shutil.copy('original.txt', backup_name)

7.2 批量处理文件

python 复制代码
import os

# 批量重命名文件
folder = 'images'
for filename in os.listdir(folder):
    if filename.endswith('.jpg'):
        new_name = f'photo_{filename}'
        os.rename(os.path.join(folder, filename), 
                 os.path.join(folder, new_name))

7.3 文件监控

python 复制代码
import os
import time

# 监控文件变化
def monitor_file(file_path):
    last_modified = os.path.getmtime(file_path)
    while True:
        current_modified = os.path.getmtime(file_path)
        if current_modified != last_modified:
            print(f"文件 {file_path} 已被修改")
            last_modified = current_modified
        time.sleep(1)

常见错误和注意事项

8.1 常见错误

python 复制代码
# ❌ 错误:忘记关闭文件
file = open('test.txt', 'r')
content = file.read()
# 忘记 file.close()

# ✅ 正确:使用with语句
with open('test.txt', 'r') as file:
    content = file.read()

# ❌ 错误:文件不存在时读取
with open('nonexistent.txt', 'r') as file:
    content = file.read()

# ✅ 正确:检查文件是否存在
if os.path.exists('nonexistent.txt'):
    with open('nonexistent.txt', 'r') as file:
        content = file.read()

8.2 编码问题

python 复制代码
# ❌ 错误:不指定编码可能导致乱码
with open('chinese.txt', 'r') as file:
    content = file.read()

# ✅ 正确:指定编码
with open('chinese.txt', 'r', encoding='utf-8') as file:
    content = file.read()

8.3 权限问题

python 复制代码
# 检查文件权限
import os

if os.access('file.txt', os.R_OK):
    print("文件可读")
if os.access('file.txt', os.W_OK):
    print("文件可写")

练习示例

9.1 简单文件操作练习

python 复制代码
# 练习1:创建学生信息文件
students = [
    {'name': '张三', 'age': 20, 'grade': 85},
    {'name': '李四', 'age': 21, 'grade': 92},
    {'name': '王五', 'age': 19, 'grade': 78}
]

# 写入CSV格式
with open('students.csv', 'w', encoding='utf-8') as file:
    file.write('姓名,年龄,成绩\n')
    for student in students:
        file.write(f"{student['name']},{student['age']},{student['grade']}\n")

# 读取并计算平均分
total_grade = 0
count = 0
with open('students.csv', 'r', encoding='utf-8') as file:
    next(file)  # 跳过标题行
    for line in file:
        name, age, grade = line.strip().split(',')
        total_grade += int(grade)
        count += 1

average_grade = total_grade / count
print(f"平均分: {average_grade}")

9.2 文件夹整理练习

python 复制代码
import os
import shutil

# 练习2:按文件类型整理文件夹
def organize_files(source_dir):
    # 创建分类文件夹
    categories = {
        'images': ['.jpg', '.jpeg', '.png', '.gif'],
        'documents': ['.pdf', '.doc', '.docx', '.txt'],
        'videos': ['.mp4', '.avi', '.mov'],
        'music': ['.mp3', '.wav', '.flac']
    }
    
    for category in categories:
        os.makedirs(os.path.join(source_dir, category), exist_ok=True)
    
    # 移动文件
    for filename in os.listdir(source_dir):
        if os.path.isfile(os.path.join(source_dir, filename)):
            file_ext = os.path.splitext(filename)[1].lower()
            
            for category, extensions in categories.items():
                if file_ext in extensions:
                    src = os.path.join(source_dir, filename)
                    dst = os.path.join(source_dir, category, filename)
                    shutil.move(src, dst)
                    break

# 使用示例
organize_files('downloads')

📝 总结

重要概念回顾

  1. 文件操作三步骤:打开 → 操作 → 关闭
  2. 推荐使用with语句:自动处理文件关闭
  3. 指定编码格式:避免中文乱码问题
  4. 路径操作:使用os.path或pathlib
  5. 错误处理:检查文件是否存在和权限

常用模块

  • os: 操作系统接口,文件和目录操作
  • shutil: 高级文件操作(复制、移动)
  • pathlib: 现代路径操作(Python 3.4+)
  • json: JSON文件读写
  • datetime: 时间相关操作

最佳实践

  1. 总是使用with语句处理文件
  2. 指定正确的编码格式
  3. 检查文件是否存在再操作
  4. 使用pathlib进行路径操作
  5. 适当处理异常情况

🔗 相关资源

声明

该文章为学习过程中的笔记,目的是防止自己忘记,也为了方便随时随地查阅。其中大部分内容收集于互联网。

相关推荐
梦想画家4 小时前
基于PyTorch的时间序列异常检测管道构建指南
人工智能·pytorch·python
PythonFun5 小时前
OCR图片识别翻译工具功能及源码
python·ocr·机器翻译
虫师c5 小时前
Python浪漫弹窗程序:Tkinter实现动态祝福窗口教程
python·tkinter·动画效果·gui编程·弹窗效果
_李小白6 小时前
【OPENGL ES 3.0 学习笔记】延伸阅读:VAO与VBO
笔记·学习·elasticsearch
灯火不休时6 小时前
95%准确率!CNN交通标志识别系统开源
人工智能·python·深度学习·神经网络·cnn·tensorflow
deephub7 小时前
FastMCP 入门:用 Python 快速搭建 MCP 服务器接入 LLM
服务器·人工智能·python·大语言模型·mcp
南宫乘风7 小时前
基于 Flask + APScheduler + MySQL 的自动报表系统设计
python·mysql·flask
摇滚侠7 小时前
Spring Boot3零基础教程,Spring Boot 应用打包成 exe 可执行文件,笔记91 笔记92 笔记93
linux·spring boot·笔记
番石榴AI7 小时前
基于机器学习优化的主图选择方法(酒店,景点,餐厅等APP上的主图展示推荐)
图像处理·人工智能·python·机器学习
开开心心就好7 小时前
电子报纸离线保存:一键下载多报PDF工具
网络·笔记·macos·pdf·word·音视频·phpstorm