IO(文件)处理
时间:2022-05-08
本文章向大家介绍IO(文件)处理,主要内容包括一、文件处理简介、二、打开文件的方法、三、操作文件的几种模式、四、处理文件的几种方法、△写文件:、△光标的移动、△截取文件、五:应用练习(注册,登录小系统)、基本概念、基础应用、原理机制和需要注意的事项等,并结合实例形式分析了其使用技巧,希望通过本文能帮助到大家理解应用这部分内容。
一、文件处理简介
计算机系统分为:计算机硬件,操作系统,应用程序三部分。
我们用python或其他语言编写的应用程序若想要把数据永久保存下来,必须要保存于硬盘中,这就涉及到应用程序要操作硬件,众所周知,应用程序是无法直接操作硬件的,这就用到了操作系统。操作系统把复杂的硬件操作封装成简单的接口给用户/应用程序使用,其中文件就是操作系统提供给应用程序来操作硬盘虚拟概念,用户或应用程序通过操作文件,可以将自己的数据永久保存下来。
有了文件的概念,我们无需再去考虑操作硬盘的细节,只需要关注操作文件的流程:
#1. 打开文件,得到文件句柄并赋值给一个变量
#2. 通过句柄对文件进行操作
#3. 关闭文件
二、打开文件的方法
① f = open('文件名' , '操作模式' , ‘编码格式’) 如:
f = open('test.txt','r',encoding='utf-8')
注意:用这种方法打开文件,用完之后一定要调用f.close()方法将其关闭
②with open('文件名' , '操作模式' , ‘编码格式’) as f 如:
with open('day8.txt','w',encoding='utf-8') as f:
注意:用这种方法打开文件,处理完后会自动关闭文件,但是处理的段落要进行缩进
三、操作文件的几种模式
四、处理文件的几种方法
示例文件如下:
△读文件:
read( )
读取整个文件
1 with open('love.txt','r',encoding='utf-8') as f:
2 msg = f.read()
3 print(msg)
read( int )
read()方法可以指定读取的字符数,注意,是字符数,不是字节数,如下:
1 with open('love.txt','r',encoding='utf-8') as f:
2 msg = f.read()
3 print(msg)
#结果为‘一生所’
readline( )
可以读取一行,如下:
1 with open('love.txt','r',encoding='utf-8') as f:
2 msg = f.readline()
3 print(msg)
#结果是 ‘一生所爱’
readlines( )
可以读取整篇文章,并且将每一行都作为一个元素添加到一个列表中,如下:
with open('love.txt','r',encoding='utf-8') as f:
msg = f.readlines()
print(msg)
#结果是:['一生所爱n', '演唱:卢冠庭n', '从前现在过去了再不来n',
'红红落叶长埋尘土内n', '开始终结总是没变改n', '天边的你飘泊白云外n',
'苦海翻起爱恨n', '在世间难逃避命运n', '相亲竟不可接近n', '或我应该相信是缘份']
for lin in f :
可以用循环的方法直接读取每一行。f 是一个可迭代对象
1 with open('love.txt','r',encoding='utf-8') as f:
2 for line in f:
3 print(line,end='')
4 #结果是:
5 # 一生所爱
6 # 演唱:卢冠庭
7 # 从前现在过去了再不来
8 # 红红落叶长埋尘土内
9 # 开始终结总是没变改
10 # 天边的你飘泊白云外
11 # 苦海翻起爱恨
12 # 在世间难逃避命运
13 # 相亲竟不可接近
14 # 或我应该相信是缘份
△写文件:
write( str )
可以指定写入模式,如果文件不存在,重新创建一个,如果已经存在,w模式下会将之前的文字覆盖,重新写入,a模式是在结尾处追加。
1 with open('love.txt','w',encoding='utf-8') as f:
2 f.write('这段话会覆盖之前的文章')
△光标的移动
seek( )
语法为:fileObject.seek(offset, whence)
- offset -- 开始的偏移量,也就是代表需要移动偏移的字节数,注意,是字节数,负数表示像前移动
- whence:可选,默认值为 0。给offset参数一个定义,表示要从哪个位置开始偏移;0代表从文件开头开始算起,1代表从当前位置开始算起,2代表从文件末尾算起。
1 with open('love.txt','r',encoding='utf-8') as f:
2 print(f.read(3)) #读取3个字符 : 一生所
3 f.seek(3) #光标从起点向后移3个字节(1个中文)
4 print(f.read(3)) #再从前面的基础上开始读:生所爱
tell( )
可以获取当前光标位置,返回的是字节数
△截取文件
truncate()
此方法是截取文件,注意,是直接对原文件进行截取。参数是填一个字节数,如下:
1 with open('love.txt','r+',encoding='utf-8') as f:
2 f.truncate(9) #截取9个字节,就是3个中文
3 print(f.read()) #再读取的内容结果为:一生所 3个字
五:应用练习(注册,登录小系统)
1 #用户注册,将用户名以及密码存在文件里,然后验证登录信息,给3次机会
2 print('*************注册信息*************')
3 while 1:
4 username = input('请输入您的用户名:').strip()
5 password = ''
6 password1 = input('请输入您的注册密码:').strip()
7 password2 = input('请再次输入您的注册密码:').strip()
8 if password1 == password2:
9 print('恭喜您,注册成功!')
10 password = password1
11 break
12 else:
13 print('您两次输入的密码不同,请重新输入!')
14 with open('day8.txt','w',encoding='utf-8') as f1:
15
16 # f1.write('{%s:%s}'%(username,password))
17 f1.write('%s:%s'%(username,password))
18
19 print('*************登录信息*************')
20
21 count = 3
22 with open('day8.txt','r',encoding='utf-8') as f2:
23 user_list = f2.read().split(':')
24
25 # print(user_list)
26 while count > 0 :
27 username = input('请输入您的用户名:').strip()
28 password = input('请输入您的密码:').strip()
29 if username == user_list[0] and password == user_list[1]:
30 print('恭喜您,登陆成功!')
31 break
32 else:
33 count -= 1
34 print('登录失败,请重新输入!您还有%s次机会'%count)
- Android Service组件(1)
- Android学习之listview的下拉刷新、上拉载入
- Android Service 系统服务
- Android学习之sqlite与listview
- Android应用开发SharedPreferences存储数据的使用方法
- android 补间动画
- Android Geocoder(位置解析)
- Android服务之AIDL
- SQL语言学习-数据定义语言
- js获取url参数的方法
- JavaScript操作符(关系操作符、相等操作符和条件操作符)
- javascript运动功能-分享到
- SQL Server 2008 geometry 数据类型
- JavaScript基本类型与引用类型
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- java使用TCP,由客户端向服务端传输图片,(电脑与电脑)或(同一台电脑)
- 使用druid
- UDP实现多人聊天室
- 请求(doFilter)与响应乱码(BaseController+自定义注解@ContentType(““))集中处理
- 反射:Reflect(获取类对象三种方法)
- getParameterMap()返回参数需要对应实体类类型,否则收不到----打卡
- 类对象 与 类的对象
- Lambda什么时候使用+简化匿名内部类
- PreparedStatement连接数据库实现登录验证,避免sql注入问题
- 自己封装数据库工具类
- Git---->Linux常用命令+主干、分支合并,发生冲突+当紧急任务来时,文件暂存+忽略文件不提交
- 使用servlet完成简单的登录功能(servlet与html之间跳转(重定向))
- gitee配置
- idea--->先交给git本地仓库--->再push到远程仓库
- 图书系统优化分页与搜索跳转