zoukankan      html  css  js  c++  java
  • python基础之文件基本操作

    代码的存储可以通过定义变量来存储,但是变量存储代码,这只能存在内存中,一旦关闭,原先的代码就会消失,所以我们需要把代码通过文件的形式,永久将代码保存在硬盘中,所以需要学会文件的基本操作。

    文件的只读和只写模式分别为r和w

    1. 先建立一个文件demo1.txt , 并写入内容

    查看demo1文件中的内容

    # 我们在桌面上操作文件:1.打开文件;2.读取文件; 3.关闭文件
    f = open("demo1.txt", "r", encoding="utf-8")
    #
    f = open(r"C:UsersdylDesktopdemo3.txt", "r", encoding='utf-8') r代表转义,后面的r代表read模式
    print(f.read()) 
    f.close()
    """
    1. 打开文件操作 demo1.txt 文件的路径 文件的路径可以是绝对路径,也可以是相对路径,绝对路径比较死,如果文件的路径发生了改变,那么打开文件的路径就要相对地改,所以我们尽量用相对路径
    如果是绝对路径,需要用r""转义符 "r" 是只读模式 encoding 是指定文件的编码方式 如果桌面文件的编码方式与指定的编码方式不一样,那么就会报错 (unicode error) 'unicodeescape' codec can't decode bytes in position 2-3: truncated UXXXXXXXX escape 2.读取文件内容 读取文件内容的方法:read 调用方法 变量 f.read() 打印读取的内容 print(f.read()) 3. 关闭文件
    文件对象打开后,一定要记得关闭,如果不关闭,这个文件就会占用操作系统的资源,而且操作系统同一时间打开的文件数量是有限的
    f.close() 

    """

    2. 只写模式

    # 只写入模式 w
    s = """
    春晓
    春眠不觉晓
    处处闻笛鸟
    夜来风雨声
    花落知多少
    """
    
    f = open("demo1.txt", "w", encoding="utf-8")
    # writelines 和write的用法相似,但是writelines可以传入字符串,也可以传入字符序列,但是不能传入数字,每个元素之间如果要换行,就需要用 换行符,write只能传入字符串
    f.write(s) f.close()
    # 写入之后读取 f = open("demo1.txt", "r", encoding="utf-8") print(f.read()) f.close()


    春晓
    春眠不觉晓
    处处闻笛鸟
    夜来风雨声
    花落知多少

    注意:文件对象打开后,一定要记得关闭,如果不关闭,这个文件就会占用操作系统的资源,而且操作系统同一时间打开的文件数量是有限的

    只读和只写时,都是先将内容读或者写到缓存区里面,然后等缓存区的空间都满了之后,操作系统就会将内容写到硬盘里面,缓存区里面的内容每满一次,操作系统就会写一次。这样写的劣处就是,我们写的内容可能都没有写到硬盘里面,一旦断电,写的东西就会消失,所以我们需要flash,不用等操作系统来写,直接刷新缓存区,保存内容
    f = open("demo.txt", "w", encoding="utf-8")
    f.writelines(["China
    ", "World
    ", "Fuiture
    "])
    # 刷新缓存区,保存内容
    f.flush()
    f.close()
    
    f = open("demo.txt", "r", encoding="utf-8")
    print(f.read())
    f.flush()
    f.close()
    # 关闭语句f.close(),可以节省内存中缓存资源,所以这句一定要带上,但是每对文件增删改查一次,就需要写一次,这并不方便,with语句就可以省去这一步
    
    with open("demo1.txt", 'r', encoding='utf-8') as f:
        print(f.read())

    春晓
    春眠不觉晓
    处处闻笛鸟
    夜来风雨声
    花落知多少

    with只写进入

    # 关闭语句f.close(),可以节省内存中缓存资源,所以这句一定要带上,但是每对文件增删改查一次,就需要写一次,这并不方便,with语句就可以省去这一步
    
    with open("demo1.txt", 'r', encoding='utf-8') as f:
        print(f.read())
    
    s2 = """
    满城尽带黄金甲,不破楼兰终不还。
    """
    with open("demo1.txt", 'w', encoding='utf-8') as f:
        f.write(s2)
    
    with open('demo1.txt', 'r', encoding='utf-8') as f:
        print(f.read())

    满城尽带黄金甲,不破楼兰终不还。

    3. tell和seek

    tell() 以bytes为单位,从文件头到当前指针所在的位置
    seek() 以bytes为单位,光标的偏移量
    s3 = s2.encode()
    print(s3)  # b'
    xe6xbbxa1xe5x9fx8exe5xb0xbdxe5xb8xa6xe9xbbx84xe9x87x91xe7x94xb2xefxbcx8cxe4xb8x8dxe7xa0xb4xe6xa5xbcxe5x85xb0xe7xbbx88xe4xb8x8dxe8xbfx98xe3x80x82
    '
    # utf-8编码中文字符,是三个字节编码一个中文字符
    with open("demo1.txt", 'w', encoding='utf-8') as f:
        f.write(s2)
    
    with open('demo1.txt', 'r', encoding='utf-8') as f:
        print(f.tell())   # 0  光标的位置
        print(f.read())
        print(f.tell())   # 52  光标的位置
        f.seek(0)   # 将光标移到最前面
        print(f.tell())  # 0

    这个时候,文件已经建立,如果文件不存在,那么

    r和w  表示只读和只写  文件存在的情况下,写入会覆盖掉原先的内容
    with open("demo.txt", 'r', encoding='utf-8') as f:
        print(f.tell())
        print(f.read())
    
    # w只写, 文件已经存在,会覆盖掉原先的内容,如果文件不存在,就会创建一个文件
    with open("demo.txt", "w", encoding="utf-8") as f:
        f.write("中国加油")
    
    with open("demo2.txt", 'w', encoding='utf-8') as f:
        f.write("hello world!!!")

    4. 非文本内容的基本操作,rb和wb

    rb和wb 非文本的只读和只写
    
    li = ""
    with open("函数内循环.png", "rb") as f: # 这本身就是二进制的,所以不用指定编码格式
    # 二进制我们一般不会打印出来,而是用一个变量来接收,存起来
        li = f.read()
    
    # 将这个变量写入到一个新的图片文件里面
    with open("test.png", "wb") as f:
        f.write(li)

    5. a 追加模式

    如果文件原本就存在,就在原本的文件的末尾加入内容,如果文件不存在,那么创建新文件,并写入内容

    a 追加
    
    with open("demo.txt", "r", encoding="utf-8") as f:
        print(f.read())
    
    with open("demo.txt", "a", encoding="utf-8") as f:
        f.write("
    将军百战死")
    
    with open("demo.txt", "r", encoding="utf-8") as f:
        print(f.read())

    6. r+    w+   a+

    r+ w+ a+
    """
    r+: 读写,指针在文件开头
    w+:  读写,文件存在的话,那么写入内容,如果文件不存在,那么创建文件新文件,写入内容
    a+:  读写,文件存在的话,则在文件末尾追加,如果文件不存在,那么创建新文件,并写入内容
    """
    
    with open("demo2.txt", "r+", encoding="utf-8") as f:
    
        f.write("
    hello world!!!   come on!!!")
        print(f.read())
        print(f.tell())
    
    with open("demo3.txt", "w+", encoding="utf-8") as f:
        f.write("
    你好世界")
        print(f.read())
    
    with open("demo1.txt", "a+", encoding="utf-8") as f:
        f.write("
    中国你好")
        print(f.read())
  • 相关阅读:
    自定义事件的触发dispatchEvent
    [转]ProxmoxVE 干掉 VMware
    【转】怎么去阅读Chromium的源码?
    Delphi内存专题
    Delphi 线程同步技术(转)
    【纸模】六角大王 Super 5.6 CHS 简体中文版 U20080725+[手册]窗口与工具的概要(PDF格式)
    ReSharper反编译C#类库
    CS DevExpress程序启动(主窗体初始化优化)
    【EasyNetQ】- 发布/订阅模式
    Intellij Idea调试java文件时 怎么跳过class文件?
  • 原文地址:https://www.cnblogs.com/zgzeng/p/12238542.html
Copyright © 2011-2022 走看看