• Python学习之路_day_07(文件处理二)


    一 文件处理:
        with open('a.txt', encoding='utf-8') as f1,
                open('b.txt', encoding='utf-8') as f2,
                open('c.txt', encoding='utf-8') as f3:
            pass
    ## +回车 在pycharm中换到下一行,但实际上还是一行

        默认是t模式,t不能单独使用,必须是rt,wt,at

     

    f.read() 读出来的是一个打的字符串

    f.readlines() 相当于一个for循环

     

    绝对路径与相对路径:

    绝对路径:在任意位置都可以定位该文件

    相对路径:以所在位置为参考定位文件

     

    …py_learnday1 est.py: windows 系统用‘’表示子关系

    …/py_learn/day1/test.py: linux系统用‘/ 表示子关系’

     

    二 文件处理:

    文件的打开模式b模式
    强调:
    1、与t模式类似不能单独使用,必须是rb,wb,ab
    2、b模式下读写都是以bytes单位的
    3、b模式下一定不能指定encoding参数

     

    rb模式

    with open('1.jpg',mode='rb',) as f:
        data=f.read()
        print(data,)
        print(type(data))

    with open('db.txt',mode='rb',) as f:
        data=f.read() #
        print(data.decode('utf-8')) #bytes-----unicode
        print(type(data))

    #‘utf-8’等是字符编码,只能处理字符,处理不了包括图片视频在内的其他形式

    # b模式(二进制)也可以读txt,但要读出字符,需要解码

     

    wb模式

    with open('b.txt',mode='wb') as f:
        msg='你好啊,吴三炮'
        f.write(msg.encode('gbk'))   #在utf-8平台乱码,reload去gbk可读
    with open('b.txt',mode='ab') as f:
        msg='你好啊,吴三炮'
        f.write(msg.encode('utf-8'))  #在gbk平台乱码,reload去utf-8可读

     

    with open('b.txt',mode='rb') as f:
        data=f.read()
        print(type(data))
        print(data.decode('utf-8'))


    with open('1.jpg',mode='rb') as f:
        data=f.read()
        print(type(data))
        print(data.decode('utf-8'))

    ##error, utf-8不能处理非字符类型文件

     

    ab模式

    with open('b.txt',mode='ab') as f:
        f.write('你好'.encode('utf-8'))

    with open('1.jpg','rb') as f:
        for line in f:
            print(line)

     

    可读可写 #不改变r/w/a在判断文件存在与否后作出的基本处理方法, 很少用
    #r+t (r+)
    with open('b.txt','r+t',encoding='utf-8') as f:
        print(f.readable())
        print(f.writable())
        print(f.readline())
        f.write(' 吴大炮你也号 ')
    #w+t (w+)
    #a+t (a+)
    #U   :通用换行符,没用

     

    三 文件的处理

    with open('db.txt','r+',encoding='utf-8') as f:
    f.seek(9) #偏移量的单位是字节,utf-8中,一个中文字符占三个字节,一个英文字符占一个字节
    print(f.tell())   #9
    print(f.read())

     

    硬盘无删改,只是覆盖。删除后,硬件上的原空间被标定free。可以在内存中删改
    修改文件方式一:
    1、先把文件内容全部读入内存
    2、然后在内存中完成修改
    3、再把修改后的结果覆盖写入原文件
    缺点:会在文件内容过大的情况下,占用过多的内存

    with open('user.txt',mode='r',encoding='utf-8') as f:
        data=f.read()
        data=data.replace('吴佩其','吴佩其[老男孩第二帅的人]')
    with open('user.txt',mode='w',encoding='utf-8') as f:
        f.write(data)

    修改文件方式二:
    1、以读的方式打开原文件,以写的方式打开一个新文件

    2、读一行原文内容,写入新文件,如果该行内容是需要修改的内容,那么修改完后再写入新文件

    3、删除原文件,将新文件名重命名为原文件名


    import os
    with open('user.txt',mode='rt',encoding='utf-8') as read_f,
            open('user.txt.swap',mode='wt',encoding='utf-8') as write_f:
        for line in read_f:
            if '吴佩其' in line:
                line=line.replace('吴佩其','吴佩其[老男汉特别特别的老]')
            write_f.write(line)
    os.remove('user.txt')
    os.rename('user.txt.swap','user.txt')

    #总的来说第一种方式耗内存,第二种方式耗硬件

     

    copy #在终端中运行

    import sys
    l=sys.argv # 把命令行中解释器后空格分割的所有参数都存成列表
    # print(l)

    src_file_path=l[1]
    dst_file_path=l[2]
    # print(src_file_path)
    # print(dst_file_path)
    with open(r'%s' %src_file_path,mode='rb') as src_f,
            open(r'%s' %dst_file_path,mode='wb') as dst_f:
        for line in src_f:
            dst_f.write(line)

  • 相关阅读:
    APP排查内存泄漏最简单和直观的方法
    Unable to resolve service for type 'Microsoft.AspNetCore.ResponseCompression.IResponseCompressionProvider' while attempting to activate 'Microsoft.AspNetCore.ResponseCompression.ResponseCompressionMid
    c# json序列化不包括某列
    log4net按级别写到不同文件
    .NETCore_项目启动设置域名以及端口
    Oracle_本地计算机上的OracleOraDb11g_home1TNSListener 服务启动后停止
    Oracle_其他人连接不上自己电脑
    Oracle_创建自增
    Oracle_12541错误和ora-12514错误
    Oracle_PLSQL导出导入dmp文件
  • 原文地址:https://www.cnblogs.com/zjh009/p/9469522.html
Copyright © 2020-2023  润新知