20190918 文件处理

一、文件处理

1.什么是文件处理

修改存储的信息

2.什么是文件

操作系统提供的虚拟概念,存储信息

3.操作系统的流程

1.打开文件

open方式

open ('文件的路径',‘打开方式’,'字符编码格式'):
打开方式有三种:
r  只读模式
w  写入模式,会清空原有的内容,没有则会创建
a  追加内容,在最后加入内容,没有会创建。

文件打开的方式有三种,打开时将打开方式固定打开时的字符编码

2.读取/修改文件

.write() 			#是写入文件
.read()			   #读取文件 

可以在write()填入想要添加的内容,但控制写入的方式是 r w a模式

3.保存

f.flush() #快速保存,可以不使用

4.关闭文件

f.close() # 告诉操作系统关闭文件

二、文件的打开

1.两种打开模式

t 文本模式

用于文本的操作

b 二进制模式

一般适用图片/视频/音频的保存。

f = open (r'1.txt','rb')
 # 打开模式 注意设置为b  

以上两种都不能单独使用,需要和r/w/a配合连用,注意编码不需要更改。

2.文件打开的三种方式

读取、写入、追加写入

r模式

r ==》 read ==》 只读

在地址前加r 可以使地址内字符无效化

f = open(r'文件的地址内容','r',encoding='utf-8')
f.write('你好,世界')
#(直接报错 not writable)

仅做了解

readline		# 一行一行的读取

readlines		# 读取所有行放入列表

如果想循环读出文本内容

for i in f.read():		# 循环出一个一个字符
	print(i)
for i in f:			# 循环出一行行,节省内存
    print(i)

w模式

w==》 write ==》只写(清空原本的文件后写入,如果没有则创建再写)

f = open(r'1.txt','r',encoding='utf-8')
f.write('用心创造快乐')
# 清空文件然后写入

仅做了解

writelines

f.writelines(['abc','edf','gbk'])
# 自动拼接列表元素,一行写入
#	abcedfgbk

a模式

追加写入,会在文档末尾写入,不可读

f = open(r'1.txt','a',encoding='utf-8')
f.write('没钱玩你麻痹')
# 在文本最后追加

3.绝对路径与相对路径

绝对路径

从盘符开始,一般是 C;D;

相对路径

执行文件(当前运行的文件)的文件夹下的文件名。

未来的项目尽量使用相对路径。

4.with 管理上下文

with 提供了一个自动关闭文件的方法(解除了操作系统的占用)

with open ('1.py','r',encoding='utf-8') as f:
    date = f.read()
    # 读取的文件放在python的内存中
    print(f.read)
    # with 会自动关闭系统占用

可读又可写(仅做了解)

可写可读 r+

# with open('test.py', 'r+', encoding='utf8') as fr:
#     # print(fr.readable())
#     # print(fr.writable())
#     fr.write('高级')  # 光标在文件头部,覆盖后面的字符


可写可读 w+ 和 w 没有任何区别
# with open('test.py', 'w+', encoding='utf8') as fw:
#     print(fw.readable())
#     print(fw.writable())

可写可读 a+ a模式默认光标在尾部
# with open('test.py','a+',encoding='utf8') as fw:
#     print(fw.readable())
#     print(fw.writable())
#     fw.seek(0,0)
#     print(fw.read())


# 综上:如果你真的有即可读又可写的需求,用两种不同的模式打开两次文件

三、光标的移动

1.文件指针

文件指针用于标明文件读写的起始位置。

文件指针概念示意图

通过移动文件指针的位置,再借助 read() 和 write() 函数,就可以轻松实现,读取文件中指定位置的数据(或者向文件中的指定位置写入数据)。

注意,当向文件中写入数据时,如果不是文件的尾部,写入位置的原有数据不会自行向后移动,新写入的数据会将文件中处于该位置的数据直接覆盖掉。

2.tell()函数

tell() 函数用于判断文件指针当前所处的位置

file.tell() file表示文件对象

# 文本a的内容是  http://c.biancheng.net
f = open("a.txt",'r')
print(f.tell())      # 0
print(f.read(3))	# htt
print(f.tell())		# 3
可以看到,当使用 open() 函数打开文件时,文件指针的起始位置为 0,表示位于文件的开头处,当使用 read() 函数从文件中读取 3 个字符之后,文件指针同时向后移动了 3 个字符的位置

3.seek()函数

seek() 函数用于移动文件指针到文件的指定位置。

file.seek(offset[, whence])

  • file:表示文件对象;
  • whence:作为可选参数,用于指定文件指针要放置的位置,该参数的参数值有 3 个选择:0 代表文件头(默认值)、1 代表当前位置、2 代表文件尾。
  • offset:表示相对于 whence 位置文件指针的偏移量,正数表示向后偏移,负数表示向前偏移。

文件修改

缓存文件的原理

文件没有修改一说,只有覆盖。(缓存文件的原理)
创建一个新的文件修改,并复制,覆盖旧的文件。
# 同时打开多个文件
with open('1.py','rt',encoding='utf-8') as fr , open('2.py','wt',encoding='utf-8') as fw:
    #  用逗号隔开open的两个文件
    
    data = fr.read()
    # 读取1(fr)里的内容并赋值变量  data

    data = data.replace('快乐','抄袭')
	# 这里是修改操作,将字符替换。
    
    fw.write(data)
    # 2号文件(fw)写入1号(fr)的内容
    #  此时自动创建1.py文件,并写入更改后的1.py内容
    
import os
# 导入os模块
os.remove('1.py')
# 删除原文件
os.renames('2.py','1.py')
# 重命名新文件
原文地址:https://www.cnblogs.com/fwzzz/p/11544647.html