一、文件处理简介

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

我们用python或其他语言编写的应用程序若想要把数据永久保存下来,必须要保存于硬盘中,这就涉及到应用程序要操作硬件,众所周知,应用程序是无法直接操作硬件的,这就用到了操作系统。操作系统把复杂的硬件操作封装成简单的接口给用户/应用程序使用,其中文件就是操作系统提供给应用程序来操作硬盘虚拟概念,用户或应用程序通过操作文件,可以将自己的数据永久保存下来。

有了文件的概念,我们无需再去考虑操作硬盘的细节,只需要关注操作文件的流程:

  1. #1. 打开文件,得到文件句柄并赋值给一个变量
  2. #2. 通过句柄对文件进行操作
  3. #3. 关闭文件

二、打开文件的方法

① f = open('文件名' , '操作模式' , ‘编码格式’)  如:

  1. f = open('test.txt','r',encoding='utf-8')

注意:用这种方法打开文件,用完之后一定要调用f.close()方法将其关闭

②with open('文件名' , '操作模式' , ‘编码格式’)  as f 如:

  1. 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( )

可以读取整篇文章,并且将每一行都作为一个元素添加到一个列表中,如下:

  1. with open('love.txt','r',encoding='utf-8') as f:
  2. msg = f.readlines()
  3. print(msg)
  4. #结果是:['一生所爱\n', '演唱:卢冠庭\n', '从前现在过去了再不来\n',
  5. '红红落叶长埋尘土内\n', '开始终结总是没变改\n', '天边的你飘泊白云外\n',
  6. '苦海翻起爱恨\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('这段话会覆盖之前的文章')
  1. 3 with open('love.txt','a',encoding='utf-8') as f:
    4 f.write('这段话不会覆盖之前的文章')

△光标的移动

seek( )

  1. 语法为: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(文件)处理的更多相关文章

  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. 小程序 wx.getRecorderManager 录音 to 语音识别

    微信扫小程序码看调用效果(自然语言理解小助手) 欢迎转载,请保留原文链接:http://www.happycxz.com/m/?p=125 这次主要是把我的api更新了一下,支持微信小程序新的录音接口 ...

  2. SSM框架搭建(Spring+SpringMVC+MyBatis)与easyui集成并实现增删改查实现

    一.用myEclipse初始化Web项目 新建一个web project: 二.创建包 controller        //控制类 service //服务接口 service.impl //服务 ...

  3. Leetcode刷题

    Leetcode题库       本博客用于记录在LeetCode网站上一些题的解答方法.具体实现方法纯属个人的一些解答,这些解答可能不是好的解答方法,记录在此,督促自己多学习多练习.     The ...

  4. 网页如何展示PPT文档

    最近再做一个新项目,其中有一个难点,就是如何在网页上展示PPT,我网上找到了几种方法,但是真正符合我目前这个项目的就只有这一种方法了,       使用PowerPoint to Flash将ppt文 ...

  5. Robotium 框架学习之Class By

    Class By定义了页面元素的定位和支持哪些页面元素(至少我是这么理解的),使用及其简单:Used in conjunction with the web methods. Examples are ...

  6. Nginx 搭建图片服务器

    Nginx 搭建图片服务器 本章内容通过Nginx 和 FTP 搭建图片服务器.在学习本章内容前,请确保您的Linux 系统已经安装了Nginx和Vsftpd. Nginx 安装:http://www ...

  7. bootstrap 组件之"导航条"

    一个典型的导航条基本代码如下: <nav class="navbar navbar-default"> <div class="container&qu ...

  8. centos7下部署Django(nginx+uwsgi+python3+django)

    系统版本 centos7 python版本 使用官方python3.6.3正式版 django版本 使用本文发布时最新的1.11.7 uwsgi版本 使用本文发布时最新的2.0.15 nginx版本 ...

  9. linux网络、性能相关命令

    netstat -tunpl #查看进程列表 top #查看系统资源统计 服务器速度测试 ping 123.57.92.9 -t 每一个被发送出的IP信息包都有一个TTL域,该域被设置为一个较高的数值 ...

  10. MyEclipse Java基础使用笔记

    一.Java开发平台 JavaSE  标准版 Java应用程序 application  五子棋.计算器.qq JavaEE  企业版  Java企业级应用 JavaME 微型版  小型设备    A ...