文件处理

1 什么是文件?

文件是操作系统为用户或应用程序提供的一个读写硬盘的虚拟单位
文件的操作核心就:读、写
即我们只需要对于进行读写操作,就是对操作系统发起请求,然后由操作系统将用户或者应用程序
对文件的读写操作转换成具体的硬盘指令(比如控制盘片转动,控制机械手臂移动来读写数据)

2 为什么要有文件?

因为内存无法永久保存数据,但凡我们想要永久保存数据都需要保存到硬盘中,
而操作文件就可以实现对硬件的操作

3 如何用文件

'''
# name='egon'
# pwd='123'
# 把内存中的数据存储到硬盘中去

# l=[1,2,3]
# l.append(4)
# l.append(5)
# print(l)
把硬盘中的数据读到内存中
#rawstring
f=open(r'E:\SH_fullstack_s2\day08\a.txt',mode='r') # 向操作系统发起请求,要求操作系统打开文件,占用操作系统的资源
# f1=10
# f2='aaaa'
# f2.index()
# print(f)
# y=2
data=f.read() # 向操作系统打开发起读请求,会被操作系统转成具体的硬盘操作,将内容由硬盘读入内存
print(data)

# del f
f.close() #向操作系统发起请求,要求操作系统关闭文件,回收系统资源
# print(f)
# f.read()
总结:
1、打开文件
2、读写
3、关闭

4 文件的打开模式

# 控制读写文件内容的结果有两种:t模式text,b模型bytes
#注意:
#1、t与b这两种模式均不能单独使用,都需要与r/w/a之一连用
#2、默认的内容格式是t
#3、只有文本文件才能用t模式,也只有文本文件才有字符编码的概念



# 操作文件的基础模式有三种:
#1、r,默认的
#2、w
#3、a


#r:read,只读模式
#1、只能读,不能写
#2、在文件不存在时,会报错,在文件存在的时候会将文件指针移动到开头
# f=open(r'b.txt',mode='rt',encoding='utf-8')
# data1=f.read()
# print('第一次:',data1)
# # print(type(data1))
#
# # data2=f.read()
# # print('第二次:',data2)
# f.close()

# f=open(r'b.txt',mode='rt',encoding='utf-8')
# data2=f.read()
# print('第二次:',data2)
# f.close()

# f=open(r'b.txt',mode='rt',encoding='utf-8')
# # print(f.readable())
# # print(f.readline(),end='')
# # print(f.readline(),end='')
#
# lines=f.readlines()
# print(lines)
# f.close()
#



#w:只写模式
#1、只能写,不能读
#2、在文件不存在时会创建空文件,在文件存在的时候会将文件内容清空
# f=open(r'c.txt',mode='wt',encoding='utf-8')
# # print(f.readable())
# # f.read()
# # f.write('你好啊我的天\n你好啊我的地\n啊啊啊啊啊啊\n')
# # f.write('4444\n')
# # f.write('5555')
#
# lines=['1111\n','2222\n','33333\n']
# # for line in lines:
# # f.write(line)
# f.writelines(lines)
#
# f.close()


#a:只追加写模式
#1、只能写,不能读
#2、在文件不存在时会创建空文件,在文件存在的时候会将指针移动到文件末尾

# f=open('d.txt',mode='at',encoding='utf-8')
# print(f.readable())
# f.read()

# f.write('555555\n6666\n')
# f.writelines(['77777\n','8888888\n','999999999\n'])

# f.close()

#b:二进制模式
#注意:
#1、一定不能指定字符编码,只有t模式才与字符编码有关
#2、b是二进制模式,是一种通用的文件读取模式,因为所有的文件在硬盘中都是以二进制形式存放的

# f=open('egon.jpg','rb')
# data=f.read()
# print(type(data))
# f.close()

# f=open('oldsiji.mp4','rb')
# data=f.read()
# f.close()

# f=open(r'F:\oldsiji.mp4','wb')
# f.write(data)
# f.close()


# 循环读
# f=open('d.txt','rt',encoding='utf-8')
# for line in f:
# print(line)
# f.close()


# f=open('d.txt','rb')
# for line in f:
# print(line)
# f.close()

# f=open('oldsiji.mp4','rb')
# for line in f:
# print(line)
# f.close()


# f=open('e.txt','wb')
# f.write('你好啊'.encode('utf-8'))
#
# f.close()


# f=open('e.txt','ab')
# f.write('大家好,我是egon'.encode('utf-8'))
# f.close()


# 上下文管理
# with open('e.txt','rb') as f,open('j.txt','wt',encoding='utf-8') as f1:
# #文件的操作
# src_data=f.read()
# res=src_data.decode('utf-8')
# # print(res,type(res))
# f1.write(res)



with open('e.txt','rb') as f,\
open('j.txt','wb') as f1:
#文件的操作
f1.write(f.read())

5 控制文件指针移动






# f.seek(offset,whence)
#offset代表文件的指针的偏移量,单位是字节bytes
#whence代表参考物,有三个取值
#0:参照文件的开沟
#1:参照当前文件指针所在位置
#2: 参照文件末尾
#ps:快速移动到文件末尾f.seek(0,2)

#强调:其中whence=1和whence=2只能在b模式下使用
# f=open('c.txt',mode='rt',encoding='utf-8')
# # f.seek(9,0)
# print(f.tell()) # 每次统计都是从文件开头到当前指针所在位置
# # print(f.readline())
#
# f.close()


# f=open('c.txt',mode='rb')
# f.readline()
# f.seek(6,1)
# print(f.readline().decode('utf-8'))
# print(f.tell())
# f.close()


# f=open('c.txt',mode='rb')
# f.seek(-9,2)
# print(f.readline().decode('utf-8'))
# print(f.tell())
# f.close()



# 了解(**)
# 只有在t模式下的read(n),n代表的是字符个数,除此之外其他但凡涉及文件指针的移动都是以字节为单位的
# f=open('c.txt',mode='rt',encoding='utf-')
# print(f.read(3))
# f.close()

# f=open('c.txt',mode='rb',)
# print(f.read(3).decode('utf-8'))
# f.close()


# ab a+b r+b
f=open('b.txt',mode='at',)
f.truncate(9) # 参照物永远是文件开头
f.close()

6 文件修改

# with open('c.txt','r+t',encoding='utf-8') as f:
# f.seek(21,0)
# f.write('[我擦勒]')

#修改文件内容的方式一:
#思路:先将原文件内容一次性全部读入内存,然后在内存修改完毕后,再
#覆盖写回原文件
#优点:在修改期间,文件内容只有一份
#缺点:当文件过大的情况下或占用过多的内存空间

# with open('d.txt','rt',encoding='utf-8') as read_f:
# msg=read_f.read()
# msg=msg.replace('alex','xiang')
# # print(msg)
#
# with open('d.txt','wt',encoding='utf-8') as write_f:
# write_f.write(msg)

#修改文件内容的方式二:
#思路:
#1、以读的方式打开原文件,以写的方式打开一个新文件
#2、从原文件中循环读取每一行内容修改后写入新文件
#3、删除原文件,将新文件重命名为原文件的名字

#优点:同一时刻只有一行内容存在于内存中
#缺点:在修改期间,文件内容始终存在两份,但修改完毕后会只留一份
import os
with open('d.txt','rt',encoding='utf-8') as read_f,\
open('d.txt.swap','wt',encoding='utf-8') as write_f:
for line in read_f:
write_f.write(line.replace('xiang','ALEXSB'))

os.remove('d.txt') # 删除老文件
os.rename('d.txt.swap','d.txt')

转载于:https://www.cnblogs.com/chillwave/p/9133643.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值