相关文章推荐
高大的茶壶  ·  国家知识产权局 公告 ...·  4 月前    · 
谦虚好学的脸盆  ·  卸任中国驻印尼大使,刚回国的陆慷履新中联部副部长·  1 年前    · 
刚毅的红金鱼  ·  Visual Studio 模板中的 ...·  1 年前    · 
小胡子的煎饼果子  ·  湾叔踩盘 | ...·  1 年前    · 
冷静的大熊猫  ·  Python3操作Excel常用库整理(xl ...·  2 年前    · 
Code  ›  文件写入
python open函数
https://web.suda.edu.cn/hejun/chapter10/python_10_3.html
知识渊博的闹钟
1 年前
Python 提供了如下 2 种函数,实现读取文件中数据的操作:
  • write() :该方法写入一个字符读或者写入一个字节串(注:必须以wb、ab等模式打开,英文数字等字节串可以直接写入,中文需要encode()之后写入);
  • writelines() : 该方法用于向文件中写入一序列的字符串或字节串,序列可以是列表、元组、字典、集合等;
  • Python中的文件对象提供了 write() 函数,可以向文件中写入指定内容。该函数的语法格式如下:

    file.write(string)

    其中,file 表示已经打开的文件对象;string 表示要写入文件的字符串(或字节串,仅适用写入二进制文件中)。

    注意,在使用 write() 向文件中写入数据,需保证使用 open() 函数是以 r+、w、w+、a 或 a+ 的模式打开文件,否则执行 write() 函数会抛出 io.UnsupportedOperation 错误。

    例如,创建一个 a.txt 文件,该文件内容如下:

    阿俊的Python程序设计教程
    http://web.suda.edu.cn/hejun/

    然后,在和 a.txt 文件同级目录下,创建一个 Python 文件,编写如下代码:
    1. f = open("a.txt", 'w')
    2. f.write("写入一行新数据")
    3. f.close()
    f = open("a.txt", 'w')
    f.write("写入一行新数据")
    f.close()
    前面已经讲过,如果打开文件模式中包含 w(写入),那么向文件中写入内容时,会先清空原文件中的内容,然后再写入新的内容。因此运行上面程序,再次打开 a.txt 文件,只会看到新写入的内容:

    写入一行新数据

    而如果打开文件模式中包含 a(追加),则不会清空原有内容,而是将新写入的内容会添加到原内容后边。例如,还原 a.txt 文件中的内容,并修改上面代码为:
    1. f = open("a.txt", 'a')
    2. f.write("\n写入一行新数据")
    3. f.close()
    f = open("a.txt", 'a')
    f.write("\n写入一行新数据")
    f.close()
    再次打开 a.txt,可以看到如下内容:

    阿俊的Python程序设计教程
    http://web.suda.edu.cn/hejun/
    写入一行新数据

    因此,采用不同的文件打开模式,会直接影响 write() 函数向文件中写入数据的效果。
    另外,在写入文件完成后,一定要调用 close() 函数将打开的文件关闭,否则写入的内容不会保存到文件中。例如,将上面程序中最后一行 f.close() 删掉,再次运行此程序并打开 a.txt,你会发现该文件是空的。这是因为,当我们在写入文件内容时,操作系统不会立刻把数据写入磁盘,而是先缓存起来,只有调用 close() 函数时,操作系统才会保证把没有写入的数据全部写入磁盘文件中。
    除此之外,如果向文件写入数据后,不想马上关闭文件,也可以调用文件对象提供的 flush() 函数,它可以实现将缓冲区的数据写入文件中。例如:
    1. f = open("a.txt", 'w')
    2. f.write("写入一行新数据")
    3. f.flush()
    f = open("a.txt", 'w')
    f.write("写入一行新数据")
    f.flush()
    打开 a.txt 文件,可以看到写入的新内容:

    写入一行新数据

    有读者可能会想到,通过设置 open() 函数的 buffering 参数可以关闭缓冲区,这样数据不就可以直接写入文件中了?对于以二进制格式打开的文件,可以不使用缓冲区,写入的数据会直接进入磁盘文件;但对于以文本格式打开的文件,必须使用缓冲区,否则 Python 解释器会 ValueError 错误。例如:
    1. f = open("a.txt", 'w',buffering = 0)
    2. f.write("写入一行新数据")
    f = open("a.txt", 'w',buffering = 0)
    f.write("写入一行新数据")
    运行结果为:

    Traceback (most recent call last):
      File "C:\Users\mengma\Desktop\demo.py", line 1, in <module>
        f = open("a.txt", 'w',buffering = 0)
    ValueError: can't have unbuffered text I/O

    write()写入汇总:

    with open("test.txt",mode='w') as fw:  # 文本方式读取
        fw.write("this is write test")
        fw.write("\n")
    with open("test.txt",mode='ab') as fw:  # 二进制方式读取
        s="中国人".encode()
        fw.write(s)
                
  • writelines( ) 函数
  • Python 的文件对象中,不仅提供了 write() 函数,还提供了 writelines() 函数,可以实现将字符串列表写入文件中。

    注意,写入函数只有 write() 和 writelines() 函数,而没有名为 writeline 的函数。

    例如,还是以 a.txt 文件为例,通过使用 writelines() 函数,可以轻松实现将 a.txt 文件中的数据复制到其它文件中,实现代码如下:
    复制纯文本复制
    1. f = open('a.txt', 'r')
    2. n = open('b.txt','w+')
    3. n.writelines(f.readlines())
    4. n.close()
    5. f.close()
    f = open('a.txt', 'r')
    n = open('b.txt','w+')
    n.writelines(f.readlines())
    n.close()
    f.close()

    执行此代码,在 a.txt 文件同级目录下会生成一个 b.txt 文件,且该文件中包含的数据和 a.txt 完全一样。
    需要注意的是,使用 writelines() 函数向文件中写入多行数据时,不会自动给各行添加换行符。上面例子中,之所以 b.txt 文件中会逐行显示数据,是因为 readlines() 函数在读取各行数据时,读入了行尾的换行符。

    writelines()写入汇总:

    with open("test.txt",mode='w') as fw:  # 文本方式写入
        seq=('1101', '张三', '20', '男')    # 必须写入全是字符串
        fw.writelines(seq)
    with open("test.txt", "wb") as fw:   # 二进制方式写入
        seq = {'a':b"ffh4556 1\n", 'b':b"dfgr2\n",'c':b"1213"}
        fw.writelines( seq.values() )
                
  • 例:利用write( )方法将九九乘法表按照如下格式输入到文件中
  • with open('multiplication.txt', 'w') as f:
        for i in range(1, 10):
            for j in range(1, i + 1):
                result = str(j) + '*' + str(i) + '=' + str(i * j) + '\t'
                print(result, end='')
                f.write(result)
            print()
            f.write('\n')
                
  • 例:利用print()方法将九九乘法表按照如下格式输入到文件中
  • with open('multiplication.txt', 'w') as f:
        for i in range(1, 10):
            for j in range(1, i + 1):
                result = str(j) + '*' + str(i) + '=' + str(i * j) + '\t'
                print(result, end='',file=f)
            print(file=f)
                
  • 例:writelines( )方法,将诗歌《静夜思》的内容按行写入文件“poet.txt”中,并且要求编码格式为utf8,同时需要判断文件夹是否存在,如果不存在则先创建文件夹后再写入
  • import os
    poet = ["静夜思\n", "作者:李白\n",
            "床前明月光,\n", "疑是地上霜,\n",
            "举头望明月,\n", "低头思故乡。"]
    path = "E://Python教材例子"
    if not os.path.exists(path):
        print("文件夹不存在,先创建文件夹!")
        os.makedirs(path)
        print("文件夹创建成功!")
    f = open("E://Python教材例子//poet.txt", 'w', encoding="utf8")   # utf-8
    f.writelines(poet)
    f.close()
    print("写入成功!")
    
     
    推荐文章
    高大的茶壶  ·  国家知识产权局 公告 国家知识产权局关于2025年度专利代理师资格考试的公告(第622号)
    4 月前
    谦虚好学的脸盆  ·  卸任中国驻印尼大使,刚回国的陆慷履新中联部副部长
    1 年前
    刚毅的红金鱼  ·  Visual Studio 模板中的 NuGet 包 | Microsoft Learn
    1 年前
    小胡子的煎饼果子  ·  湾叔踩盘 | 地铁4号线北沿线:合正观澜汇·二期;锦顺星苑_龙华
    1 年前
    冷静的大熊猫  ·  Python3操作Excel常用库整理(xlrd/xlwt,openpyxl,xlwings和xlsxwriter) - 知乎
    2 年前
    今天看啥   ·   Py中国   ·   codingpro   ·   小百科   ·   link之家   ·   卧龙AI搜索
    删除内容请联系邮箱 2879853325@qq.com
    Code - 代码工具平台
    © 2024 ~ 沪ICP备11025650号