zoukankan      html  css  js  c++  java
  • Python之路【第五篇】:Python基础之文件处理

    阅读目录

    一、文件操作

    1、介绍

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

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

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

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

    代码如下:

    f=open('朱锐',encoding='utf-8') #python3默认是utf-8编码,但是新建文件追随的系统编码,需要通过encoding转变成utf-8
    data=f.read()
    print(data)
    f.close()

    2、在python中

    #1. 打开文件,得到文件句柄并赋值给一个变量
    f=open('a.txt','r',encoding='utf-8') #默认打开模式就为r
    
    #2. 通过句柄对文件进行操作
    data=f.read()
    
    #3. 关闭文件
    f.close()

    3、f = open('file.txt','r')的过程分析

    #1、由应用程序向操作系统发起系统调用open(...)
    #2、操作系统打开该文件,并返回一个文件句柄给应用程序
    #3、应用程序将文件句柄赋值给变量f

    二、打开文件的模式

    文件句柄 = open('文件路径','模式')
    #1、打开文件的模式有(默认文本模式)
    r  ,只读模式【默认模式,文件必须存在,不存在则抛出异常】
    w ,只写模式【不可读,文件不存在则创建,存在则清空内容】
    a , 追加模式【不可读,不存在则创建,存在则只追加内容】
    
    #2、对于非文本文件,我们只能使用b模式,'b'表示以字节的方式操作(而所有文件也都是以字节的形式存储的,使用这种模式无需考虑文本文件的字符编码、图片文件的jpg格式、视频文件的avi格式)
    rb
    wb
    ab
    注意:以b方式打开时,读取到的内容是字节类型,写入时也需要提供字节类型,不能指定编码
    
    #3、了解部分
    "+" 表示可以同时读写某个文件
    r+:读写【可读,可写】
    w+:写读【可读,可写】
    a+:写读【可读,可写】
    
    x,只写模式【不可读;不存在则创建,存在则报错】
    x+ ,写读【可读,可写】
    xb

    三、操作文件的方法

    文件处理常用的读操作:

    # f=open('朱锐',encoding='utf-8')
    # data=f.read()
    # print(data)
    # f.close()
    
    #打开文件的模式(r w a)
    # f=open('朱锐','r',encoding='utf-8')
    # # data=f.read()
    # # print(data)
    # print(f.readable()) #判断文件是否是读的处理方式
    #
    # f=open('朱锐','w',encoding='utf-8')
    # # data=f.read()
    # # print(data)
    # print(f.writable()) #判断文件是否是写的处理方式
    
    file=open('readline',encoding='utf-8')
    print('第1行',file.readline(),end='') #后面加end为空,取消换行
    print('第2行',file.readline())
    print('第3行',file.readline())
    print('第4行',file.readline())
    print('第5行',file.readline())
    print('第6行',file.readline())
    print('第7行',file.readline())
    print('第8行',file.readline())
    print('第9行',file.readline())
    输出结果:
    C:Python35python3.exe G:/python_s3/day16/文件处理.py
    第1行 111111111111111111111
    第2行 222222222222222222222
    
    第3行 333333333333333333333
    
    第4行 44444444444444444444
    
    第5行 54545
    
    第6行 454564641111111111111
    
    第7行 333333333333343532236236

    文件处理写操作:

    f=open('朱锐','w',encoding='utf8')
    f.write('23456789
    ')
    f.write('1233489087766
    ')
    f.write('33334444333
    ')
    f.write('1233
    ')
    f.writelines(['555
    ','6666
    ']) #文件内容只能是字符串,只能写字符串
    f.write(3)
    f.close()

    文件处理追加操作:

    f=open('朱锐','a',encoding='utf-8')
    f.write('写到文件最后')

    文件处理其他模式操作:

    文件处理其他操作:
    f=open('xxx','r+',encoding='gbk')
    # data=f.read()
    # print(data)
    # f.write('123sb')
    
    
    
    f.write('sb')
    
    
    #文件修改
    src_f=open('xxx','r',encoding='gbk')
    data=src_f.readlines()
    src_f.close()
    
    # for i in data:
    #     print(i)
    print(data)
    dst_f=open('xxx','w',encoding='gbk')
    # dst_f.writelines(data)
    dst_f.write(data[0])
    dst_f.close()
    
    with open('a.txt','w') as f: #with方式打开文件,不用再加close关闭
        f.write('1111
    ')
    
    
    src_f=open('xxx','r',encoding='gbk')
    dst_f=open('xxx','w',encoding='gbk')
    with open('xxx','r',encoding='gbk') as src_f,
            open('xxx_new','w',encoding='gbk') as dst_f:
        data=src_f.read()
        dst_f.write(data)
    
    f=open('a.txt')
    print(f.encoding) #查看文件编码

    四、文件内光标移动

     1、read(3):

    1、文件打开方式为文本模式,代表读取3个字符
    2、文件打开方式为b模式,代表读取3个字符

    2、其余的文件内光标移动都是以字节为单位,如:seek,tell,truncate

    注意:
    1、seek有三种方式0,1,2 其中1和2必须在b模式下进行,但无论哪种模式,都是以bytes为单位移动的
    
    2、truncate是截断文件,所以文件的打开方式必须可写,但是不能用w或w+等方式打开,因为那样直接清空文件了,所以truncate要在r+或a或a+等模式下测试效果
    #基于seek实现tail -f功能
    import time with open('test','rb') as f: f.seek(0,2) while True: line=f.readline() if line: print(line.decode('utf-8')) else: time.sleep(0.2)
    f=open('日志文件','rb')
    for i in f:
        offs=-10
        while True:
            f.seek(offs,2)
            data=f.readlines()
            if len(data) > 1:
                print('文件的最后一行是%s' %(data[-1].decode('utf-8')))
                break
            offs*=2
  • 相关阅读:
    linux awk命令详解
    Linux 大页面使用与实现简介(转)
    二层设备与三层设备的区别--总结
    Windows下的cd命令
    linux常用命令
    上班第一天
    linux 内核移植和根文件系统的制作
    Sizeof与Strlen的区别与联系
    嵌入式软件工程师面试题
    SpringBoot简单打包部署(附工程)
  • 原文地址:https://www.cnblogs.com/hackerer/p/10706274.html
Copyright © 2011-2022 走看看