美文网首页
Python基础文件操作读写

Python基础文件操作读写

作者: 海龙_Lewis | 来源:发表于2017-07-24 19:13 被阅读0次

    读写文件是最常见的IO操作。Python内置了读写文件的函数,用法和C是兼容的。
    读写文件前,我们先必须了解一下,在磁盘上读写文件的功能都是由操作系统提供的,现代操作系统不允许普通的程序直接操作磁盘,所以,读写文件就是请求操作系统打开一个文件对象(通常称为文件描述符),然后,通过操作系统提供的接口从这个文件对象中读取数据(读文件),或者把数据写入这个文件对象(写文件)。

    一、文件操作流程

    • 打开文件,得到文件句柄并赋值给一个变量
    • 通过句柄对文件进行操作
    • 关闭文件(用with语法可免)

    二、常规操作

    f = open('file', 'r',encoding='utf-8') //打开文件,得到文件句柄赋值给一个变量
    f.read() //调用read()方法可以一次读取文件的全部内容,Python把内容读到内存,class type:str
    f.close() //调用close()方法关闭文件。文件使用完毕后必须关闭,因为文件对象会占用操作系统的资源,并且操作系统同一时间能打开的文件数量也是有限的
    for i in f.readlines(): //readlines方法返回的是list,用python跌代器特性也可遍历全文
        print(i)
    

    read()
    <b>调用read()会一次性读取文件的全部内容,如果文件有10G,内存就爆了,所以,要保险起见,可以反复调用read(size)方法,每次最多读取size个字节的内容。另外,调用readline()可以每次读取一行内容,调用readlines()一次读取所有内容并按行返回list。因此,要根据需要决定怎么调用。

    读取总结:如果文件很小,read()一次性读取最方便;如果不能确定文件大小,反复调用read(size)比较保险;如果是配置文件,调用readlines()最方便

    三、open的打开模式

    打开文件的模式有:

    • r,只读模式(默认)。

    • w,只写模式。【不可读;不存在则创建;存在则删除内容;】

    • a,追加模式。【可读; 不存在则创建;存在则只追加内容;】

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

    • r+,可读写文件。【可读;可写;可追加】

    • w+,写读

    • a+,同a

    • "U"表示在读取时,可以将 \r \n \r\n自动转换成 \n (与 r 或 r+ 模式同使用)

    • rU

    • r+U
      "b"表示处理二进制文件(如:FTP发送上传ISO镜像文件,linux可忽略,windows处理二进制文件时需标注)

    • rb

    • wb

    • ab

    四、with语句

    文件读写结束后务必要调用f.close()来关闭文件。当我们写文件时,操作系统往往不会立刻把数据写入磁盘,而是放到内存缓存起来,空闲的时候再慢慢写入。只有调用close()方法时,操作系统才保证把没有写入的数据全部写入磁盘。忘记调用close()的后果是数据可能只写了一部分到磁盘,剩下的丢失了。使用with语句,可避免这样的错误

    with open('file','w',encoding='utf-8') as f:
        f.write('hello world')
       
    
    

    五、examples

    Tips:python修改文件时,使用w模式会将原本的文件清空/覆盖。可以先用读(r)的方式打开,写到内存中,然后再用写(w)的方式打开。

    需求:实现sed简单替换功能

    • 定义一个函数,带有4个参数
    • x 表示要更新的文件名称
    • y 表示要被替换的内容
    • z 表示 替换后的内容
    • s 默认参数为 1 表示只替换第一个匹配到的字符串
    • 如果参数为 s = 'g' 则表示全文替换
    def file(x,y,z,s=1):
        with open(x,'r',encoding='utf-8') as f:
            lines = f.readlines()
        with open(x,'w',encoding='utf-8') as fw:
            n = 0
            if s == 1:
                for i in lines:
                    if y in i:
                        i = i.replace(y,z)
                        n+=1
                        break
                    fw.write(i)
                    n+=1
                for i in range(n,len(lines)):
                    fw.write(lines[i])
            elif s == 'g':
                for i in lines:
                    if y in i :
                        i = i.replace(y,z)
                    fw.write(i)
    file('文件名','原字符','被替换字符')
    

    六、替换文件的两种方法

    python修改文件时,使用w模式会将原本的文件清空/覆盖。可以先用读(r)的方式打开,写到内存中,然后再用写(w)的方式打开。

    (1)把文件写进内存之后在修改

    with open('file',encoding='utf-8') as f:
        lines = f.readlines //写进内存
    with open('file','w',encoding='utf-8') as fw: 
        pass #将上方lines变量(把文件存储到内存中),写进原文件
    

    (2)读取原文件并将新内容写在新文件中

    with open('file',encoding='utf-8') as f:
        with open('file_new','w',encoding='utf-8') as f_w:
              for i in f.readlines():
                    f_w.write(i)
    

    相关文章

      网友评论

          本文标题:Python基础文件操作读写

          本文链接:https://www.haomeiwen.com/subject/joibkxtx.html