一、文件处理简介

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

我们用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. elasticsearch地理空间操作简单操作

    创建索引库 PUT http://localhost:9200/geo { "mappings": { "poi": { "properties&qu ...

  2. VS2015如何连接mySQL数据库

    mySQL数据库           如题,今天给大家简单演示一下VS2015如何连接mySQL数据库.       首先呢,大家需要安装vs2015和mySQL这两个软件,我还安装了一个辅助软件SQ ...

  3. [转载] Thrift-client与spring集成

    转载自http://shift-alt-ctrl.iteye.com/blog/1990030?utm_source=tuicool&utm_medium=referral Thrift-cl ...

  4. Python字符编码详解(转)

    http://www.cnblogs.com/huxi/archive/2010/12/05/1897271.html 在没有reload(sys)之前调用sys.setdefaultencoding ...

  5. List实现

    1.元素添加 #include <stdio.h> #include <stdlib.h> struct ListNode{ struct ListNode* next; in ...

  6. 自定义统一api返回json格式(app后台框架搭建三)

    在统一json自定义格式的方式有多种:1,直接重写@reposeBody的实现,2,自定义一个注解,自己去解析对象成为json字符串进行返回 第一种方式,我就不推荐,想弄得的话,可以自己去研究一下源码 ...

  7. 基于Spring开发的一个BIO-RPC框架(对新人很友好)

    PART1:先来整体看下项目的构成 其中bio-rpc-core就是所谓的rpc框架 bio-rpc-example-client即所谓的服务调用方(你的项目中想要调用服务的地方) bio-rpc-e ...

  8. 浅谈快速开发框架的分层(WinForm)

    对于B/S都是MVC好不好 不多说了,反正大家都这么用 这里简单说下C/S 首先常用的几种: 模仿B/S的MVC  也有人称之为 MVP 还有MVVM这种真心觉得够够的了,当然也有其优势所在,这里不讨 ...

  9. sql查询语句报错处理——ERROR: failed to find conversion function from unknown to text

    今天遇到写存储过程遇到的一个小问题,在查询语句中使用到了自定义的数当做列的值,然后想给这一列起一个别名 ,就直接在后面用了 as 别名.执行存储过程,存储过程报错,ERROR: failed to f ...

  10. TCP/IP 协议栈 -- 编写UDP客户端注意细节

    上节我们说到了TCP 客户端编写的主要细节, 本节我们来看一下UDP client的几种情况,测试代码如下: server: #include <stdio.h> #include < ...