zoukankan      html  css  js  c++  java
  • 文件操作 常用操作方法 文件的修改

    文件操作初识

    在d盘创建”护士空姐学生少妇联系方式”的txt 文件
    path    文件路径:d:护士空姐学生少妇联系方式.txt
    encoding编码方式:utf-8,gbk....
    mode 操作方式: 只读,只写,追加,读写,写读.....
    # f2 = open('护士学生空姐班主任.txt', encoding='utf-8')
    # print(f2.read())
    # f1.close()


    路径:绝对路径:从根目录开始一直找到文件。
    相对路径:从当前目录开始找到的文件。



    错误原因分析:
    UnicodeDecodeError: 'utf-8' codec can't decode byte 0xbf in position 0: invalid start byte
    编码错误:文件存储时编码方式与文件打开时的编码方式不一致。
    SyntaxError: (unicode error) 'unicodeescape' codec can't decode bytes in position 2-3: truncated uXXXX escape
    两种:
    第一种:加r
    f1 = open(r'd:u护士空姐学生少妇联系方式.txt', encoding='GB2312', mode='r')
    print(f1.read())
    f1.close()
    第一种:加
    f1 = open('d:\护士空姐学生少妇联系方式.txt', encoding='GB2312', mode='r')
    print(f1.read())
    f1.close()



        #凡是带b不用encoding
    #只有是r模式 mode='r'可以省略不写


    常用操作方法
    r,w,a


     读模式:
    *r
    read
    # 1,f.read() 全部读出来。
    # f2 = open('护士学生空姐班主任.txt', encoding='utf-8')
    # print(f2.read())
    # f2.close()

    read(n)
    # f1 = open('护士学生空姐班主任.txt', encoding='utf-8')
    # print(f1.read(3))
    # f1.close()
    # r模式:read(n) n 是按照字符读取。
    # rb模式:read(n) n 是按照字节读取。

    readline()
    # f1 = open('护士学生空姐班主任.txt', encoding='utf-8')
    # # print(f1.readline())
    # # print(f1.readline())
    # # print(f1.readline())
    # # print(f1.readline())
    # f1.close()

    readlines()
    # f1 = open('护士学生空姐班主任.txt', encoding='utf-8')
    # print(f1.readlines())
    # for line in f1.readlines():
    #     print(line)
    # f1.close()

    for循环 最好的
    # f1 = open('护士学生空姐班主任.txt', encoding='utf-8')
    # for line in f1:
    #     print(line)
    # f1.close()

    rb
    # f1 = open('护士学生空姐班主任.txt',mode='rb')
    # print(f1.read(1))
    # f1.close()

    *r+
    # f1 = open('护士学生空姐班主任.txt', encoding='utf-8', mode='r+')
    # print(f1.read())
    # f1.write('666')
    # f1.close()

    r+b
    # f1 = open('护士学生空姐班主任.txt', mode='r+b')
    # print(f1.read())
    # f1.write('666'.encode('utf-8'))
    # f1.close()


    写模式:
    *w
    # f1 = open('log1', encoding='utf-8', mode='w')
    # f1.write('老男孩是最好的培训学校...')
    # f1.close()
    
    # f1 = open('log1', encoding='utf-8', mode='w')
    # f1.write('法国进口分类结果')
    # f1.close()

    w:没有文件,创建文件写内容。
    w:如果有文件,清空原文件,写入新内容。
    wb
    # f1 = open('log2', mode='wb')
    # f1.write('法国进口分类结果'.encode('utf-8'))
    # f1.close()

    w+
    # f1 = open('log1', encoding='utf-8', mode='w+')
    # f1.write('老老男孩.....')
    # f1.seek(0)  # 调整光标
    # print(f1.read())
    # f1.close()

    w+b
    追加模式
    *a
    a:没有文件,创建文件写内容。
    a:如果有文件,最后面追加新内容。
    # f1 = open('log3', encoding='utf-8', mode='a')
    # f1.write('barry')
    # f1.close()

    ab
    # f1 = open('log3', mode='ab')
    # f1.write('中国'.encode('gbk'))
    # f1.close()

    a+
    # f1 = open('log3', encoding='utf-8', mode='a+')
    # f1.write('范德萨急功近利开发工具')
    # f1.seek(0)
    # print(f1.read())
    # f1.close()

    a+b
    补充:
    #ps 非文字的文件的读取写入
    # f1 = open('11.jpg', mode='rb')
    # content = f1.read()
    # print(content)
    # f1.close()
    # f2 = open('小猪佩奇.jpg', mode='wb')
    # f2.write(content)

    gbk utf-8
    对于字母,数字,特殊字符的编码都是引用ascii码,所以可以直接转化。
    s1 = '123abc*'
    b1 = s1.encode('utf-8')
    s2 = b1.decode('gbk')
    print(s2)

    05,文件操作常用方法
    # readlable() writeable()判断是否可读或者可写
    # f1 = open('log1', encoding='utf-8')
    # print(f1.readable())
    # print(f1.writable())
    # f1 = open('log1', encoding='utf-8',mode='r+')
    # print(f1.readable())
    # print(f1.writable())
    # seek: 按照字节去调整光标
    # f1 = open('log1', encoding='utf-8')
    # f1.seek(3)
    # print(f1.read())
    # f1.close()
    # tell 告诉光标的位置
    # f1 = open('log1', encoding='utf-8')
    # print(f1.tell())
    # print(f1.read())
    # print(f1.tell())
    # f1.close()
    #truncate 对原文件进行截取内容,以字节形式,只能在a模式下使用。
    # f1 = open('log1', encoding='utf-8', mode='a')
    # f1.truncate(3)
    # f1.close()
    #文件操作的另一种写法
    # with open() as 不用主动关闭 f1.close()
    # 同一open 可以操作多个文件
    # with open('log1', encoding='utf-8') as f1:
    #     print(f1.read())
    # with open('log1', encoding='utf-8') as f1,
    #     open('log2',encoding='utf-8', mode='w') as f2:
    #     print(f1.read())
    #     f2.write('666')
    # with open('log1', encoding='utf-8') as f1:
    #     content = f1.read()
    #     f1.close()
    #     pass
    #     with open('log1', encoding='utf-8',mode='w') as f2:
    #         f2.write('333')

    06,文件的改。

    1,打开原文件 old_file,将原内容读取到内存。
    2,创建一个新文件new_file。
    3,将原内容通过你改写形成新内容,写入到新文件。
    4,将原文件删除。
    5,将新文件重命名成原文件。


    #方法一,原文件内容不打,可以用此方法,但是此方法还是很low。
    # import os
    # with open('change', encoding='utf-8') as f1,
    #     open('change.bak', encoding='utf-8', mode='w') as f2:
    #     old_content = f1.read()
    #     new_content = old_content.replace('alex', 'SB')
    #     f2.write(new_content)
    # os.remove('change')
    # os.rename('change.bak', 'change')
    # 方法2
    import os
    with open('change', encoding='utf-8') as f1,
        open('change.bak', encoding='utf-8', mode='w') as f2:
        for line in f1:
            new_line = line.replace('SB', 'alex')
            f2.write(new_line)
    os.remove('change')
    os.rename('change.bak', 'change')
  • 相关阅读:
    supervisor(一)基础篇
    linux添加开机自启动脚本示例详解
    suse 不能远程登录
    LintCode,hihoCoder,LeetCode有什么区别?
    windows 下安装nodejs 要怎么设置环境变量
    Java 集合:HashSet 与 ArrayList
    Java ArrayList、Vector和LinkedList等的差别与用法(转)
    一行代码实现java list去重
    25 highest paying companies: Which tech co outranks Google, Facebook and Microsoft?
    Chart: Who pays the most in Seattle for software engineers
  • 原文地址:https://www.cnblogs.com/HoneyTYX/p/9010843.html
Copyright © 2011-2022 走看看