今日目录:

一、文件处理

    1.什么是文件
2.为何用文件
3.如何用文件
4.文件操作
5.常用方法
6.文件内指针的移动
7.with的使用

一、文件处理

1. 什么是文件

文件是操作系统为用户/应用程序提供的一种操作硬盘的抽象单位

2. 为何要用文件

用户/应用程序对文件的读写操作会由操作系统转换称具体的硬盘操作
所以用户/应用程序可以通过简单的读/写文件来间接地控制复杂的硬盘的存储操作,实现将内存中的数据用具保存到硬盘中

3. 如何用文件

f = open(...)#打开文件,拿到一个文件对象f,f就相当于

绝对地址: open(r"D:\sh.txt")
相对地址: .\ # 当前目录下 #向操作系统发送请求,要求操作系统打开文件
f = open(r"sh.txt",encoding="utf-8") f.read()
强调:一定要在程序结束前关闭打开的文件

4. 文件操作

4.1 主模式
r:只读模式L(默认)
当文件不存在时,会报错
当文件存在时,文件指针指向文件的开头 w:只写模式
当文件不存在时,新建一个空文档
当文件存在时,清空文件内容,文件指针跑到文件的开头 info = ['egon:123\n','alex:456\n','lxx:lxx123']
f.writelines(info) #将列表里面的数据,一行行的写进去(自动换行) a:追加 写模式
当文件不存在时,新建一个空文档,文件指针跑到文件的末尾
当文件存在时,文件指针跑到文件的末尾 在文件打开不关闭的情况下,连续的写入,下一次写入一定是基于上一次写入指针位置而继续的
f.write()
f.writelines()
4.2 文件操作从模式(必须与r/w/a连用)
t:文本模式(默认的),一定指定encoding参数
优点:操作系统会将硬盘中的二进制数字解码成Unicode然后返回
强调:只针对文本文件有效 b:二进制模式:一定不能指定encoding参数
优点: +:可读可写 r+: 不会创建文件的可读可写
w+:创建清空文件的可读可写
a+:创建不清空文件(追加)的可读可写
rb: 二进制读
wb:创建清空文件的二进制写
ab: 创建不清空文件(追加)的二进制写
rb+ | wb+ | ab+ # ps: x:写模式,创建文件,如果文件以存在,就抛异常
with open('000.txt', 'x', encoding='utf-8') as f:
pass
4.3 案例
# 需求:
# 1.完成文本类型的文件复制:1.txt => 11.txt
r = open('1.txt', 'r', encoding='utf-8')
w = open('11.txt', 'w', encoding='utf-8')
for line in r: # 遍历就是一行一行读 取读文件的流
w.write(line)
w.flush()
w.close()
r.close()

5. 常用方法

#掌握
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.flush() #立刻将文件内容从内存刷新到硬盘
#了解
f.readable() #文件是否可读
f.writable() #文件是否可写

6. 控制文件内指针的移动

6.1 方法
f.seek()  # seek(偏移量, 偏移位置)
f.tell()
f.read(n)
f.truncate()
6.2 案例: 游标操作
# 方法:seek(偏移量, 偏移位置)
# 偏移量:移动的字节数,负数是结合模式1,2往前偏移
# 偏移位置:
# -- 0 - 从文件开始位置开始偏移 | 1 - 从当前游标位置开始偏移 | 2 - 从文件末尾开始偏移
# b'你好1234567890' #游标读
with open('source.txt', 'rb') as f:
d1 = f.read(11)
print(d1)
# print(d1.decode('utf-8')) # 当前游标的位置
print(f.tell()) # 游标操作 - 从末尾位置开始
f.seek(-3, 2)
d2 = f.read()
print(d2.decode('utf-8')) # 890 # 游标操作 - 从当前位置开始
f.seek(-3, 1)
d2 = f.read()
# print(d2.decode('utf-8')) # 34567890 # 游标操作 - 从头开始
f.seek(3, 0)
d2 = f.read()
# print(d2)
print(d2.decode('utf-8')) # 好1234567890 游标写:会覆盖书写
with open('source.txt', 'rb+') as f:
f.seek(11)
# print(f.read())
f.write(b'000')
6.3 百度网盘秒传分析
# 案例
#以图片为例,按照一定规则从文件中摘取一些数据,
#加工后通过与服务器端数据进行对比,如果数据一样则不需要传输,
#直接将服务器内文件地址给用户即可
with open('001.png', 'rb') as f:
data = f.read()
print(len(data)) # 在大文件中,开头| 1/3 | 2/3 | 末尾 各取10个字节拼接成秒传的信息依据
# 形成秒传规则
tagData = b''
with open('001.png', 'rb') as f:
# 通过其他途径(sys模块)来获取文件总大小
data = f.read()
length = len(data)
# 开头
f.seek(0, 0)
d1 = f.read(10)
# 1/3
f.seek(length // 3, 0)
d2 = f.read(10)
# 2/3
f.seek(length // 3 * 2, 0)
d3 = f.read(10)
# 末尾
f.seek(-10, 2)
d4 = f.read(10)
tagData = d1 + d2 + d3 + d4
# 秒传依据
print(tagData) newData = b""
with open('001.png', 'rb') as f:
data = f.read()
length = len(data)
f.seek(0, 0)
newData += f.read(10)
f.seek(length // 3, 0)
newData += f.read(10)
f.seek(length // 3 * 2, 0)
newData += f.read(10)
f.seek(-10, 2)
newData += f.read(10) if newData == tagData:
print('秒传成功')
else:
print('慢慢传去吧')

7. with:将文件的释放交给with管理

7.1 使用方法
with open('1.txt', 'r', encoding='utf-8') as r,\
open('source.txt', 'w', encoding='utf-8') as w:
for line in r:
w.write(line)
w.flush()
# w.close() 系统自动完成
# r.close()
7.2 案例
#完成文本文件的赋值
# 边读边写赋值
with open('source.txt', 'r', encoding='utf-8') as f1:
with open('target.txt', 'a+', encoding='utf-8') as f2:
for line in f1:
f2.write(line)
#完成非文本文件的赋值
# 非文本文件,使用二进制读写,不设置encoding
with open('333.mp4', 'rb') as f1:
with open('666.mp4', 'wb+') as f2:
for line in f1:
f2.write(line)

Python 入门基础7 --文件操作的更多相关文章

  1. Python入门基础学习(文件与异常处理)

    Python基础学习笔记(七) 捕获异常的语法格式: 文件的基本操作: 打开文件 读.写文件 关闭文件 read方法 --读取文件: open函数的第一个参数是要打开的文件名(文件名区分大小写) 如果 ...

  2. python函数基础 与文件操作

    函数的定义 函数是通过赋值传递的,参数通过赋值传递给函数.def语句将创建一个函数对象并将其赋值给一个变量名,def语句的一般格式如下: def function_name(arg1,arg2[,.. ...

  3. python入门三:文件操作

    一.文件操作 1.文件对象:和c一样,要想对一个文件进行操作,需要获取该文件的对象 f = open("xxx") # 打开文件并获取文件对象 f.xxx # 对文件进行某些操作 ...

  4. python入门基础:文件的读写

    文件的读写操作运用广泛,无论是何种语言都会涉及到文件的输入输出. 下面简单的总结一下文件的读写: 1:open()函数 f = open('workfile', 'w') 函数 open()返回文件的 ...

  5. Python 入门基础6 --字符编码、文件操作1

    今日内容: 1.字符编码 2.字符与字节 3.文件操作 一.字符编码 了解: cpu:将数据渲染给用户 内存:临时存放数据,断电消失 硬盘:永久存放数据,断电后不消失 1.1 什么是编码? 人类能够识 ...

  6. python基础篇(文件操作)

    Python基础篇(文件操作) 一.初始文件操作 使用python来读写文件是非常简单的操作. 我们使用open()函数来打开一个文件, 获取到文件句柄. 然后通过文件句柄就可以进行各种各样的操作了. ...

  7. Python入门基础学习 一

    Python入门基础学习 一 Python下载及安装 下载地址:https://www.python.org/,选择最新的版本下载 稍等一会,安装完成. 简单语句 从idle启动Python:IDLE ...

  8. Python入门基础学习 二

    Python入门基础学习 二 猜数字小游戏进阶版 修改建议: 猜错的时候程序可以给出提示,告诉用户猜测的数字偏大还是偏小: 没运行一次程序只能猜测一次,应该提供多次机会给用户猜测: 每次运行程序,答案 ...

  9. python入门学习:3.操作列表

    python入门学习:3.操作列表 关键点:列表 3.1 遍历整个列表3.2 创建数值列表3.3 使用列表3.4 元组 3.1 遍历整个列表   循环这种概念很重要,因为它是计算机自动完成重复工作的常 ...

随机推荐

  1. Beta阶段对团队成员公开感谢

    我感谢付佳对我的帮助,因为Beta阶段她承担了一名组长责任,每次代码编写,安排任务都由她带头来做,并且在代码方面帮助我解决了一些问题.

  2. LINUX内核分析第四周学习总结——扒开系统调用的“三层皮”

    LINUX内核分析第四周学习总结--扒开系统调用的"三层皮" 标签(空格分隔): 20135321余佳源 余佳源 原创作品转载请注明出处 <Linux内核分析>MOOC ...

  3. c# WndProc事件 消息类型

    转载:https://www.cnblogs.com/idben/p/3783997.html WM_NULL = 0x0000; WM_CREATE = 0x0001;应用程序创建一个窗口 WM_D ...

  4. 软件工程课程设计——第一个Spring

    开发会议框架表格: 1.我们团队Reborn针对需求功能进行热烈的讨论会议,从功能的方面分析开发,结合在一起组合为App软件,再另外思考附加的功能性娱乐项目. 2.开发过程中,以表格的形式反思开发过程 ...

  5. ElasticSearch 2 (22) - 语言处理系列之标记规范化

    ElasticSearch 2 (22) - 语言处理系列之标记规范化 摘要 将文本拆解成标记只是工作的一半.为了使这些标记更容易被搜索到,它们需要经过一个规范化的处理过程,以移除相同单词间不重要的差 ...

  6. asp.net简述MVC开发模式

    详情请参考:http://www.runoob.com/aspnet/mvc-intro.html 1.MVC 是三种 ASP.NET 编程模式中的一种.MVC 是一种使用 MVC(Model Vie ...

  7. TCP/IP 之 大明王朝邮差 (转)

    原创: 刘欣 码农翻身 2016-05-12 前言: 本文主要想说一下TCP的知识, 比喻有不恰当之处,敬请包涵. 大明王朝天启四年, 清晨. 天色刚蒙蒙亮,我就赶着装满货物的马车来到了南城门, 这里 ...

  8. jira 插件介绍地址

    1. 官方的 介绍地址 http://confluence.gjingao.com/pages/viewpage.action?pageId=328170 序号 插件名称 功能概要 供应商 资源 10 ...

  9. Degree Set CodeForces - 976D(双指针)

    题意: 构造一个无向图,使得无向图里的所有点的度数 所组成的集合 即为给出的几个数 解析: 题中的数是以上升的顺序给出的, 我们对于dn+1个数进行处理,对于当前数i,有两个操作 1.向后边的所有点连 ...

  10. Reachability from the Capital CodeForces - 999E(强连通分量 缩点 入度为0的点)

    题意: 问至少加几条边 能使点s可以到达所有的点 解析: 无向图的连通分量意义就是  在这个连通分量里 没两个点之间至少有一条可以相互到达的路径 所以 我们符合这种关系的点放在一起, 由s向这些点的任 ...