c++ 内存文件 创建 读写_文件操作开始啦

在我们日常生活中有很多类型的文件,例如:.txt文件、.doc文件、.jpg以及.png文件。我们对这些文件的操作一般都是,创建、打开、添加内容或者追加内容进去。或者把文件内容复制到另一个文件中。

那么用程序如何实现以上的那些操作呢?

打开文件

在python中打开一个文件用open()方法。

实例:

open('文件名','访问模式')
常用的三种模式:w、r、a
f = open('a.txt','w')   # 'w表示' 以只写的方式打开  不存在就会自动创建一个文件
f = open('a.txt','r')   # 'r表示' 以只读的方式打开  被读取的文件一定要存在
f = open('a.txt','a')   # 'a表示' 以追加的方式打开 被追加的文件不一定要存在,不存在就会自动创建一个文件

其他访问模式

2d98eaf584f665372288a7f5513690c7.png

关闭文件

用close()方法

f = open('a.txt','w')
f.read()
f.close()
需要关闭的原因是,有时候要被写入文件的数据,会在内存里面
并没有马上就写入文件中,所以,用close()方法保证数据被写进去

文件读写实例

f = open('cc.txt','r')
print(f.read())  #f.read()一次性把所有的字符都读出来
f.close()
结果:
   Yesterday when I was young
昨日当我年少轻狂
The tasting of life was sweet
生命的滋味是甜的
As rain upon my tongue
tasting
I lived by night and shunned the naked light of day
And only now I see how the time ran away
tasting

往文件中写入数据
f = open('cc.txt','w')
f.wite('hahahahah)
f.close()

按 'w '方式写入,会覆盖原来的文件里面有的数据。

f = open('cc.txt','r')
f.read()是所有字符都读取出来,那f.read(num)作用是啥? #num为数字
f.read(1) 从开始处向后读取一个字节
结果:
   h
f.read(num) 从开始处向后读取num个字节

f.readlins()  返回值是一个列表,列表元素为文件中的每行内容
结果:
  ['hahahahahn', 'hahahahahn', 'hahahahahn', 'hahahahah']
  
  f.readline()  #一次只读取文件的一行
每进行依次文件读操作,文件都是从上一次读取到的位置开始读写,而不是从头开始

大文件的读写操作

如果我们要读取100G的文件那要怎么做呢?读文件都是把内容读进内存里面去,但是我们自己的电脑内存都有限。一次不可能把100G全部读进去,用read()和readlines()以及readline()这些方法还可靠吗?

实现:

假设读取100G文件
f = open('c.text','r')
f.read()  # 这是一次全部读出,直接用这方法不可行。
f.readline()  #一次读取一行,但是假如这100G的内容就只写在了一行,那这个方法也不可靠
f.readlines() #一次全读出来返回一个列表,每行当作列表的一个元素,所以这方法也是不可行的           

读取大文件思想:一次读一点点,循环读取。
f = open('cc.txt','r')
while True:          
   file = f.read(num)    #循环读取,每次读取num个字节
   if len(file) == 0:    当读取的长度为0时,代表读取完。当不知道文件有多大时,也可以用这个方法读取
       break

定位读写: 就是直接从指定位置开始读写,用 seek()方法。

在生活中,我们经常会遇到定位这种情况,开车使用导航需要定位,苹果手机的找回也需要定位。那么在文件中如何进行定位读写呢?

seek(offset,from)
offset:偏移量
from: 0表示文件开头,1 表示当前位置  2 表示文件末尾
f = open('cc.txt','r')
f.seek(5,0)  #表示从开头跳过五个字节
a=f.read()
parint(a)
f.close()
结果:
ahah

hahahahah   #很明显跳过来第一行前五个字节再读取整个文件

获取文件指针的当前所在的位置 tell()方法
f = open('cc.txt','r')
f.seek(5,0)
a = f.tell()
print(a)
f.close()
结果:
  5

文件相关操作

使用os模块中的一些方法

import os
#文件重命名
os.rename("小邮差.txt", "小邮差-最终版.txt")
#删除文件
os.remove("小邮差.txt")
#创建文件夹
os.mkdir("小邮差")
#删除文件夹
os.rmdir("小邮差")

不因每天发一篇而去降低文章质量,质量永远第一

喜欢本文的小伙伴, 欢迎转发本文给身边需要的人

欢迎大家关注公众号---->小邮差

文章内容若有问题,希望大家不吝指出, 可以在公众号与小邮差交流哦

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值