python课堂整理18---文件操作(下)
一、b模式,字节方式(二进制的单位),rb wb ab
f = open('test.py', 'rb', encoding = 'utf-8')

报错,因为用了b模式,就不能再指定编码格式了,已经指定读成二进制。

f = open('test.py', 'rb')
data = f.read()
print(data)

因为test文件内容是以utf-8的格式写入的,一个中文占三个字节
在Windows下,换行符就是 \r\n
#字符串------->转为二进制-------->硬盘
即:‘字符串’------>encode-------->bytes(编码过程)
bytes-------->decode--------->'字符串'(解码过程)
解码:
f = open('test.py', 'rb')
data = f.read()
print(data.decode('utf8'))

编码:两种方法
x = 'hello'
b = bytes(x, encoding = 'utf-8')
x.encode('utf8')
例:
f = open('test', 'wb')
f.write(bytes('一生所爱', encoding = 'utf-8'))

f = open('test22', 'wb')
f.write('我的欢喜'.encode('utf-8'))

注意:r w 其实都是默认成 rt wt ,只能用来打开文本格式,还有图片,视频等格式,所以要用 rb wb ab 这类,转换为二进制,也更适合跨平台。
二、文件操作的其他方法
f = open('a.txt', 'w', encoding = 'utf-8')
print(f.closed) #判断文件是否关闭了
print(f.encoding) #取的是文件打开的编码方式(即open里的)
f.write('你好') #写入文件用的是open里指定的编码方式
f.flush() #刷新,保存内容到硬盘
f.close()


f = open('b.txt', 'r', encoding = 'utf-8')
print(f.tell()) #光标当前所在位置
f.readline()
print(f.tell())


为什么是0和8呢,
seek, tell 等光标移动都是以字节为单位
首先刚打开文件,光标在起始位置,所以为 0
读了一行之后,因为utf- 8下,一个中文=3个字节,回车(\r\n)=2个字节,所以,3+3+2=8
############
f.seek(0)
控制光标到0位置
但要注意,中文等于多个字节,比如b.txt中,“你”=3个字节,不能把光标移到2,然后read,会报错,不能拆分中文字节
read(1): 读一个字符
print(f.read(1))
文件的截取
f = open('b.txt', 'r+', encoding='utf-8')
f.truncate(10)
f.close()
从0位置截取到10位置,按字节数,需要 r+ 或 a+ ,w+不行,会直接覆盖掉,相当于修改了文件,只保留截取的内容
在windows下,换行就是\r\n,但是python自动把\r\n换成了\n,想取消这一自动化操作,用:
f = open('b.txt', 'r', encoding = 'utf8', newline = '')
data = f.readlines()
print(data)
f.close()

三、seek的高级用法
seek后的第二个参数有三种:0, 1, 2
♦ 默认为0,即从起始位置移动光标
with open('b.txt', 'r+', encoding = 'utf-8') as f:
f.seek(3, 0)
print(f.read())
f.seek(0, 0)
f.seek(3)
print(f.read())
♦ 第二个参数为 1 时,表示从相对位置(相当于上次位置),要用文件打开的 b 模式(rb)
with open('b.txt', 'rb') as f:
f.seek(3)
print(f.tell())
f.seek(3, 1)
print(f.tell())

♦ 第二个参数为2 时,表示从文件末尾读(倒着seek),要用文件打开的 b 模式(rb),第一个参数需要用负数
with open('b.txt', 'rb') as f:
f.seek(-10, 2)
data = f.read()
print(data.decode('utf-8'))

练习:用seek读日志文件的最后一行
log.txt
2019年7月3日,刘文豪做了一件好事。
2019年7月4日,sb做了一件sb事。
2019年7月5日,大白做了一件好事。
2019年7月6日,家强做了一件好事。
2019年7月7日,傻叉做了一件坏事。
2019年7月8日,小仙女美美地打扮。
2019年7月9日,金灵在学习。
with open('log.txt', 'rb') as f:
for i in f:
offs = -20 #设置一个偏移量
while True:
f.seek(offs, 2)
data = f.readlines()
if len(data) < 2:
offs = offs * 2
if len(data) >= 2:
break
wan = data[-1]
print('日志最后一行为:',wan.decode('utf-8'))

python课堂整理18---文件操作(下)的更多相关文章
- python课堂整理17---文件操作(上)
1.在同一目录下新建文本文件 “爱了” 2.在该文件下写入内容,同时留意pycharm右下角的编码格式为 utf- 8 3.下面程序中的read函数会索引系统默认的编码格式,winx下是gbk ,所以 ...
- Shell 命令行,写一个自动整理 ~/Downloads/ 文件夹下文件的脚本
Shell 命令行,写一个自动整理 ~/Downloads/ 文件夹下文件的脚本 在 mac 或者 linux 系统中,我们的浏览器或者其他下载软件下载的文件全部都下载再 ~/Downloads/ 文 ...
- Python基础-week03 集合 , 文件操作 和 函数详解
一.集合及其运算 1.集合的概念 集合是一个无序的,不重复的数据组合,它的主要作用如下 *去重,把一个列表变成集合,就自动去重了 *关系测试,测试两组数据之前的交集.并集.差集.子集.父级.对称差集, ...
- 真香!Python十大常用文件操作,轻松办公
日常对于批量处理文件的需求非常多,用Python写脚本可以非常方便地实现,但在这过程中难免会和文件打交道,第一次做会有很多文件的操作无从下手,只能找度娘. 本篇文章整理了10个Python中最常用到的 ...
- python学习笔记-(七)python基础--集合、文件操作&函数
本节内容 1.集合操作 2.文件操作 3.字符编码与转码 4.函数操作 1.集合操作 集合是一个无序的.不重复的数据组合: 1.1 常用操作 它的作用是: 1)自动去重:列表变成集合,自动去重: &g ...
- python 函数初识和文件操作
文件操作 打开文件:文件句柄 = open('文件路径', '模式') 打开文件的模式 w #以写的方式打开 (不可读,不存在则创建,存在则删除内容) a #以追加的模式打开(可读, 不存在则创建 ...
- Python 字符编码及其文件操作
本章节内容导航: 1.字符编码:人识别的语言与机器机器识别的语言转化的媒介. 2.字符与字节:字符占多少个字节,字符串转化 3.文件操作:操作硬盘中的一块区域:读写操作 注:浅拷贝与深拷贝 用法: d ...
- Python之旅Day3 文件操作 函数(递归|匿名|嵌套|高阶)函数式编程 内置方法
知识回顾 常见五大数据类型分类小结:数字.字符串.列表.元组.字典 按存值个数区分:容器类型(列表.字典.元组) 标量原子(数字.字符串) 按是否可变区分:可变(列表.字典) 不可变(数字.字符串.元 ...
- python基础学习笔记——文件操作
文件操作 初始文件操作 使用Python来读写文件是非常简单的操作,我们使用open()函数来打开一个文件,获取到文件句柄,然后通过文件句柄就可以进行各种各样的操作了 根据打开方式的不同能够执行的操作 ...
随机推荐
- WSAAsyncSelect Demo
#include <WinSock2.h> #include <Windows.h> #include <StrSafe.h> #pragma comment(li ...
- 注册表Demo
一.获取安装程序信息 #include <windows.h> #include <iostream> #include <string> #include < ...
- 打开并锁定一个文件(使用LockFile API函数)
var aHandle : THandle; aFileSize : Integer; aFileName : String; procedure TForm1.Button3Click(Sender ...
- 《C++ Primer》读书笔记 第一章
读<C++ Primer>才知道,自己对C++知之甚少... 写个博客记录下自己C++的成长,只是读书笔记,不是对<C++ Primer>知识点的总结,而是对自己在书上看到的以 ...
- HDFS Java API 的基本使用
一. 简介 二.API的使用 2.1 FileSystem 2.2 创建目录 2.3 创建指定权限的目录 2.4 创建文件,并写入内容 ...
- Storm 学习之路(二)—— Storm核心概念详解
一.Storm核心概念 1.1 Topologies(拓扑) 一个完整的Storm流处理程序被称为Storm topology(拓扑).它是一个是由Spouts 和Bolts通过Stream连接起来的 ...
- Jenkins的安装与使用(一)
jenkins是一个广泛用于持续构建的可视化web工具,持续构建说得更直白点,就是各种项目的"自动化"编译.打包.分发部署.jenkins可以很好的支持各种语言(比如:java, ...
- Logback详细整理,基于springboot的日志配置
Logback的配置介绍: 1.Logger.appender及layout Logger作为日志的记录器,把它关联到应用的对应的context上后,主要用于存放日志对象,也可以定义日志类型.级别. ...
- 思维导图xmind的使用方法
什么是Xmind Xmind是一款简单好用的思维导图软件,除了可以轻松绘制基本逻辑图,还支持组织结构图(竖直).树状图(水平+竖直).思维导图(辐射).鱼骨图.二维图(表格)模型.免费版可以把思维导图 ...
- Web安全深度剖析
Web安全深度剖析 链接:https://pan.baidu.com/s/15NulgWNzQ2JPCdn9q1jE-g 提取码:6y83 Web安全深度剖析>总结了当前流行的高危漏洞的形 ...