zoukankan      html  css  js  c++  java
  • 文件操作

    • 文件句柄的创建

    使用open()创建一个文件句柄并返回。

    f = open('游戏人生',mode='r',encoding='utf-8')
    s = f.read()
    print(s)
    f.close()

    使用open()会造成经常忘记关闭文件造成错误。

    在文件操作过程中,如果忘记关闭文件,对文件操作的结果不会实时反映到文件中,只有文件关闭了,才会把改变文件。(我自己试的)

    为了避免忘记关闭文件或者是为了同时创建多个文件,可以使用with创建文件句柄。

    with open('游戏人生',mode='r',encoding='utf-8') as f, 
    open('漫画人生', mode='r', encoding='utf-8') as g:
        s = f.read()
        print(s)
        s1 = g.read()
        print(s1)

    with操作会自动关闭文件

    • 只读、只写与追加(mode='')

    可以在open的参数mode=‘模式’中设置文件打开的方式,分为只读,只写、追加,读写,写读,追加读。对应字母‘r’,'w','a','r+','w+','a+'

    只读模式表示文件只能读,如果对文件进行写操作会报错

    只写模式表示文件只能写,如果对文件进行读操作会报错(只写模式在打开文件时会把文件中的原数据全部清空)

    追加模式打开文件,会将光标自动定位到文件末尾,并只能写。

    读写模式打开会将光标是指在文件开头,写入时会替换文件中原来的数据,在写入操作后进行读的话只会返回违背修改的数据

    with open('游戏人生',mode='r+',encoding='utf-8') as f:
        f.write('文件')
        s = f.read()
        print(s)

    写读模式打开文件会直接将文件中的内容清空,然后写入数据,由于文件中原来的数据已经被全部删除,所以再对文件进行读操作会是空白。

    with open('游戏人生',mode='w+',encoding='utf-8') as f:
        f.write('文件')
        f.seek(0)  # 移动光标否则结果为空白
        s = f.read()
        print(s)

    追加读模式打开文件会将光标定位在文件结尾,然后进行读写操作(由于光标在文件末尾,所以直接读会是空白)

    with open('游戏人生',mode='a+',encoding='utf-8') as f:
        f.write('文件')
        f.seek(0)  # 移动光标否则结果为空白
        s = f.read()
        print(s)

    除了读模式不能写,写模式不能读意外,其他模式的区别仅仅在于光标的初始位置。

    •  以bytes格式操作文件

    在mode='模式b'中加入b即可将文件读取模式为以bytes格式读取文件,这种模式在处理非文本文件时会使用

    with open('游戏人生',mode='rb') as f:
        s = f.read()
        print(s)  # 输出结果为b'xe6x96x87xe4xbbxb6xe6x96x87xe4xbbxb6'

    由于是以bytes格式读写文件,所以不能设置编码方式

    •  文件的功能详解
    f.seek()  # 调整光标的位置
    f.tell()  # 返回光标的位置
    f.truncate()  # 截取文件
    f.readable()  # 确认文件是否可读
    f.writable()  # 确认文件是否可写
    f.readline()  # 一行一行的读文件
    f.readlines()  # 将文件的每一行作为列表的一个元素生成列表
    •  文件修改

    文件操作中没有修改操作,一般通过创建新的备份文件,删除源文件,再将备份文件重命名为原来的文件名实现的。

    '''将点绛唇中的错别字,千千改为纤纤
    点绛唇
    蹴罢秋千,起来慵整千千手。露浓花瘦,薄汗轻衣透。
    见客入来,袜刬金钗溜。和羞走,倚门回首却把青梅嗅。
    '''
    import os  
    with open('点绛唇','r',encoding='utf-8') as f,
            open('点绛唇.bak','w',encoding='utf-8') as f1:
        for line in f:
            if '千千' in line:
               line = line.replace('千千','纤纤')
            f1.write(line)
    os.remove('点绛唇')
    os.rename('点绛唇.bak','点绛唇')
  • 相关阅读:
    Json -- 语法和示例,javascript 解析Json
    平衡二叉树的实现原理
    递归:汉诺塔
    递归:这帮坑爹的小兔崽子
    函数:递归是神马
    函数:lambda表达式
    函数:内嵌函数和闭包
    函数:我的地盘听我的
    函数:灵活即强大
    函数:Python的乐高积木
  • 原文地址:https://www.cnblogs.com/baisexiaoxuanfeng/p/10502294.html
Copyright © 2011-2022 走看看