zoukankan      html  css  js  c++  java
  • 0508Python基础-文件操作

    0508Python基础-文件操作

    1、文件操作初识

        护士空姐学生少妇联系方式.txt

        Python代码

        path    文件路径:d:护士空姐学生少妇联系方式.txt

        encoding编码方式:utf-8,gbk....

        mode    操作方式: 只读,只写,追加,读写,写读.....

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

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

        错误原因分析:

            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'可以省略不写

    2、文件操作 r,w,a

        读模式:

            *r

                read

                read(n)

                readline()

                readlines()

                for循环 最好的

            rb

            *r+

            r+b

        写模式:

            *w

                w:没有文件,创建文件写内容。

                w:如果有文件,清空原文件,写入新内容。

            wb

            w+

            w+b

        追加模式

            *a

                a:没有文件,创建文件写内容。

                a:如果有文件,最后面追加新内容。

            ab

            a+

            a+b

            补充:

                gbk utf-8

                对于字母,数字,特殊字符的编码都是引用ascii码,所以可以直接转化。

                s1 = '123abc*'

                b1 = s1.encode('utf-8')

                s2 = b1.decode('gbk')

                print(s2)

    详细代码演示
    f1 = open('d:护士空姐学生少妇联系方式.txt', encoding='GB2312', mode='r')
    print(f1.read())
    f1.close()

    变量:f1_obj,f1_file,file,file_handle... 文件句柄。
    open Python的内置函数,但是底层调用的windows系统的open功能,open功能就是操作文件用的。
    windows系统默认的编码方式gbk,linux,macos:utf-8.
    流程: 1打开文件,产生文件句柄。
           2对文件句柄进行相应的操作。
           3,关闭文件。

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

    r rb
    1,f.read() 全部读出来。
    f2 = open('护士学生空姐班主任.txt', encoding='utf-8')
    print(f2.read())
    f2.close()
    ,2 f.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() 返回一个list 里面的元素是每一行。
    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 wb模式
    w:没有文件,创建文件写内容。
    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()

    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 ab
    a:没有文件,创建文件写内容。
    a+:有文件,直接在原文件的后面追加新内容。
    f1 = open('log3', encoding='utf-8', mode='a')
    f1.write('barry')
    f1.close()

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

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

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

          

    3、文件操作常用方法


    read  write  read(n) readline() readlines() seek

    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')

          

    4、文件的改。

          

    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')

  • 相关阅读:
    深刻理解Docker镜像大小
    UVA 12657 Boxes in a Line
    STL 之 iterator traits 备忘
    python设计模式 之 简单工厂模式
    extjs 时间范围选择的实现
    数据结构
    nodeJS npm grunt grunt-cli
    Ubuntu: GlusterFS+HBase安装教程
    ubuntu 休眠之后蓝牙鼠标无效果。
    基于sparksql调用shell脚本运行SQL
  • 原文地址:https://www.cnblogs.com/dzh0394/p/9008514.html
Copyright © 2011-2022 走看看