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( )
读取整个文件
- 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(文件)处理的更多相关文章
- Android群英传笔记——第七章:Android动画机制和使用技巧
Android群英传笔记--第七章:Android动画机制和使用技巧 想来,最 近忙的不可开交,都把看书给冷落了,还有好几本没有看完呢,速度得加快了 今天看了第七章,Android动画效果一直是人家中 ...
- JVM学习笔记-第七章-虚拟机类加载机制
JVM学习笔记-第七章-虚拟机类加载机制 7.1 概述 Java虚拟机描述类的数据从Class文件加载到内存,并对数据进行校验.转换解析和初始化,最终形成可以被虚拟机直接使用的Java类型,这个过程被 ...
- [Python学习笔记][第七章Python文件操作]
2016/1/30学习内容 第七章 Python文件操作 文本文件 文本文件存储的是常规字符串,通常每行以换行符'\n'结尾. 二进制文件 二进制文件把对象内容以字节串(bytes)进行存储,无法用笔 ...
- 进击的Python【第七章】:Python的高级应用(四)面向对象编程进阶
Python的高级应用(三)面向对象编程进阶 本章学习要点: 面向对象高级语法部分 静态方法.类方法.属性方法 类的特殊方法 反射 异常处理 Socket开发基础 一.面向对象高级语法部分 静态方法 ...
- o'Reill的SVG精髓(第二版)学习笔记——第七章
第七章:路径 所有描述轮廓的数据都放在<path>元素的d属性中(d是data的缩写).路径数据包括单个字符的命令,比如M表示moveto,L表示lineto.接着是该命令的坐标信息. 7 ...
- 《图解HTTP》阅读笔记--第七章---确保WEB安全的HTTPS
第七章.确保WEB安全的HTTPSHTTP的缺点:通信使用明文(不加密),内容可能会被窃听 解决---加密处理: //将通信加密 :通过SSL(安全套接层)---HTTPS(超文本传输安全协议)--- ...
- 进击的Python【第七章】:python各种类,反射,异常处理和socket基础
Python的高级应用(三)面向对象编程进阶 本章学习要点: 面向对象高级语法部分 静态方法.类方法.属性方法 类的特殊方法 反射 异常处理 Socket开发基础 一.面向对象高级语法部分 静态方法 ...
- Getting Started With Hazelcast 读书笔记(第七章)
第七章 部署策略 Hazelcast具有适应性,能根据不同的架构和应用进行特定的部署配置,每个应用可以根据具体情况选择最优的配置: 数据与应用紧密结合的模式(重点,of就是这种) 胖客户端模式(最好用 ...
- Python笔记(七)
# -*-coding:utf-8-*- # Python 文件I/O # 打印到屏幕 #print 1234567 # 读取屏幕输入 #input_str=raw_input("Pleas ...
随机推荐
- 小程序 wx.getRecorderManager 录音 to 语音识别
微信扫小程序码看调用效果(自然语言理解小助手) 欢迎转载,请保留原文链接:http://www.happycxz.com/m/?p=125 这次主要是把我的api更新了一下,支持微信小程序新的录音接口 ...
- SSM框架搭建(Spring+SpringMVC+MyBatis)与easyui集成并实现增删改查实现
一.用myEclipse初始化Web项目 新建一个web project: 二.创建包 controller //控制类 service //服务接口 service.impl //服务 ...
- Leetcode刷题
Leetcode题库 本博客用于记录在LeetCode网站上一些题的解答方法.具体实现方法纯属个人的一些解答,这些解答可能不是好的解答方法,记录在此,督促自己多学习多练习. The ...
- 网页如何展示PPT文档
最近再做一个新项目,其中有一个难点,就是如何在网页上展示PPT,我网上找到了几种方法,但是真正符合我目前这个项目的就只有这一种方法了, 使用PowerPoint to Flash将ppt文 ...
- Robotium 框架学习之Class By
Class By定义了页面元素的定位和支持哪些页面元素(至少我是这么理解的),使用及其简单:Used in conjunction with the web methods. Examples are ...
- Nginx 搭建图片服务器
Nginx 搭建图片服务器 本章内容通过Nginx 和 FTP 搭建图片服务器.在学习本章内容前,请确保您的Linux 系统已经安装了Nginx和Vsftpd. Nginx 安装:http://www ...
- bootstrap 组件之"导航条"
一个典型的导航条基本代码如下: <nav class="navbar navbar-default"> <div class="container&qu ...
- centos7下部署Django(nginx+uwsgi+python3+django)
系统版本 centos7 python版本 使用官方python3.6.3正式版 django版本 使用本文发布时最新的1.11.7 uwsgi版本 使用本文发布时最新的2.0.15 nginx版本 ...
- linux网络、性能相关命令
netstat -tunpl #查看进程列表 top #查看系统资源统计 服务器速度测试 ping 123.57.92.9 -t 每一个被发送出的IP信息包都有一个TTL域,该域被设置为一个较高的数值 ...
- MyEclipse Java基础使用笔记
一.Java开发平台 JavaSE 标准版 Java应用程序 application 五子棋.计算器.qq JavaEE 企业版 Java企业级应用 JavaME 微型版 小型设备 A ...