zoukankan      html  css  js  c++  java
  • 文件操作

    方式一

    f = open()    # f: 学名:文件操作符 或   文件句柄 或者 文件操作对象
    f = open('file','w',encoding= ‘utf-8’)
    #open打开文件是依赖了操作系统提供的途径
    #操作系统有自己的编码,open在打开文件的时候默认使用操作系统的编码
    #win系统  gbk    mac、Linux系统 utf-8 
    mac, linux,打开python文件,默认utf-8,而python 3  默认是utf-8 所以用mac、Linux。系统的人  不用encoding='utf-8'
    win系统打开python文件,默认gbk,而python 3 默认是utf-8,所以需要encoding='utf-8'

    例如:我们用pycharm 编写代码的时候,默认使用utf-8方式编写内容,所以要先把打开的文件转换成utf-8格式,保证打开

    的文件类型变成utf-8,和你将要以哪种(utf-8)保持一致,才行

    例子,一篇文章,如果全是英语 ,你再往里面输入英文 英译汉 可以直接变成汉语

    一篇文章,如果全是英语,你再往里面输入日语, 英译汉 就会出错

    ***只要写入的类型和打开的类型一致,不管什么操作系统都不会出错

    文件句柄的几个方法

    f.readable()    #判断文件是否可读
    
    f.writable()     #判断文件是否可写
    
    f.write('int')      #write()  写入的date 全是str      (打开文件的同时,文件被清空)
    write()如果文件不存在,那么不存在的文件会被创建
    ----------
    
    找到文件:
    绝对路径: 文件路径要用取消转译的方式来表示(两种方法): 1. \\     2.r'path'
    相对路径: 文件和py的 执行文件 在相同路径下,直接用文件的名字就可以
    ----------------------
    
    f.close()   # 关闭文件 (操作系统级别的关闭)
    del f         # 主动的释放了一个python程序内存中的变量     
    (解释器会主动回收,所以可写可不写(例如:定义a = 1,b = 2,程序后面不用,解释器会主动回收,不过回收是需要时间的))
    -------------------
    
    f.read()     # 一次性读出文件的所有内容,   r 是按字符读,  rb 按字节读
    
    f.read(n)    # 一次读n个字符
    
    f.readline()    # 一次读一行,每次执行readline就会往下读一行 *** 不能直接读第二行
            print()本身就带换行符,而文件每行末尾也有换行符,就会造成输出一行字符一行空,一行字符一行空。。。
            print(1) ---------1\n
            print('1\n')------1\n\n
            所以加.strip(),把每行末尾的换行符去掉   (strip 能去掉空格、制表符、换行符)
        content = f.readline()
        print(content.strip())
        content = f.readline()
        print(content.strip())
    
    f.readlines()        # 返回一个列表,将文件中的每一行作为列表的一个元素
                           # readlines有一个问题,如果文件有10g ,你的电脑内存就爆了

    定位光标写入位置:

    tell()      # 查看当前指针位置
    
    seek(0)   # 把指针定位到文件开头
    seek(0,2)   # 把指针定位到文件末尾
    
    truncate(n)   # 截取从开头到n个字符(0--n),n以后的全部删掉 **必须是写入模式  ‘r+’  ‘a’  ‘a+’ ‘w’ ‘w+’    也就是除了'r'模式

    一行一行的读取,几乎不占内存

    for line i f:                   一次拿一行到内存    释放掉上一行
        print(line.strip())

    例子:

    有一个文件name:

    apple 10 3
    tesla 100000
    mac 3000 2
    lenovo 30000 3
    chicken 10 3
    phone 3 3000

    f = open('name','r',encoding='utf-8')
    dic = {}
    shop_list = []
    for i in f:
        if line.strip():          有空行的话,line.strip()就是  ''  空,空的bool值就是False,不执行
            dic1 = {'name':None,'price':None}
            li = i.split()
            dic1['name'] = li[0]
            dic1['price'] = li[1:]
            shop_list.append(dic1)
    print(shop_list)
    f.close()

    读写参数:

    w     # 以写方式打开,如果这个文件不存在,则创建这个文件,存在会被覆盖
    
    r      # 以只读方式打开
    
    x     # 如果文件存在,打开会引发异常
    
    a    #  以写方式打开,写的内容追加在文章末尾(像列表的append())
    
    b     # 表示二进制文件
    
    +     # 以修改方式打开,支持读/写
    
    r+    # 以读写模式打开
    
    w+   # 以读写模式打开 (参见 w )
    
    a+    # 以读写模式打开 (参见 a )
    
    rb     # 以二进制读模式打开
    
    wb    # 以二进制写模式打开 (参见 w )
    
    ab     # 以二进制追加模式打开 (参见 a )
    
    rb+   # 以二进制读写模式打开 (参见 r+ )
    
    wb+  # 以二进制读写模式打开 (参见 w+ )
    
    ab+  # 以二进制读写模式打开 (参见 a+ )

    示例: 文件的修改

    name文件内容
        aaaaaaa
        bbbbbbb
        cccccccc
    -------------------------------
        
    f = open('name','r',encoding='utf-8')    # 以 r 模式打开name文件
    f1 = open('name1','w',encoding='utf-8')    # 以 w 模式创建 name1 文件
    for line in f:
        line = line.replace('a','x')    #  把‘a' 替换成 x
        f1.write(line)   # 把修改后的字符串写入name1
    f.close()
    f1.close()    # 关闭文件
    import os    # os模块
    os.remove('name')    # 删除name文件
    os.rename('name1','name')    # 把name1 文件改成原name文件
    ----------------------------------
    
    name文件修改后的内容
        xxxxxxxx
        bbbbbbb
        xxxxxxxx
    文件不能直接修改,可以把修改的内容存在另一个文件,把原文件删除,然后另一个文件改名字,间接完成修改

    方式二

    with语法,上下文管理

    优点是不用手动关闭,且读取文件的过程中,不管是否发生错误,都会自动关闭文件

    示例:

    with 可以不用关闭文件
    name文件
        xxxxxxxx
        bbbbbbb
        xxxxxxxx
    -------------------------------------
        
    with open('name','r',encoding='utf-8') as f,\
            open('name1','w',encoding='utf-8') as f1:
        for line in f:
            line = line.replace('x','a')
            f1.write(line)
    import os
    os.remove('name')
    os.rename('name1','name')
    ---------------------------------------
    
    name文件
        aaaaaaa
        bbbbbbb
        cccccccc
  • 相关阅读:
    使用 git 提交报错:error: RPC failed; HTTP 413 curl 22 The requested URL returned error: 413 Request Entity Too Large 的解决办法
    vue3使用 svg, 不是 svg 图标,是 svg 大图片。可动态修改参数
    Unix信号列表
    Linux CentOS系统安装 node 版本管理工具 nvm
    《能源监测与评价》——产品能耗的节能监测
    脚本
    Parallels Desktop 安装 Centos 虚拟机
    Nuxt3 学习笔记
    电力行业中的一些基本概念
    管理成熟度和管理者成熟度
  • 原文地址:https://www.cnblogs.com/zhzhlong/p/9276764.html
Copyright © 2011-2022 走看看