文件的处理(day09整理)
目录
昨日回顾
二十八、字符编码
1.什么是字符编码
二进制和字符的映射关系
2.字符编码的发展史
unicode编码(识别所有代码)
因为unicode存储占用空间,所以用utf8来存储
utf8只和unicode对应识别
内存中unicode取,存用utf8存(硬盘),全世界的人写代码都是用utf8
3.gbk和gb2312
二十九、python2和python3的区别
python解释器启动的流程
- python解释器相当于文本编辑器,读入字符 --》 字符编码
- python2默认是ascill码读入字符;python3默认utf8读入字符
- 如果在pycharm中的字符用的是gbk编码写入,如果你想用python正常读入字符,必须得加上
coding:gbk
- 解析字符(有语法和关键字的概念)--》报语法/逻辑错误
- 存储变量,输出(往终端打印)--》字符编码
- python2用两种方式存储变量
u'中文'用unicode存储变量,用unicode存储变量,如果终端默认utf8格式的编码,不会乱码'中文'用coding头指定的编码存储变量,假设coding头指定编码为gbk,如果终端默认utf8格式的编码,会乱码
- python3默认用unicode存储变量,用unicode存储变量,如果终端默认utf8格式的编码,不会乱码
- python2用两种方式存储变量
今日内容
三十、文件处理
什么是文件处理
修改存储的信息
什么是文件
操作系统提供的虚拟概念,存储信息
操作文件的流程
打开文件
f = open(r'D:/test.py', 'w', encoding = 'utf8')修改/读取文件
f.write('文件内容') f.read()保存文件
f.flush()关闭文件
f.close()
三十一、文件的三种打开模式
rt(只读)
f = open(r'D:\上海python12期视频\python12期视频\day 09\test.py', 'rt', encoding='utf8') f.write('slkdjfklj') data = f.read() print(data)了解
print(f.readline()) # 一行一行读取 print(f.readlines()) # 读取所有行放入列表循环读出文本内容
for i in f.read(): # 循环出一个个字符 print(i) for i in f: # 循环出一行行 # 节省内存 print(i) # 文本读一行少一行,每一行末尾默认有一个换行
wt:只写(清空文件后写入,不可读)
f = open(r'D:\上海python12期视频\python12期视频\day 09\test.py', 'wt', encoding='utf8') # encoding指定读文件的编码格式 f.write('abc')了解
f.writelines(['abc', 'edf', 'gbk']) # 自动拼接列表元素,一行写入
at:只写入(追加写入)
f = open(r'D:\上海python12期视频\python12期视频\day 09\test.py', 'at', encoding='utf8') # encoding指定写文件的编码格式 f.write('中')
打开文件的两种方式
t为文本,b为二进制模式,一般不单独使用,与r/a/w联用
- b模式一般用于图片/音频/视频的保存
w和a模式可以自动创建文件
三十二、绝对路径和相对路径
文件的路径
文件在硬盘的地址
绝对路径
从盘符开始
相对路径
执行文件(当前运行的文件)的文件夹下的文件名,执行文件和打开文件属于同一文件夹下
未来写项目尽量使用相对路径,因为会部署到linux系统
三十三、with管理上下文
with提供一个自动关闭文件
with open('test.py','r',encoding = 'utf-8')as f:
data = f.read()
print(data)
关闭文件但是并不会关闭python内存中的文件print(f) # 只涉及python,print(f.read()) # 涉及到操作系统,会报错
三十四、文件的高级应用
1.文件打开的新模式
三种新的模式(可读也可写),尽量不要使用
r+ 可写可读
with open('test.py','r+',encoding = 'utf-8') as fr: fr.write('haoji') # 光标在文件头部,覆盖后面字符w+ 可写可读 (和w没有任何区别)
a+ 可写可读 (默认光标在尾部)
综上:如果你真的有即可读又可写的需求,用两种不同的模式打开两次文件
2.光标的高级应用
8个进制位是1个字节,utf8中三个字节是一个中文字符,一个字节是一个英文单词
- 这三种移动光标以字节为单位
seek
# 规定只有0、1、2三种模式, # 0:文件头开始 # 1:当前光标所在位置开始 # 2:文件末尾 fr.seek(3,0) # 开头 fr.seek(3,1) # 当前光标 fr.seek(3,2) # 末尾tell:得出当前位置
with open('test.py', 'rb') as fr: fr.seek(3, 0) print(fr.tell())truncate:截断
with open('test.py', 'ab') as fa: fa.truncate(2)
以字符为单位移动光标
read
with open('test.py', 'r', encoding='utf8') as fr: print(fr.read(3)) # n表示n个字符,不加默认读取所有 # 中文和英文都属于一个字符
登陆注册
# 注册
count = 0
while count < 3:
username_inp = input('请输入你的用户名:')
pwd_inp = input('请输入你的密码:')
re_pwd_inp = input('请在此输入你的密码:')
if not pwd_inp == re_pwd_inp:
print('两次密码输入不一致')
count += 1
continue
with open('user_info.txt', 'a', encoding='utf8') as fa:
fa.write(f'{username_inp}:{pwd_inp}\n') # :表示用户名和密码的分割;|用户和用户之间的分割
fa.flush()
break
# 登录
username_inp = input('请输入你的用户名:')
pwd_inp = input('请输入你的密码:')
with open('user_info.txt', 'r', encoding='utf8') as fr:
for user_info in fr:
username, pwd = user_info.split(':')
if username.strip() == username_inp and pwd.strip() == pwd_inp: # strip可以去掉两端的换行符
print('登录成功')
break
# else:
# continue # continue一般不写在最后一行
else:
print('登录失败')
文件的修改
#文件没有修改一说,只有覆盖
#缓存文件的原理
with open('test.py', 'r', encoding='utf8') as fr, \
open('test_swap.py', 'w', encoding='utf8') as fw:
data = fr.read()
data = data.replace('sb', '傻逼')
fw.write(data)
import os
os.remove('test.py')
os.rename('test_swap.py', 'test.py')
with open('test.py', 'r', encoding='utf8') as fr, \
open('test_swap.py', 'w', encoding='utf8') as fw:
# 再大的文件都能修改
for i in fr:
s = '傻逼'
i = i.replace('sb', s)
fw.write(i)
# fw.flush() # 先保存成功再继续运行
import os
os.remove('test.py')
os.rename('test_swap.py', 'test.py')
import os
print(os.listdir(r'D:\上海python12期视频\python12期视频'))
文件的处理(day09整理)的更多相关文章
- HTML5 本地文件操作之FileSystemAPI整理(二)
一.文件目录操作 1.DirectoryEntry对象 属性: 1.isFile: 操作对象的是否为文件,DirectoryEntry对象固定其值为false 2.isDirectory: 操作对象是 ...
- 【转】PHP实现下载与压缩文件的封装与整理
[转]PHP实现下载与压缩文件的封装与整理 https://mp.weixin.qq.com/s/BUI3QsdNi6Nqu0NhrUL8hQ 一.PHP实现打包zip并下载功能 $file_t ...
- Linux文件操作常用命令整理
收集.整理日常系统管理或维护当中的,常用到的一些关于文件操作的命令或需求,后续会慢慢补充.完善! 查看.生成指定目录的目录树结构? [root@DB-Server ~]#tree #当前目录 ...
- Linux文件编辑命令详细整理
刚接触Linux,前几天申请了个免费体验的阿里云服务器,选择的是Ubuntu系统,配置jdk环境变量的时候需要编辑文件. vi命令编辑文件,百度了一下,很多回答不是很全面,因此编辑文件话了一些时间. ...
- Linux文件编辑命令具体整理
刚接触Linux,前几天申请了个免费体验的阿里云server,选择的是Ubuntu系统.配置jdk环境变量的时候须要编辑文件. vi命令编辑文件,百度了一下,非常多回答不是非常全面,因此编辑文件话了一 ...
- so文件成品评论【整理】
这是我的 @布加迪20 AZ在一篇文章中写道:<汉化so文件的心得>中的技术附件做的简洁性整理.原来的看起来不是非常方便.一起分享学习.. 正文 SO文件汉化心得 --By布加迪20 ...
- HttpWebRequest上传多文件和多参数——整理
1.整理HttpWebRequest上传多文件和多参数.较上一个版本,更具普适性和简易型.注意(服务方web.config中要配置)这样就可以上传大文件了 <system.webServer&g ...
- 【MVC】 文件及URL 的整理
我们平时在做Asp.Net MVC(以下就简称mvc)项目的时候,页面文件结构都用了"/Views/Controllers/page.aspx",而把一些PartialView呢放 ...
- asp.net 文件上传示例整理
ASP.NET依托.net framework类库,封装了大量的功能,使得上传文件非常简单,主要有以下三种基本方法. 方法一:用Web控件FileUpload,上传到网站根目录. 代码如下 复制代码 ...
随机推荐
- [技术栈]CRC校验原理及C#代码实现CRC16、CRC32计算FCS校验码
1.CRC.FCS是什么 CRC,全称Cyclic Redundancy Check,中文名称为循环冗余校验,是一种根据网络数据包或计算机文件等数据产生简短固定位数校验码的一种信道编码技术,主要用来检 ...
- 构建之法——homework4
手机应用——软件腾讯QQ: QQ是腾讯公司开发的一款基于Internet的即时通信软件.最初通过在线广告进行盈利(Banner广告.Email广告等).然后通过免费注册QQ,获取大量用户.开发QQ相关 ...
- 数据结构与算法(C/C++版)【数组】
第五章<数组> 一.概念 根据数组中存储的数据元素之间的逻辑关系,可以将数组分为 : 一维数组.二维数组.….n维数组.n维数组中,维数 n 的判断依据是:根据数组中为确定元素所在位置使用 ...
- Kotlin学习系列(二)
IF表达式 if在kotlin可以当做表达式使用跟java的三元操作符类似: var max = if( a > b ) a else b if分支可以使用代码块,最后一个表达式是返回值: va ...
- json与java对象的转换,以及struts2对json的支持,实现ajax技术
这两天学的东西有点多,今天抽个时间写下来,以此作为激励,这两天学了json,ajax,jQuery 一.使用第三方的工具java转换为json类型 首先就是java类型转换为json对象,首先要导入第 ...
- bugku—Web_Writeup
Bugku_Web_Writeup Writeup略显粗糙~~ 部分Web题没有得到最后的flag~只是有了一个简单的思路~~ Web1: 如上,打开题目答题网址后就会弹出一张图片,看图片就可以发现是 ...
- .Net Core 商城微服务项目系列(十四):分布式部署携程Apollo构建配置中心
一.开场白 在系统设计里我们有很多配置希望独立于系统之外,而又能够被系统实时读取.但是在传统的系统设计里,配置信息通常是耦合在系统内的,比如.net里通常会放在App.config或者web.conf ...
- SpringBoot系列:Spring Boot使用模板引擎FreeMarker
一.Java模板引擎 模板引擎(这里特指用于Web开发的模板引擎)是为了使用户界面与业务数据(内容)分离而产生的,它可以生成特定格式的文档,用于网站的模板引擎就会生成一个标准的HTML文档. 在jav ...
- 50个实用的jq代码段整理
个人博客: http://mcchen.club 1. 如何创建嵌套的过滤器: //允许你减少集合中的匹配元素的过滤器, //只剩下那些与给定的选择器匹配的部分.在这种情况下, //查 ...
- js中的toString和valueOf
数据的转换 基本上,所有JS数据类型都拥有valueOf和toString这两个方法,null除外.它们俩解决javascript值运算与显示的问题 所有对象继承了两个转换方法: 第一个是toStri ...