一、文件处理简介

计算机系统分为:计算机硬件,操作系统,应用程序三部分。

我们用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( )

读取整个文件

 with open('love.txt','r',encoding='utf-8') as f:
msg = f.read()
print(msg)

read( int )

read()方法可以指定读取的字符数,注意,是字符数,不是字节数,如下:

 with open('love.txt','r',encoding='utf-8') as f:
msg = f.read()
print(msg)
#结果为‘一生所’

readline( )

可以读取一行,如下:

 with open('love.txt','r',encoding='utf-8') as f:
msg = f.readline()
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 是一个可迭代对象

 with open('love.txt','r',encoding='utf-8') as f:
for line in f:
print(line,end='')
#结果是:
# 一生所爱
# 演唱:卢冠庭
# 从前现在过去了再不来
# 红红落叶长埋尘土内
# 开始终结总是没变改
# 天边的你飘泊白云外
# 苦海翻起爱恨
# 在世间难逃避命运
# 相亲竟不可接近
# 或我应该相信是缘份

△写文件:

write( str )

可以指定写入模式,如果文件不存在,重新创建一个,如果已经存在,w模式下会将之前的文字覆盖,重新写入,a模式是在结尾处追加。

 with open('love.txt','w',encoding='utf-8') as f:
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代表从文件末尾算起。

 with open('love.txt','r',encoding='utf-8') as f:
print(f.read(3)) #读取3个字符 : 一生所
f.seek(3) #光标从起点向后移3个字节(1个中文)
print(f.read(3)) #再从前面的基础上开始读:生所爱

tell( )

可以获取当前光标位置,返回的是字节数

△截取文件

 truncate()

此方法是截取文件,注意,是直接对原文件进行截取。参数是填一个字节数,如下:

 with open('love.txt','r+',encoding='utf-8') as f:
f.truncate(9)    #截取9个字节,就是3个中文
print(f.read())   #再读取的内容结果为:一生所 3个字

五:应用练习(注册,登录小系统)

 #用户注册,将用户名以及密码存在文件里,然后验证登录信息,给3次机会
print('*************注册信息*************')
while 1:
username = input('请输入您的用户名:').strip()
password = ''
password1 = input('请输入您的注册密码:').strip()
password2 = input('请再次输入您的注册密码:').strip()
if password1 == password2:
print('恭喜您,注册成功!')
password = password1
break
else:
print('您两次输入的密码不同,请重新输入!')
with open('day8.txt','w',encoding='utf-8') as f1: # f1.write('{%s:%s}'%(username,password))
f1.write('%s:%s'%(username,password)) print('*************登录信息*************') count = 3
with open('day8.txt','r',encoding='utf-8') as f2:
user_list = f2.read().split(':') # print(user_list)
while count > 0 :
username = input('请输入您的用户名:').strip()
password = input('请输入您的密码:').strip()
if username == user_list[0] and password == user_list[1]:
print('恭喜您,登陆成功!')
break
else:
count -= 1
print('登录失败,请重新输入!您还有%s次机会'%count)

Python笔记·第七章—— IO(文件)处理的更多相关文章

  1. Android群英传笔记——第七章:Android动画机制和使用技巧

    Android群英传笔记--第七章:Android动画机制和使用技巧 想来,最 近忙的不可开交,都把看书给冷落了,还有好几本没有看完呢,速度得加快了 今天看了第七章,Android动画效果一直是人家中 ...

  2. JVM学习笔记-第七章-虚拟机类加载机制

    JVM学习笔记-第七章-虚拟机类加载机制 7.1 概述 Java虚拟机描述类的数据从Class文件加载到内存,并对数据进行校验.转换解析和初始化,最终形成可以被虚拟机直接使用的Java类型,这个过程被 ...

  3. [Python学习笔记][第七章Python文件操作]

    2016/1/30学习内容 第七章 Python文件操作 文本文件 文本文件存储的是常规字符串,通常每行以换行符'\n'结尾. 二进制文件 二进制文件把对象内容以字节串(bytes)进行存储,无法用笔 ...

  4. 进击的Python【第七章】:Python的高级应用(四)面向对象编程进阶

    Python的高级应用(三)面向对象编程进阶 本章学习要点: 面向对象高级语法部分 静态方法.类方法.属性方法 类的特殊方法 反射 异常处理 Socket开发基础 一.面向对象高级语法部分 静态方法 ...

  5. o'Reill的SVG精髓(第二版)学习笔记——第七章

    第七章:路径 所有描述轮廓的数据都放在<path>元素的d属性中(d是data的缩写).路径数据包括单个字符的命令,比如M表示moveto,L表示lineto.接着是该命令的坐标信息. 7 ...

  6. 《图解HTTP》阅读笔记--第七章---确保WEB安全的HTTPS

    第七章.确保WEB安全的HTTPSHTTP的缺点:通信使用明文(不加密),内容可能会被窃听 解决---加密处理: //将通信加密 :通过SSL(安全套接层)---HTTPS(超文本传输安全协议)--- ...

  7. 进击的Python【第七章】:python各种类,反射,异常处理和socket基础

    Python的高级应用(三)面向对象编程进阶 本章学习要点: 面向对象高级语法部分 静态方法.类方法.属性方法 类的特殊方法 反射 异常处理 Socket开发基础 一.面向对象高级语法部分 静态方法 ...

  8. Getting Started With Hazelcast 读书笔记(第七章)

    第七章 部署策略 Hazelcast具有适应性,能根据不同的架构和应用进行特定的部署配置,每个应用可以根据具体情况选择最优的配置: 数据与应用紧密结合的模式(重点,of就是这种) 胖客户端模式(最好用 ...

  9. Python笔记(七)

    # -*-coding:utf-8-*- # Python 文件I/O # 打印到屏幕 #print 1234567 # 读取屏幕输入 #input_str=raw_input("Pleas ...

随机推荐

  1. Spring面试题目

    问题清单: 1. 什么是Spring框架?Spring框架有哪些主要模块? 2. 使用Spring框架有什么好处? 3. 什么是控制反转(IOC)?什么是依赖注入? 4. 请解释下Spring中的IO ...

  2. 《Linux命令行与shell脚本编程大全》 第七章理解Linux文件权限

    Linux沿用了Unix文件权限的方法,允许用户和组根据每个文件和目录的安全性设置来访问文件. 用户权限通过创建用户时分配的用户ID(UID)来跟踪的.每个用户有唯一的ID,但是登录时用的不是UID, ...

  3. 【小技巧解决大问题】使用 frp 突破阿里云主机无弹性公网 IP 不能用作 Web 服务器的限制

    背景 今年 8 月份左右,打折价买了一个阿里云主机,比平常便宜了 2000 多块.买了之后,本想作为一个博客网站的,毕竟国内的服务器访问肯定快一些.满心欢喜的下单之后,却发现 http 服务,外网怎么 ...

  4. Eclipse中代码整体左移,右移快捷键

    1.向右:将要移动的代码选中,然后按TAB键2.向左:将要移动的代码选中,然后按SHIFT+TAB键

  5. 用JS实现Ajax请求

    AJAX核心(XMLHttpRequest) 其实AJAX就是在Javascript中多添加了一个对象:XMLHttpRequest对象.所有的异步交互都是使用XMLHttpServlet对象完成的. ...

  6. 装饰模式(Decorator)

    装饰模式(Decorator) 顾名思义,装饰模式就是给一个对象增加一些新的功能,而且是动态的,要求装饰对象和被装饰对象实现同一个接口,装饰对象持有被装饰对象的实例,关系图如下: Source类是被装 ...

  7. CCF-201312-2-ISBN号码

    问题描述 试题编号: 201312-2 试题名称: ISBN号码 时间限制: 1.0s 内存限制: 256.0MB 问题描述: 问题描述 每一本正式出版的图书都有一个ISBN号码与之对应,ISBN码包 ...

  8. centos7.0安装教程

    CentOS(Community Enterprise Operating System,中文意思是:社区企业操作系统)是Linux发行版之一,它是来自于Red Hat Enterprise Linu ...

  9. PHP 八种基本的数据类型小结

    四种标量类型: boolean (布尔型) integer (整型) float (浮点型, 也称作 double) string (字符串) 两种复合类型: array (数组) object (对 ...

  10. React学习笔记--程序调试

    React学习笔记 二 程序调试   前面我们搭建好了React的基本开发环境,可以编写基本的React js程序了.但完成的开发环境肯定包含调试器,怎么调试用React编写的JS程序呢?有浏览器,比 ...