zoukankan      html  css  js  c++  java
  • day12--文件处理

    python文件处理


    1、什么是文件?

    文件是操作系统提供给用户/应用程序操作硬盘的一种虚拟概念(接口)

    2、为什么要用文件?

    #用户/应用程序可以通过文件将数据永久保存到硬盘中,即操作文件就是操作硬盘。
    
    #用户/应用程序直接操作的是文件,对文件进行的所有操作都是在向操作系统发送系统调用,然后再由操作系统将其转换成具体的硬盘操作。

    3、如何操作文件?

    控制文件读写的模式有两种:t/b,这两种模式不能单独使用,必须要和r/w/a一起使用

    t模式:

    # 读写都必须以字符串(unicode)为单位
    # 只能针对文本文件进行操作
    # 需要指定字符编码(如:encoding='utf-8')

    b模式:

    # 读写都是以bytes 为单位
    # 可以针对所有文件
    # 不能指定字符编码

    文件的操作模式


    1、r模式的使用

    # 登陆验证功能
    inp_user = input(">>>>your name:").strip()
    inp_pwd = input(">>>>your password:").strip()
    with open('user.txt', mode='rt', encoding='utf-8') as f:
        for line in f:
            username, password = line.strip().split(':')
            if inp_user == username and inp_pwd == password:
                print('login success')
                break
        else:
            print('账号或密码错误')

    2、w 模式的使用

    # w模式用来创建全新的文件
    # 文本文件的拷贝工具
    src_file = input('源文件路径>>:').strip()
    copy_file = input('源文件路径>>:').strip()
    with open(r'{}'.format(src_file), mode='rt', encoding='utf-8') as f1,
      open(r'{}'.format(copy_file), mode='wt', encoding='utf-8') as f2:
        # res = f1.read()
        # f2.write(res)
        for line in f1:
            f2.write(line)

    3、a 模式的使用

    # a模式用来再原有的文件内容的基础之上写入新的内容,比如记录日志
    # 注册功能
    name = input('>>>>your name:').strip()
    pwd = input('>>>>your password:').strip()
    with open('db.txt', mode='at', encoding='utf-8') as f:
        f.write('{name}:{pwd}
    '.format(name,pwd))

    4、+模式的使用(了解)

    # +不能单独使用,必须配合r、w、a
    with open('g.txt',mode='r+t',encoding='utf-8') as f:
        # print(f.read())
        f.write('中国')
    
    with open('g.txt',mode='w+t',encoding='utf-8') as f:
        f.write('111
    ')
        f.write('222
    ')
        f.write('333
    ')
        print('====>',f.read())
    
    
    with open('g.txt',mode='a+t',encoding='utf-8') as f:
        print(f.read())
    
        f.write('444
    ')
        f.write('5555
    ')
        print(f.read())

    控制文件读写内容的模式


    1、t模式的使用

    # t模式的存操作
    '''
      1、读写都以字符串(unicode)为单位
      2、只能针对文本文件
      3、必须指定encoding字符编码
    '''
    # 1、r(默认的操作模式):只读模式,当文件不存在时报错,当文件存在时文件指针跳到开始位置
    with open('r.txt', mode='rt', encoding='utf-8') as f:
        print('第一次读'.center(50,'*'))
        res = f.read() # 把所有内容从硬盘读入内存
        print(res)
    
        print('第二次读'.center(50,'*'))
        res1 = f.read() # 把所有内容从硬盘读入内存
        print(res1)
    
    # 2、w:只写模式,当文件不存在时会创建空文件,当文件存在时会清空文件,指针位于开始位置
    '''
    强调1:
    强调2:如果重新以w模式打开文件,则会清空文件内容
    '''
    with open('w.txt', mode='wt', encoding='utf-8') as f:
        f.write('哈哈哈
    ')
        f.write('哈哈哈
    ')
        f.write('哈哈哈
    ')
    
    # 3、a:只追加写,在文件不存在时会创建空文档,在文件存在时文件指针会直接跳到末尾
    with open('w.txt', mode='at', encoding='utf-8') as f:
        f.write('哈哈哈
    ')
        f.write('哈哈哈
    ')
        f.write('哈哈哈
    ')
    
    '''
    强调w模式与a模式的异同:
    相同点:再打开的文件不关闭的情况下,连续的写入,新内容总会跟在前写的内容之后
    不同点:以a模式重新打开文件,不会清空原文件内容,会将文件指针直接移动到文件末尾
    '''   

    2、b模式操作文件

    # b: binary模式
    '''
      1、读写都是以bytes为单位
      2、可以针对所有文件
      3、一定不能指定字符编码
    '''
    with open(r'a.mp4', 'rb') as f:
        f.read()
    
    
    
    # 文件拷贝工具
    src_file = input('请输入源文件路径:').strip()
    copy_file = input('请输入文件保存的路径:').strip()
    file_name = src_file.split('\')[-1]
    with open(r'{}'.format(src_file), 'rb') as rf,
        open(r'{src}{copy}'.format(src=copy_file, copy=file_name), 'wb') as wf:
        for line in rf:
            wf.write(line)
    
    # 循环读取文件
    # 方式一:自己控制每次读取的数据量
    with open(r'test.jpg', 'rb') as f:
        while True:
            res = f.read(1024) # 一次只读1024个字节
            if len(res) == 0:
                break
            print(len(res))
    
    # 方式二:以行为单位,一次读取一行的数据
    with open(r'test.jpg','rb') as f:
        for line in f:
            print(line)

    文件操作的方法


    1、读写操作:

    # 一:读相关操作
    # 1、readline:一次读一行
    with open(r'test.txt', 'rt', encoding='utf-8') as f:
        while True:
            line = f.readline()
            if len(line) == 0:
                break
            print(line)
            
    # 2、readlines:
    with open(r'test.txt', 'rt', encoding='utf-8') as f:
        while True:
            line = f.readlines()
            print(line)
    '''
    强调:
    f.read()与f.readlines()都是将内容一次性读入内容,如果内容过大会导致内存溢出
    '''
    
    # 二:写相关操作
    # 3、f.writelines():
    with open(r'test.txt', 'wt', encoding='utf-8') as f:
        # f.write('1111
    222
    3333
    ')
        # l=['1111
    ', '2222', 3333] # 会报错,应为是t模式,必须是str类型
        l=['1111
    ', '2222', '3333']
        # for line in l:
        #     f.write(line)
        f.writelines(l)
        
    with open(r'test.txt', 'wb') as f:
        # 补充1:纯英文字符,可以不做转换通过加前缀b得到bytes类型
        l=[b'1111
    ', b'2222', b'3333']
        
        # 补充2:'上'.encode('utf-8')等同于bytes('上',encoding='utf-8')
        l=['矮跟'.encode('utf-8'), ''.encode('utf-8'), 'SB'.encode('utf-8')]
        l=[
            bytes('矮跟',encoding='utf-8'),
            bytes('',encoding='utf-8'),
            bytes('SB',encoding='utf-8')
        ]
        f.writelines(l)
    # 4、flush (大多数情况不用)
    with open(r'test.txt', 'wt', encoding='utf-8') as f:
        f.write('哈哈哈')
        f.flush() # 告诉操作系统,强制立刻将数据写入内存

    2、其他操作(了解)

    with open(r'test.txt', 'wt', encoding='utf-8') as f:
        print(f.readable())  # 文件是否可读
        print(f.writable())  # 文件是否可写
        print(f.closed)      # 文件是否关闭
        print(f.encoding)    # 如果文件打开模式为b,则没有该属性
        print(f.flush())     # 立刻将文件内容从内存刷到硬盘
        print(f.name)        # 获取文件名

    3、控制文件指针的移动

    '''
    指针移动的单位都是以bytes/字节为单位
    只有一种情况下特殊:
        t模式下的read(n),n代表的是字符个数
    '''
    with open('test.txt', 'rt', encoding='utf-8') as f:
        res=f.read(4)
        print(res)
        
    # f.seek(n,模式):n指的是移动的字节个数
    # 模式0:参照物是文件开头位置
    f.seek(9,0) # 9
    f.seek(3,0) # 3
    # 模式1:参照物是当前指针所在位置
    f.seek(9,1) # 9
    f.seek(3,1) # 12
    # 模式2:参照物是文件末尾位置,应该倒着移动
    f.seek(-9,2) # 3
    f.seek(-3,2) # 9
    
    '''
    强调:只有0模式可以在t下使用,1、2必须在b模式下使用
    '''
  • 相关阅读:
    19.SimLogin_case07
    19.SimLogin_case06
    19.SimLogin_case05
    19.SimLogin_case04
    19.SimLogin_case03
    闲说性能测试
    iostat命令详解
    Linux vmstat命令实战详解
    RAC集群节点故障模拟测试
    Oracle RAC功能测试
  • 原文地址:https://www.cnblogs.com/surpass123/p/12506234.html
Copyright © 2011-2022 走看看