zoukankan      html  css  js  c++  java
  • python3笔记十七:python文件读写

    一:学习内容

    • 读文件
    • 写文件
    • 编码与解码

    二:读文件--步骤分解

    1.过程

    第一步:打开文件
    第二步:读文件内容
    第三步:关闭文件

    2.第一步:打开文件

    open(path,flag[,encoding][,errors])

    参数说明:
    path:要打开文件的路径
    flag:打开方式(
    r:以只读的方式打开文件,文件的描述符放在文件开头
    rb:以二进制格式只读的方式打开文件,文件的描述符放在文件开头
    r+:打开一个文件用于读写,文件描述符放在文件的开头
    w:打开一个文件只用于写入,文件的描述符放在文件的开头,如果该文件已经存在会覆盖,如果不存在则创建新文件
    wb:打开一个文件只用于写入二进制,如果该文件会覆盖,如果该文件不存在新创建文件
    w+:打开一个文件用于读写,如果该文件存在会覆盖,如果该文件不存在新创建文件
    a:打开一个文件用于追加,如果文件存在文件描述符将会被放到文件末尾
    a+:打开一个文件用于追加
    encoding:编码方式
    errors:错误处理

    path = r"F:python_test ead_practice.txt"
    #f = open(path,"r",encoding="utf-8",errors="ignore")   #ignore 忽略错误
    f = open(path,"r",encoding="utf-8")

    3.第二步:读文件内容

    #法1、读取文件全部内容,适合读文件比较小的
    str1 = f.read()
    print(str1)

    #法2、读取指定字符数
    str2 = f.read(10)  #读取文件10个字符,1个中文是1个字符
    print(str2)
    str3 = f.read(10)   #继续上一次读取结束的位置继续读取
    print(str3)

    #法3、读取整行包括" "字符
    str4 = f.readline()
    print(str4)
    str5 = f.readline()  #继续下一行读取
    print(str5)

    #法4、读取指定字符数
    str6 = f.readline(10)
    print(str6)

    #法5、读取所有行包括" "字符并返回列表
    list7 = f.readlines()
    print(list7)

    #法6、若给定的数字大于0,返回实际size字符的行数
    list7 = f.readlines(25)
    print(list7)

    #修改文件描述符位置
    f.seek(0)
    str9 = f.read()
    print(str9)

    4.第三步:关闭文件

    f.close()

    三:读文件--完整过程

    1.法一
    try:
        f1 = open(path,"r",encoding="utf-8")
        print(f1.read())
    finally:
        if f1:   #打开失败时f1对象还未创建就不用关闭了
            f1.close()

    2.法二,最简洁的写法,不用自己手动去close了

    with open(path,"r",encoding="utf-8") as f2:
        print(f2.read())

    四:写文件--步骤分解

    1.过程

    第一步:打开文件
    第二步:写文件内容
    第三步:关闭文件

    2.刷新缓冲区两种方式

    自动刷新  f.close()
    手动刷新  f.flush()

    3.第一步:打开文件

    path = r"F:python_testwrite_practice.txt"
    f = open(path,"w",encoding="utf-8")

    4.第二步:写文件

    #将信息写入缓冲区
    f.write("tester is a good girl")


    #刷新缓冲区,就能写入文件
    #直接把缓冲区的数据立刻写入文件,如果没有写刷新缓冲区则会在关闭文件时在把缓冲区写入文件
    f.flush()

    5.第三步:关闭文件

    f.close()

    五:写文件--完整过程

    1.法一
    try:
        f1 = open(path,"w",encoding="utf-8")
        f1.write("good girl")
    finally:
        if f1:   #打开失败时f1对象还未创建就不用关闭了
            f1.close()

    2.法二-覆盖写入,简洁的写法,不用自己手动去close了

    with open(path,"w",encoding="utf-8") as f2:
        f2.write("good girl")

    3.法三-追加写入,简洁的写法,不用自己手动去close了

    with open(path,"a",encoding="utf-8") as f3:
        f3.write("young girl")

    执行完法二和法三的结果:文件被写入内容

    六:编码与解码

    1.说明

    不是二进制时:
    文件打开的编码要一致,即写文件和读文件open中的encoding要一致


    二进制文件时:
    文件写入读取的编码要一致

    2.不是二进制文件读写操作

    path = r"F:python_testencode_file.txt"

    with open(path,"w",encoding="utf-8") as f1:
        str = "tester is a good girl测试"
        f1.write(str)

    with open(path,"r",encoding="utf-8") as f2:
        data = f2.read()
        print(data)
        print(type(data))

    3.二进制文件读写

    path = r"F:python_testencode_file.txt"

    #with open(path,"wb",encoding="utf-8") ,当方式里有b时,不能有encoding参数,否则会报错binary mode doesn't take an encoding argument
    with open(path,"wb") as f1:
        str = "tester is a good girl测试"
        f1.write(str.encode("utf-8"))

    with open(path,"rb") as f2:
        data = f2.read()
        print(data)
        print(type(data))
        newData = data.decode("utf-8")
        print(newData)
        print(type(newData))

  • 相关阅读:
    leetcode 416. Partition Equal Subset Sum
    leetcode 696. Count Binary Substrings
    leetcode 74. Search a 2D Matrix
    leetcode 199. Binary Tree Right Side View
    leetcode 43. Multiply Strings
    leetcode 695. Max Area of Island
    leetcode 257. Binary Tree Paths
    leetcode 694. Number of Distinct Islands
    ros使用时的注意事项&技巧2
    ros使用时的注意事项&技巧
  • 原文地址:https://www.cnblogs.com/miaomiaokaixin/p/11505949.html
Copyright © 2011-2022 走看看