Python站
  • 说明
  • 源码分析
  • 100 系列
  • python
    • 开发基础
      • 数据类型
      • 字符编码
      • 文本操作
      • 玩转Python100解
    • 函数编程
      • 装饰器
      • 内置函数
        • vars
      • 内置模块
        • enum
        • os
        • argparse
        • importlib
        • shelve
        • collections
        • re
      • 神奇三方
        • setuptools
        • celery
    • 面向对象
      • 面向对象100解(草稿)
    • 网络编程
      • 网络理论知识
      • 网络编程socket
      • socketserver源码泛读
    • 并发编程
      • 并发编程之多进程
        • 子进程基本使用
        • 进程的属性或方法
        • 守护进程
        • 互斥锁
        • 队列
        • 生产者消费者模型
      • 并发编程之多线程
        • 子线程基本使用
        • GIL全局解释器锁
        • 死锁现象与递归锁
        • 信号量事件定时器
        • 线程队列queue
      • 并发编程之进程线程池
      • 并发编程之协程
      • 并发编程之IO模型
        • 阻塞IO
        • 非阻塞IO
        • 多路复用IO
        • 异步IO
        • IO模型比较分析
    • 数据库说
      • mongoengine源码精读
    • 前端开发
    • 后端开发
      • flask源码精读
      • django源码精读
        • 01 软件打包与部署
        • 02 python调试工具 pdb
        • 03 创建一个django项目
    • 爬虫相关
      • Jupyter Notebook
      • urllib
      • urllib3源码泛读
      • 数据解析
      • requests源码精读
        • 初始化说 __init__.py
        • 版本信息 __version__.py
        • 版本兼容 compat.py
        • 经典视图 api.py
        • 逻辑实现 sessions.py
        • 数据存储 models.py
        • 网络传输 adapters.py
        • 异常结构 exceptions.py
        • 交互协定 status_code.py
        • 钩子编程 hooks.py
        • 数据结构 structures.py
        • 辅助输出 utils.py
        • 安全认证 auth&certs.py
    • 编程思想
      • 算法
      • 数据结构
      • 设计模式
        • 简单工厂模式
        • 工厂方法模式
        • 抽象工厂模式
        • 建造者模式
        • 单例模式
        • 适配器模式
        • 桥模式
        • 组合模式
        • 外观模式
        • 代理模式
        • 责任链模式
        • 观察者模式
        • 策略模式
        • 模板方法模式
      • Python技巧100解
      • Effective Python
    • 企业应用
      • DevOps
      • Web服务-Nginx
      • 网站发布
      • 源码管理
        • Git
        • GitHub
        • GitLab
      • Golang
      • Docker
      • Ubuntu
    • 项目实战
    • 就业相关
    • 其他爱好
      • 科技单词100解答
Powered by GitBook
On this page
  • open基本使用
  • open输入参数
  • open对象属性与方法
  1. python
  2. 开发基础

文本操作

Previous字符编码Next玩转Python100解

Last updated 5 years ago

在磁盘上读写文件的功能都是由操作系统提供的,现代操作系统不允许普通的程序操作磁盘。

所以读写文件就是请求操作系统打开一个文件对象(通常称为文件描述符),然后通过操作系统提供的这个接口从这个文件对象中读取数据(读文件),或者把数据写入这个文件对象(写文件)

open基本使用

参考:

open输入参数

mode:指定文件代开方,如mode='r'

    • r:只读,文件不存在会抛出异常

    • w:写入,文件不存在,会自动创建

    • a:附加,文件不存在,会自动创建

  • 在模式后使用“+”表示同时支持输入、输出操作

    • r+:读写模式,默认以读模式打开,不会自动创建文件,文件不存在抛出异常

    • w+:写读模式,默认以写模式打开,会自动创建文件

    • a+:附加模式

  • 在模式后附加“b”表示以二进制方式打开文件,如:rb、wb、ab、rb+、wb+、ab+

    • 二进制文件,如图片,视频等有自己的编码顺序,和文本编码不同,文本就可以展示

    • 二进制模式,就没encoding一说了

encoding:文本内容写时用何种编码,读取时就用该编码,如encoding='utf-8'

errors:遇到错误编码的处理方式,最简单的是截止忽略,如errors='ignore'

open对象属性与方法

# -*- coding: utf-8 -*-
with open('password', mode='r', encoding='utf-8') as f:
    f.read()        # 读取文件所有内容,光标移动到文件末尾
    f.readline()    # 读取一行内容,光标移动到第二行首部
    f.readlines()   # 读取每一行内容,存放于列表中
    
    f.write('1111\n222\n')                 # 针对文本模式的写,需要自己写换行符 
    f.write('1111\n222\n'.encode('utf-8')) # 针对b模式的写,需要自己写换行符 
    f.writelines(['333\n','444\n'])        # 文本模式 
    f.writelines([bytes('333\n',encoding='utf-8'),'444\n'.encode('utf-8')]) # b模式
    
    f.readable() # 文件是否可读
    f.writable() # 文件是否可写
    f.closed     # 文件是否关闭
    f.encoding   # 如果文件打开模式为b,则没有该属性
    f.flush()    # 立刻将文件内容从内存刷到硬盘
    f.name       # 文件名
    
    f.fileno()   # 整型的文件描述符,可用于os模块的read方法等一些底层操作上

read(3)

  • 文件文本模式打开时,代表3个字符

  • 文件r模式打开时,代表3个字节

# -*- coding: utf-8 -*-
with open('password', mode='r', encoding='utf-8') as f:
    print(f.read(3))    # 小明:
with open('password', mode='rb') as f:
    print(f.read(3))    # b'\xe5\xb0\x8f'

其余的文件内光标移动都是以字节为单位,如seek,tell,truncate

with open('password', mode='r', encoding='utf-8') as f:
    f.tell()    # 返回光标当前位置,以字节为单位
    f.seek(offset[, whence])    # offset表示偏移量,负数文件倒数开始
                                # whence: 起始位置,0(默认)文件对象的开头,1当前位置,2文件末尾

如何确定长度或大小

文件的可迭代性

廖雪峰Python文件读写