zoukankan      html  css  js  c++  java
  • 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)
    #结果是:['一生所爱
    ', '演唱:卢冠庭
    ', '从前现在过去了再不来
    ', 
         '红红落叶长埋尘土内
    ', '开始终结总是没变改
    ', '天边的你飘泊白云外
    ', 
         '苦海翻起爱恨
    ', '在世间难逃避命运
    ', '相亲竟不可接近
    ', '或我应该相信是缘份']

    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)
  • 相关阅读:
    卡牌配对
    SNOI2017 礼物
    【BZOJ2893】征服王
    景中人
    钦点
    杨柳
    兼容IE与firefox、chrome的css 线性渐变(linear-gradient)
    使用C# DES解密java DES加密的字符串
    jQuery插件autoComplete使用
    hadoop SQL使用
  • 原文地址:https://www.cnblogs.com/fu-yong/p/8111007.html
Copyright © 2011-2022 走看看