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)

原文地址:https://www.cnblogs.com/fu-yong/p/8111007.html

时间: 2024-11-13 09:16:27

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

鸟哥的Linux私房菜_基础版_学习笔记3:第七章 Linux文件与目录管理

第七章 Linux文件与目录管理 7.1目录与路径: 7.1.1相对路径与绝对路径: 绝对路径:路径的写法『一定由根目录 / 写起』,例如: /usr/share/doc 这个目录. 相对路径:路径的写法『不是由 / 写起』,例如由 /usr/share/doc 要到 /usr/share/man 底下时,可以写成:『cd ../man』这就是相对路径的写法啦!相对路径意指『相对於目前工作目录的路径!』 7.1.2目录的相关操作: . 代表此层目录 .. 代表上一层目录 - 代表前一个工作目录

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

Android群英传笔记--第七章:Android动画机制和使用技巧 想来,最近忙的不可开交,都把看书给冷落了,还有好几本没有看完呢,速度得加快了 今天看了第七章,Android动画效果一直是人家中十分重要的一部分,从早期的Android版本中,由于动画机制和绘图机制的不健全,Android的人机交互备受诟病,Android从4.X开始,特别是5.X,动画越来越完善了,Google也开始重视这一方面了,我们本章学习的主要内容有 Android视图动画' Android属性动画 Android动画

《Linux Shell脚本攻略》 笔记 第三章:文件操作

<Linux Shell脚本攻略> 笔记 第三章:文件操作 1.生产任意大小的文件 [[email protected] dd_test]# [[email protected] dd_test]# dd if=/dev/zero of=junk.data bs=1k count=10 10+0 records in 10+0 records out 10240 bytes (10 kB) copied, 0.00137023 s, 7.5 MB/s 2.文件系统相关测试 [ -f $file

一个新手的Python自学之旅 #MacBook #《“笨办法”学Python》#第七章:字符串、文本、各种打印、转义序列、手动输入raw_input()

第七章预告:字符串.文本.各种打印.转义序列.手动输入raw_input() ------------------------------------<习题6:字符串和文本>--------------------------------------- 在这里还时有必要详细介绍一下字符串以及和格式化字符之间的应用: 字符串:通常是指需要展示给别人的或者是想要从程序里“导出”的一小段字符,吧啦吧啦吧啦吧啦,是不是觉得挺拗口的,不如举个例子来的实在. 在ex1.py的这段代码print "

《深入理解计算机系统》读书笔记 第七章 链接

第七章链接 链接(linking)是将各种代码和数据部分收集起来并组合成为一个单一文件的过程,这个文件可被加载(或被拷贝)到存储并执行. 链接的时机 编译时,也就是在源代码被翻译成机器代码时 加载时,也就是在程序被加载器加载到存储器并执行时. 运行时,由应用程序执行. 在现代系统中,链接是由链接器自动执行的. 链接器的关键角色:使分离编译称为可能. 7.1 编译器驱动程序 驱动程序的工作:1.运行C预处理器,将C源程序(.c)翻译成一个ASCⅡ码中间文件(.i):2.运行C编译器,将.i文件翻译

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

Python的高级应用(三)面向对象编程进阶 本章学习要点: 面向对象高级语法部分 静态方法.类方法.属性方法 类的特殊方法 反射 异常处理 Socket开发基础 一.面向对象高级语法部分 静态方法 要在类中使用静态方法,需在类成员函数前面加上@staticmethod标记符,以表示下面的成员函数是静态函数.使用静态方法的好处是,不需要定义实例即可使用这个方法.另外,多个实例共享此静态方法. 类方法 类方法与普通的成员函数和静态函数有不同之处,在接触的语言中好像也没见过这种语义,看它的定义: 

《深入理解计算机系统》读书笔记第七章——链接

<深入理解计算机系统>第七章 链接是将各种代码和数据部分收集起来并组合成为一个单一文件的过程,这个文件可被加载(或拷贝)到存储器并执行. 链接的时机 编译时,也就是在源代码被翻译成机器代码时 加载时,也就是在程序被加载器加载到存储器并执行时. 运行时,由应用程序执行. 在现代系统中,链接是由链接器自动执行的. 7.1 编译器驱动程序 编译系统提供编译驱动程序——调用语言预处理器.编译器.汇编器和链接器. (1)运行C预处理器:源程序main.c->ASCII码中间文件main.i (2)

In-memory Computing with SAP HANA读书笔记 - 第七章:Business continuity and resiliency for SAP HANA

本文为In-memory Computing with SAP HANA on Lenovo X6 Systems第七章Business continuity and resiliency for SAP HANA的读书笔记. Overview of business continuity options 业务连续性有不同的级别,采用何种级别取决于需求 Developing a business continuity plan highly depends on the type of busi

《从0到1》笔记 第七章 向钱看

第七章 向钱看----风险投资中的幂次法则,在公司的经营也同样有效 风险投资家的任务是鉴定那些刚起步的前景光明的公司,投资这些公司并从中获利.风投中一种错误的投资组合是:期待所投的企业的回报呈正太分布.也就是说,没有希望的公司会倒闭,这样的企业不多:中等公司会一直持平,这样的企业最多:好的公司的回报会达到两倍甚至四倍,但这们的企业也不多,却弥补了倒闭企业的亏损. 但是这种“撒网式投资,然后祈祷”是会全盘皆输的.这是因为风险投资的回报并不遵行正态分布,是是遵循幂次法则:一小部分公司的回报完胜其他所