文件操作

  • 文件句柄的创建

使用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','点绛唇')
原文地址:https://www.cnblogs.com/baisexiaoxuanfeng/p/10502294.html