• python全栈开发从入门到放弃之文件处理


    一、文件处理流程

    1.打开文件,得到文件句柄并赋值给一个变量

    2.通过句柄对文件进行操作

    3.关闭文件

     1 事例文件内容   
     2  【一棵开花的树】
     3     如何让你遇见我
     4     在我最美丽的时刻
     5     为这
     6     我已在佛前求了五百年
     7     求佛让我们结一段尘缘
     8     佛于是把我化做一棵树
     9     长在你必经的路旁
    10     阳光下
    11     慎重地开满了花
    12     朵朵都是我前世的盼望
    13     当你走近
    14     请你细听
    15     那颤抖的叶
    16     是我等待的热情
    17     而当你终于无视地走过
    18     在你身后落了一地的
    19     朋友啊
    20     那不是花瓣
    21     那是我凋零的心

    文件的基本操作

    f =open('tmp',encoding="utf-8")    #打开文件要注意,用什么编码存的就用什么编码取
    file=f.readline()    #依次读取一行
    print(file)
    print('我是分割线'.center(50,'_'))
    data = f.read() #读取文件剩下的所有内容,文件大时,不要用
    
    print(data)
    
    f.close()      #关闭文件,不关闭的话,有时在调用会出错
    
    
    
    输出结果:
        【一棵开花的树】
    
    ______________________我是分割线_______________________
        如何让你遇见我
        在我最美丽的时刻
        为这
        我已在佛前求了五百年
        求佛让我们结一段尘缘
        佛于是把我化做一棵树
        长在你必经的路旁
        阳光下
        慎重地开满了花
        朵朵都是我前世的盼望
        当你走近
        请你细听
        那颤抖的叶
        是我等待的热情
        而当你终于无视地走过
        在你身后落了一地的
        朋友啊
        那不是花瓣
        那是我凋零的心

    补充

    1 #不指定打开编码,默认使用操作系统的编码,windows为gbk,linux为utf-8,与解释器编码无关
    2 f=open('chenli.txt',encoding='gbk') #在windows中默认使用的也是gbk编码,此时不指定编码也行
    3 f.read()

    文件打开模式

    1 文件句柄 = open('文件路径', '模式')

    打开文件时,需要指定文件路径和以何等方式打开文件,打开后,即可获取该文件句柄,日后通过此文件句柄对该文件操作。

    打开文件的模式有:

    • r ,只读模式【默认模式,文件必须存在,不存在则抛出异常】
    • w,只写模式【不可读;不存在则创建;存在则清空内容】
    • x, 只写模式【不可读;不存在则创建,存在则报错】
    • a, 追加模式【可读;   不存在则创建;存在则只追加内容】

    "+" 表示可以同时读写某个文件

    • r+, 读写【可读,可写】
    • w+,写读【可读,可写】
    • x+ ,写读【可读,可写】
    • a+, 写读【可读,可写】

     "b"表示以字节的方式操作

    • rb  或 r+b
    • wb 或 w+b
    • xb 或 w+b
    • ab 或 a+b

     注:以b方式打开时,读取到的内容是字节类型,写入时也需要提供字节类型,不能指定编码

    文件内置函数flush

    flush原理:

    1. 文件操作是通过软件将文件从硬盘读到内存
    2. 写入文件的操作也都是存入内存缓冲区buffer(内存速度快于硬盘,如果写入文件的数据都从内存刷到硬盘,内存与硬盘的速度延迟会被无限放大,效率变低,所以要刷到硬盘的数据我们统一往内存的一小块空间即buffer中放,一段时间后操作系统会将buffer中数据一次性刷到硬盘)
    3. flush即,强制将写入的数据刷到硬盘

    滚动条

    1 import sys,time
    2 
    3 for i in  range(10):
    4     sys.stdout.write('#')
    5     sys.stdout.flush()
    6     time.sleep(0.2)
    ##########

    或者

    import time
    for i in range(10):
        print('#',end='',flush=True)
        time.sleep(0.2)
    else:
        print()

    文件内光标移动

    一: read(3):

      1. 文件打开方式为文本模式时,代表读取3个字符

      2. 文件打开方式为b模式时,代表读取3个字节

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

    注意:

      1. seek有三种移动方式0,1,2,其中1和2必须在b模式下进行,但无论哪种模式,都是以bytes为单位移动的

      2. truncate是截断文件,所以文件的打开方式必须可写,但是不能用w或w+等方式打开,因为那样直接清空文件了,所以truncate要在r+或a或a+等模式下测试效果

    1 import time
    2 with open('tmp','rb') as f:
    3     f.seek(0,2)
    4     while True:
    5         line=f.readline()
    6         if line:
    7             print(line.decode('utf-8'))
    8         else:
    9             time.sleep(0.2)

    open函数详解

    1. open()语法

    open(file[, mode[, buffering[, encoding[, errors[, newline[, closefd=True]]]]]])
    open函数有很多的参数,常用的是file,mode和encoding
    file文件位置,需要加引号
    mode文件打开模式,见下面3
    buffering的可取值有0,1,>1三个,0代表buffer关闭(只适用于二进制模式),1代表line buffer(只适用于文本模式),>1表示初始化的buffer大小;
    encoding表示的是返回的数据采用何种编码,一般采用utf8或者gbk;
    errors的取值一般有strict,ignore,当取strict的时候,字符编码出现问题的时候,会报错,当取ignore的时候,编码出现问题,程序会忽略而过,继续执行下面的程序。
    newline可以取的值有None, , , ”, ‘ ',用于区分换行符,但是这个参数只对文本模式有效;
    closefd的取值,是与传入的文件参数有关,默认情况下为True,传入的file参数为文件的文件名,取值为False的时候,file只能是文件描述符,什么是文件描述符,就是一个非负整数,在Unix内核的系统中,打开一个文件,便会返回一个文件描述符。

    2. Python中file()与open()区别
    两者都能够打开文件,对文件进行操作,也具有相似的用法和参数,但是,这两种文件打开方式有本质的区别,file为文件类,用file()来打开文件,相当于这是在构造文件类,而用open()打开文件,是用python的内建函数来操作,建议使用open

    with open('a.txt','w') as f:
        pass

    文件的修改
    import os
    with open('a.txt','r',encoding='utf-8') as read_f,
            open('.a.txt.swap','w',encoding='utf-8') as write_f:
        for line in read_f:
            if line.startswith('hello'):
                line='哈哈哈
    '
            write_f.write(line)
    
    os.remove('a.txt')
    os.rename('.a.txt.swap','a.txt')
    
    #修改文件名和内容



    别想一下造出大海,必须先由小河川开始。
  • 相关阅读:
    美国首位女计算机博士荣获今年图灵奖
    此人需要关注一下
    Microsoft的壮大与IBM对Sun的收购
    文章介绍:Sexy Lexing with Python
    程序员的门道
    闲谈:敏捷与否的区分方法、对组织内部人员的现实作用与长远利益
    聊聊最俗的工厂相关话题
    人之患在好为人师
    TIOBE的头头儿和“反Java”的教授
    敏捷的核心究竟是什么
  • 原文地址:https://www.cnblogs.com/zcfx/p/7236667.html
Copyright © 2020-2023  润新知