专栏首页抠抠空间IO(文件)处理

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('这段话会覆盖之前的文章')

△光标的移动

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)

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Linux 后台服务

    ---- 概述 研发人员交付测试和上线产品时,需要对服务和产品以后台进程的方式启动。所以便利的后台进程工具可以很好的帮助你管理你的进程。确切的说:成为系统的守护...

    BrianLv
  • Linux 系统优化

    概述 在Linux 学习笔记一大体介绍了一些简单的Linux知识和一些简单的优化。下面我们来学习一下Linux和Linux一些安全知识(Linux是基于内核为...

    BrianLv
  • Linux lsof 命令的实用案例

    lsof 简介 lsof(list open files)是一个列出当前系统中所有打开文件的工具 Linux中一切皆文件,所以在系统中,被打开的文件可以是普...

    dys
  • Linux DNS解析和网络

    ---- 概述 由于最近在学习web服务基础,以前一直没有细细的了解用户在访问网站到底是怎么一个流程?这边博客主要介绍了DNS解析 DNS知识 DNS(域名解析...

    BrianLv
  • Linux nohup 用法

    ---- 最近在写一个监控服务程序,通过交叉监控来监控我们的线上服务。比如我有两台服务器分别为A和B,在A上部署监控程序来监控服务器B,在B上部署监控程序来部署...

    BrianLv
  • Linux 基础知识

    ---- 简要 作为了一个服务端开发人员而言,不仅有强大的内功而且也需要对一些工具和运维方面的知识。Linux毋容置疑是每一个后端开发人员必须熟悉或者精通的“大...

    BrianLv
  • Linux DNS之nslookup命令

    ---- 概述 在我文章中有一篇专门讲解DNS如何工作的,今天我们采用linux下nslookup工具来查询DNS。nslookup全称是”query Inte...

    BrianLv
  • Linux DNS之dig利器

    ---- 概述 在之前介绍过Linux DNS之nslookup工具,今天我学习了一个比nslookup更强大的工具,并且现在非常流行——Dig,它是一个专业D...

    BrianLv
  • Docker系列教程14-Docker数据持久化

    容器中数据持久化主要有两种方式: 数据卷(Data Volumes) 数据卷容器(Data Volumes Dontainers) 数据卷 数据卷是一个可供一个...

    用户1516716
  • Linux网络工具之Ping命令

    ---- Ping用法 之前一直在用Ping,再仔细深入之后才发现自己只是了解皮毛。下面我把一些Ping的常用用法都记录下来,对于我来说今天又学了一个”神技”,...

    BrianLv

扫码关注云+社区

领取腾讯云代金券