Python笔记·第七章—— IO(文件)处理
Posted while True:just do it
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python笔记·第七章—— 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(\'这段话会覆盖之前的文章\')
3 with open(\'love.txt\',\'a\',encoding=\'utf-8\') as f:
4 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)
以上是关于Python笔记·第七章—— IO(文件)处理的主要内容,如果未能解决你的问题,请参考以下文章