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
  • 相关阅读:
    215. Kth Largest Element in an Array
    214. Shortest Palindrome
    213. House Robber II
    212. Word Search II
    210 Course ScheduleII
    209. Minimum Size Subarray Sum
    208. Implement Trie (Prefix Tree)
    207. Course Schedule
    206. Reverse Linked List
    sql 开发经验
  • 原文地址:https://www.cnblogs.com/hackerer/p/10706274.html
Copyright © 2011-2022 走看看