# 文件的操作
# 打开文件。第一个参数是路径信息,第二个参数是打开该文件的模式。
# 使用w模式,当这个文件存在的时候会进行覆盖,当问价不存在的时候会创建一个新的文件
# 使用 open() 函数打开一个文件其返回是一个文件对象
# 注意:此时默认使用的编码格式是 GBK,IDEA中使用的是UTF-8,会出现中文乱码的问题
# 所以在开发中我们一般使用第三个参数指定编码的类型
fileObject = open('./Test.txt','w',encoding='utf-8')
# 先向文件中写入数据
# fileObject.write('在苍茫的大海上')
# 当我们再次执行的时候,因为此时使用的 w 模式,所以会将上一次产生的文件覆盖掉
# 也就是使用 w 模式每次都会新创建一个文件
fileObject.write('狂风卷积着乌云')
# 此时写入的数据还存储在内存中,需要把数据永久的存储到硬盘中,此时调用关闭文件的方法
# 这个关闭文件的方法就可以把帮助我们将文件进行永久的保存并且关闭文件
fileObject.close()
# WB形式:和W模式一样,只是存储的方式不一样(一个以字符串一个以二进制)
# 以二进制的形式来写数据,其他的和上面的原理一样。这种形式不能直接给定编码的格式,在写数据的时候在指定
fileObject2 = open('Test2.txt', 'wb')
# 指定其中的编码格式。此时需要使用 str.encode() 方法来执行写入数据的编码格式
fileObject2.write('以二进制的形式写入数据'.encode('utf-8'))
# 保存并关闭
fileObject2.close()
# A形式:没有文件的时候会创建,当存在同名文件的时候会进行追加数据
fileObject3 = open('Test3.txt', 'a', encoding='utf-8')
fileObject3.write('新建文件')
fileObject3.write('追加数据')
fileObject3.close()
# AB形式:和A的原理是一样的,只是写入数据的方式不同(一个以字符串,一个以二进制)
fileObject4 = open('Test3.txt', 'ab')
fileObject4.write('二进制形式'.encode('utf-8'))
fileObject4.write('追加数据')
fileObject4.close()
读取全部以及按照指定字符数读取
# 读取文件
# 使用 r 模式来读取文件,需要指定读取文件的编码格式。(如果文件是GBK格式就需要使用GBK的编码格式读取)
fileObject = open('Test.txt', 'r', encoding='utf-8')
# 读取文件中的所有数据
# print(fileObject.read())
# 狂风卷积着乌云
# 读取指定字符数的数据
print(fileObject.read(2))
# 狂风
# 当再次读取这个文件的时候会接着上次的进行读取
print(fileObject.read())
# 卷积着乌云
# 当文件中的所有数据都已经读取出来之后在进行读取的话,获取到的就是一个空数据
print(fileObject.read())
# 空
一行一行读取
# 读取文件
# 使用 r 模式来读取文件,需要指定读取文件的编码格式。(如果文件是GBK格式就需要使用GBK的编码格式读取)
fileObject = open('Test.txt', 'r', encoding='utf-8')
# 一行一行的读取文件
print(fileObject.readline())
# 狂风卷积着乌云
print(fileObject.readline())
# 在大海与乌云之间
# 在读取完文件之后一定要关闭文件,防止出现内内存泄漏
fileObject.close()
一次读取所有的行
# 读取文件
# 使用 r 模式来读取文件,需要指定读取文件的编码格式。(如果文件是GBK格式就需要使用GBK的编码格式读取)
fileObject = open('Test.txt', 'r', encoding='utf-8')
# 一行一行读取,将所有的行数据存储到一个列表中
print(fileObject.readlines())
# ['狂风卷积着乌云\n', '在大海与乌云之间']
fileObject.close()
# with 上下文管理对象
# 此时 fileObj 就是读取文件后返回的文件操作对象
# 使用 with 之后,就不需要我们自己手动的来调用 close() 关闭文件对象
with open('Test.txt', 'r', encoding='utf-8') as fileObj:
print(fileObj.readline()) # 狂风卷积着乌云
pass
总结:文件读的几种操作
read(r、r+、rb、rb+)
write(w、w+、wb+、wb、a、ab、a+)
# 文件备份
def copyFile():
"""
复制一个新的文件
:return:
"""
fileName: str = input('请输入文件名:')
# 拆分文件名
oldFileName: list = fileName.split('.')
# 组装新的文件名
newFileName: str = oldFileName[0] + '_备份' + oldFileName[1]
# 打开旧的文件并且读取
oldObj = open(fileName, 'r', encoding='utf-8')
newObj = open(newFileName, 'w', encoding='utf-8')
newObj.write(oldObj.read())
oldObj.close()
newObj.close()
pass
# 调用方法实现文件备份
copyFile()
tell() 函数 : 获取要读取文件此时光标所在的位置。读取的位置和编码格式有关(gbk一个汉字占两个字节,utf-8一个汉字占用三个字节)
读取文件的内容:全是中文
# 文件定位
# tell() :获取当前读取文件光标所在的位置
fileObj = open('Test.txt', 'r', encoding='utf-8')
print(fileObj.read(3))
# 在苍茫
print(fileObj.tell())
# 9 因为我们使用的 utf-8 格式来读取文件,一个汉字相当于三个字符,所以输出为9
# r 模式会从上一次的位置继续读取
print(fileObj.read(2))
# 的大
print(fileObj.tell())
# 15
读取文件内容:全是英文
# 文件定位
# tell() :获取当前读取文件光标所在的位置
fileObj = open('Test.txt', 'r', encoding='utf-8')
# 先读取三个字符,然后使用tell()查看光标此时是不是在第三个字符处
print(fileObj.read(3))
# 3
print(fileObj.tell())
# r 模式会从上一次的位置继续读取
print(fileObj.read(2))
# de
print(fileObj.tell())
# 2
# 截取源文件
with open('Test.txt','r+',encoding='utf-8') as fileObj:
# 截取前三个字符
fileObj.truncate(3)
print(fileObj.read())
# abc
pass
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。