python基础语法4 文件处理
1、什么是文件
操作系统提供给你操作硬盘的一个工具
2、为什么要用文件
因为人类和计算机要永久保存数据
3、怎么用文件
相对路径:a.txt # 必须与当前py文件在同一级目录
绝对路径:D:\项目路径\python13期\day07\a.txt
读文件
f=open('a.txt')
print(f.readable()) #判断当前文件是否可读 True
print(f.writable()) #判断当前文件是否可写 False
f.close() #回收操作系统的资源
#\可以实现换行 以下为相对路径 同时读和写操作
with open('a.txt',mode='r')as rf,\
open('a.txt',mode='w')as wf: # with会自动帮你回收操作系统的资源,无需自己操作,关闭
print(rf.readable()) #True
print(rf.writable()) #False #r进行转义 以下为绝对路径
with open(r'D:\oldboy_edu\python_code\day7\a.txt',encoding='utf-8')as f: # 不加encoding = 'utf-8'出现乱码,原因不明
print(f.read()) #读取文件
th.jpg(原素材)
lixiaoran.png(生成图片)
# 默认打开文件的模式:rt read text 和r相同
# rb read bytes
with open('a.txt',mode='rb')as f: # 内容为:今天天气真好
print(f.read())
# b'\xe4\xbb\x8a\xe5\xa4\xa9\xe5\xa4\xa9\xe6\xb0\x94\xe7\x9c\x9f\xe5\xa5\xbd' #读取jpg图片为二进制,再把二进制数据写入png文件,生成新的图片
with open(r'th.jpg',mode='rb')as rf,\
open('lixiaoran.png',mode='wb')as wf:
lixiaoran = rf.read()
print(lixiaoran)
wf.write(lixiaoran)
打开文件的三种模式:
r : 1、只读 2、如果文件不存在,会报错
w:(慎用) 1、只写 2、如果文件不存在,则新建一个文件写入数据 3、如果文件内存在数据,会将数据清空,重新写入
a: 1、追加写 2、如果文件内存在数据,会在已有数据的后面追加数据 3、如果文件不存在,则新建一个文件写入数据
处理文件的模式:
t:文本模式
只能与r\w\a连用
默认情况下,是rt模式
b:bytes模式
只能与r\w\a连用
处理二进制数据
"""
文件处理的内置方法:
读:
f.read() # 读文件;一次性读出所有数据
f.readline() # 一次读一行
f.readlines() # 将数据全部读入内存,以换行符分隔,存入列表
f.readable() # 是否可读
写:
f.write # 写文件
f.writeable # 是否可写
f.writelines() # for + f.write()
for line in f:
pass
r:防止转义
with open(r'dir\b.txt','r',encoding='gbk')as f:
print(f.readable())
print(f.read()) # 读文件;一次性读出所有数据
print(f.readline()) # 执行一次,打印一行内容
print(f.readlines()) #将数据全部读入内存,以换行符分隔,存入列表
print(f.readable())
for i in f: # f为句柄,可迭代对象,会以\n为结束,一行行打印
print(i) with open('b.txt', 'w', encoding='gbk')as f:
f.write("上海校区第一帅-sean") # 写文件
f.writelines(["上午没翻车\n",'我很高兴']) # 将数据全部读入内存,以换行符分隔,存入列表
# writelines 可以写入列表,可迭代对象。类似 for + f.write() with open(r'dir\aaaaa.txt','a',encoding='gbk')as f: #追加写入
print(f.writable())
f.write("\n翻车是不可能的")
注意:在windows系统下,用open函数打开txt文档标注编码,默认为gbk。(下面方法可以显示当前编码方式)
with open(r'b.txt','r',encoding='utf-8')as f:
print(f.encoding) #显示当前编码格式
打开文件模式扩展
r,w,a #纯净模式
r+,w+,a+ # 可读可写 (除了可读·可写之外剩下都是自己的特性)
注:写完必须关了文件,才能读,否则在内存,不再硬盘
with open('abc.txt','r+',encoding='utf8')as f:
f.write('天气正好') #如果没有文件,则报错
print(f.readable())
print(f.writable())
with open('abc.txt','w+',encoding='utf8')as f:
f.write('天气不太好') #没有文件则创建
print(f.read())
print(f.readable())
print(f.writable())
with open('a.txt','a+',encoding='utf8')as f:
f.write('哦哟,天气好')
# print(f.read())
print(f.readable())
print(f.writable())
文件内光标的移动:
"""
f.seek(offset,whence)
offset: 相对偏移度 (光标移动的位数)针对的是字节
whence:指定光标位置从何开始,默认是0
0:从文件开头
1:从当前位置
2:从文件末尾
补充:
utf-8:
中文是3个bytes
英文是1个bytes
gbk:
中文是2个bytes
全角英文2bytes,半角英文是1个bytes
open函数不设置encoding,默认是gbk
与encode一毛钱都没有,encoding只是一个参数
如果rt打开文档,若whence为1,2,必须是(0,1),(0,2)!
rt模式下,除了read里面的参数是针对字符,其他都是针对字节
rb模式下,全部正对字节
"""
with open('a.txt','r',encoding='utf8')as f: #文件内容为'哦哟天气好啦啦啦'
print(f.tell()) #
print(f.read(2)) #哦哟
print(f.tell()) #
f.seek(6,0) #光标从头开始,前进6个bytes,也就是2个中文字符
print(f.tell()) #
print(f.read(1)) #读取光标后第一个字符 '天'
with open('a.txt','r')as f: #不写encoding默认gbk,因为open调用的是window操作系统,默认为gbk
f.seek(4,0)
print(f.read(2).encode('utf-8')) #把内存unicode转为utf-8,2个字符也就是6个直接
b'\xe6\x91\x95\xe6\xbe\xb6'
with open('a.txt','rb')as f:
print(f.read(4).decode('utf-8')) #read 读取的是字节,文件为utf-8模式,以'utf8'格式解码
f.seek(6,1)
print(f.read(3).decode('utf-8'))
f.seek(-3,2)
print(f.tell())
print(f.read(3).decode('utf-8'))
获取文件实时动态脚本
以下为获取文件实时动态脚本,优先打开进行捕获动态
import time
with open('c.txt','r',encoding='utf8')as f:
f.seek(0,2) ## 以文件末尾为参照点,移动0位
while True:
time.sleep(1)
res=f.readline() #一次读一行
if res: # 如果你读出数据了,就执行下面的代码块
print(f'录入记录:{res}')
以下为生成文件动态程序
import time
res = time.strftime('%Y-%m-%d %H:%M:%S')
with open(r'a.txt','a',encoding='utf-8')as f:
for i in range(10):
f.write(f'{res}:马上要学函数了,有点难,怎么办\n')
运行生成文件动态后,获取文件实时动态脚本自动捕获输入命令
修改文件内容:
方法1:
with open('a.txt','r',encoding='utf8')as f:
data=f.read()
print(data)
print(type(data))
with open('a.txt','w',encoding='utf8')as f:
res=data.replace('家乐福','沃尔玛')
f.write(res)
方法2:
import os
with open('b.txt','r',encoding='utf8')as rf,\
open('b_wap.txt','w',encoding='utf8')as wf:
data=rf.read()
res=data.replace('小明','小红')
wf.write(res) os.remove('b.txt')
os.rename('b_wap.txt','b.txt')

方法3:

截段 truncate(6):
with open(……)as f:
f.truncate(6) #截段6个字节
f.flush() # 将内存中数据刷到硬盘
with open(…'r'…)as rf,\
open(…'a'…)as wf:
wf.write('ab')
wf.flush() # 强制刷到硬盘
rf.read() # 不关闭可以直接读
python基础语法4 文件处理的更多相关文章
- Python基础语法之文件操作
1 读文件 1.1 简单读文件 f = open('text', 'r') # f是文件句柄 data = f.read() # read方法可以加整型参数,是几就读几个字符 print(data) ...
- python基础语法、数据结构、字符编码、文件处理 练习题
考试范围 '''1.python入门:编程语言相关概念2.python基础语法:变量.运算符.流程控制3.数据结构:数字.字符串.列表.元组.字典.集合4.字符编码5.文件处理''' 考试内容 1.简 ...
- python之最强王者(2)——python基础语法
背景介绍:由于本人一直做java开发,也是从txt开始写hello,world,使用javac命令编译,一直到使用myeclipse,其中的道理和辛酸都懂(请容许我擦干眼角的泪水),所以对于pytho ...
- Python 基础语法(三)
Python 基础语法(三) --------------------------------------------接 Python 基础语法(二)------------------------- ...
- Python 基础语法(四)
Python 基础语法(四) --------------------------------------------接 Python 基础语法(三)------------------------- ...
- Python 基础语法
Python 基础语法 Python语言与Perl,C和Java等语言有许多相似之处.但是,也存在一些差异. 第一个Python程序 E:\Python>python Python 3.3.5 ...
- python学习第五讲,python基础语法之函数语法,与Import导入模块.
目录 python学习第五讲,python基础语法之函数语法,与Import导入模块. 一丶函数简介 1.函数语法定义 2.函数的调用 3.函数的文档注释 4.函数的参数 5.函数的形参跟实参 6.函 ...
- python基础语法及知识点总结
本文转载于星过无痕的博客http://www.cnblogs.com/linxiangpeng/p/6403991.html 在此表达对原创作者的感激之情,多谢星过无痕的分享!谢谢! Python学习 ...
- 【转】Python基础语法
[转]Python基础语法 学习一门编程语言,通常是学习该语言的以下几个部分的内容: 基础语法:如,变量的声明与调用.基本输出语句.代码块语法.注释等: 数据类型:通常都为 数字.字符串.布尔值.数组 ...
随机推荐
- Appium Grid并发测试
背景 Selenium玩的比较6的同学比较清楚:在Selenium中三大组件中有包含了Selenium Grid,而其作用就是分布式执行测试用例.主要的应用场景在于: 缩短测试执行时间,提高自动化测试 ...
- centos上nginx转发tcp请求
下载最新版nginx > wget http://nginx.org/download/nginx-1.17.1.tar.gz 解压缩 > tar zxvf nginx-1.17.1.ta ...
- [转帖]什么是IOC(控制反转)、DI(依赖注入)
什么是IOC(控制反转).DI(依赖注入) 2018-08-22 21:29:13 Ming339456 阅读数 20642 原文地址(摘要了部分内容):https://blog.csdn.net ...
- C++动态规划实现查找最长公共子序列
问题描述: 给定两个序列X={x1,x2,…,xm}和Y={y1,y2,…,yn},找出X和Y的最长公共子序列.(给定两个序列X和Y,当另一序列Z既是X的子序列又是Y的子序列时,称Z是序列X和Y的公共 ...
- golang微服务框架go-micro 入门笔记2.4 go-micro service解读
本章节阐述go-micro 服务发现原理 go-micro架构 下图来自go-micro官方 阅读本文前你可能需要进行如下知识储备 golang分布式微服务框架go-micro 入门笔记1:搭建go- ...
- Lodash之throttle(节流)与debounce(防抖)总结
全手打原创,转载请标明出处:https://www.cnblogs.com/dreamsqin/p/11305028.html 先重点说一下可能遇到的坑:主要在原本默认参数的设置以及两个方法的选择上, ...
- - XML 解析 总结 DOM SAX PULL MD
目录 目录 XML 解析 总结 DOM SAX PULL MD 几种解析方式简介 要解析的内容 DOM 解析 代码 输出 SAX 解析 代码 输出 JDOM 解析 代码 输出 DOM4J 解析 代码 ...
- vim:spell语法
先说结论,在vim配置文件加入: setlocal spell spelllang=en_us,cjk 1.spell指开启检查模式. 2.spelllang用于指定检查的种类. 3.cjk,指中国, ...
- Vue,Javascript--时间戳的操作
new Date(parseInt(data.substring(6, data.length - 2))).toLocaleDateString(); 我这里的data记得替换成你的数据,在过滤器中 ...
- EXT.NET Combox下拉Grid
<ext:ComboBox ID="cmbCategory" runat="server" TypeAhead="true" Forc ...