前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Python关于文件读写的操作

Python关于文件读写的操作

原创
作者头像
Java学术趴
发布2022-07-15 00:23:20
4210
发布2022-07-15 00:23:20
举报
文章被收录于专栏:Java全栈·Java全栈·

1. 文件操作——写操作

1.1 W模式使用字符串直接的写数据

# 文件的操作
# 打开文件。第一个参数是路径信息,第二个参数是打开该文件的模式。
# 使用w模式,当这个文件存在的时候会进行覆盖,当问价不存在的时候会创建一个新的文件
# 使用 open() 函数打开一个文件其返回是一个文件对象
# 注意:此时默认使用的编码格式是 GBK,IDEA中使用的是UTF-8,会出现中文乱码的问题
#      所以在开发中我们一般使用第三个参数指定编码的类型
fileObject = open('./Test.txt','w',encoding='utf-8')
​
# 先向文件中写入数据
# fileObject.write('在苍茫的大海上')
​
# 当我们再次执行的时候,因为此时使用的 w 模式,所以会将上一次产生的文件覆盖掉
# 也就是使用 w 模式每次都会新创建一个文件
fileObject.write('狂风卷积着乌云')
​
# 此时写入的数据还存储在内存中,需要把数据永久的存储到硬盘中,此时调用关闭文件的方法
# 这个关闭文件的方法就可以把帮助我们将文件进行永久的保存并且关闭文件
fileObject.close()

1.2 WB模式使用二进制的形式写数据

# WB形式:和W模式一样,只是存储的方式不一样(一个以字符串一个以二进制)
# 以二进制的形式来写数据,其他的和上面的原理一样。这种形式不能直接给定编码的格式,在写数据的时候在指定
fileObject2 = open('Test2.txt', 'wb')
# 指定其中的编码格式。此时需要使用 str.encode() 方法来执行写入数据的编码格式
fileObject2.write('以二进制的形式写入数据'.encode('utf-8'))
# 保存并关闭
fileObject2.close()

1.3 A模式使用字符串的形式写数据

# A形式:没有文件的时候会创建,当存在同名文件的时候会进行追加数据
fileObject3 = open('Test3.txt', 'a', encoding='utf-8')
fileObject3.write('新建文件')
fileObject3.write('追加数据')
fileObject3.close()

1.4 AB模式使用二进制形式写数据

# AB形式:和A的原理是一样的,只是写入数据的方式不同(一个以字符串,一个以二进制)
fileObject4 = open('Test3.txt', 'ab')
fileObject4.write('二进制形式'.encode('utf-8'))
fileObject4.write('追加数据')
fileObject4.close()

2. 文件操作——读操作

2.1 读取文件

  • 被读取文件的内容

读取全部以及按照指定字符数读取

# 读取文件
# 使用 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() 

3. with上下文管理

  • with语句,不管在处理文件过程中是否发生异常,都能保证 with 语句执行完毕后关闭已经打开的文件句柄。
  • 其实就是,使用这个 with 进行管理之后他会自动的帮助我们关闭文件,防止我们忘记调用 fileObj.close()方法
# with 上下文管理对象
# 此时 fileObj 就是读取文件后返回的文件操作对象
# 使用 with 之后,就不需要我们自己手动的来调用 close() 关闭文件对象
with open('Test.txt', 'r', encoding='utf-8') as fileObj:
    print(fileObj.readline()) # 狂风卷积着乌云
    pass

总结:文件读的几种操作

read(r、r+、rb、rb+)

  • r、r+ : 只读文件,使用于读取普通的文本文件。
  • rb、rb+ : 适用于读取 文件、图片、视频、音频等格式的文件

write(w、w+、wb+、wb、a、ab、a+)

  • w、wb+、w+、wb : 每次写的时候都会创建一个新的文件,覆盖掉之前的文件。
  • a、ab、a+ : 在原有的文件基础上进行追加新的内容【文件末尾】,并不会每次都创建一个新的文件。

4. 实现文件备份的一个脚本

# 文件备份
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()

5. 文件位置定位

5.1 tell() 函数

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
5.2 turncate() : 截取源文件的内容
# 截取源文件
with open('Test.txt','r+',encoding='utf-8') as fileObj:
    # 截取前三个字符
    fileObj.truncate(3)
    print(fileObj.read())
    # abc
    pass
5.3 seek() : 将光标移动到文件中指定的位置
  • seek(offset,from) :有两个参数。 offset : 偏移量单位字节,负数是往回偏移,正数是往前偏移。 from:位置:0表示文件开头,1表示当前位置,2表示文件末尾。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1. 文件操作——写操作
    • 1.1 W模式使用字符串直接的写数据
      • 1.2 WB模式使用二进制的形式写数据
        • 1.3 A模式使用字符串的形式写数据
          • 1.4 AB模式使用二进制形式写数据
          • 2. 文件操作——读操作
            • 2.1 读取文件
              • 3. with上下文管理
                • 4. 实现文件备份的一个脚本
                  • 5. 文件位置定位
                    • 5.1 tell() 函数
                    • 5.2 turncate() : 截取源文件的内容
                    • 5.3 seek() : 将光标移动到文件中指定的位置
                相关产品与服务
                数据保险箱
                数据保险箱(Cloud Data Coffer Service,CDCS)为您提供更高安全系数的企业核心数据存储服务。您可以通过自定义过期天数的方法删除数据,避免误删带来的损害,还可以将数据跨地域存储,防止一些不可抗因素导致的数据丢失。数据保险箱支持通过控制台、API 等多样化方式快速简单接入,实现海量数据的存储管理。您可以使用数据保险箱对文件数据进行上传、下载,最终实现数据的安全存储和提取。
                领券
                问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档