文件处理
一 介绍
文件的概念:
我们都知道计算机由三个部分组成:应用软件,操作系统,硬件。而应用软件需要储存数据,必须要向操作系统提出请求,
操作系统会提供一个硬盘虚拟的感念。这个概念就是文件的概念!
二 在python3中
f=open('a.text.py',mode='r',encoding='utf-8')
如果我们要在python中打开一个文件,
首先,我们要输入路径,
其次,要输入以什么样的方式打开。这是我写的是mode=(‘r’)(意思是指读)
最后,我们要输入,用什么方式来编码的。“utf-8”
要阅读此文件
data=f.read()
最后一点要关闭文件(很重要!!!!)
(电脑是不知道要关的,应用软件关闭了。但是,在内存中还没关掉,这样导致会占内存。)
f.close()
但很多同学会忘记这一点,所以有with结构来帮助with open('a.text',' pass
with open('a.text','r') as read_f,open('a.text','w') as write_f
data=read_f.read()
write_f.write(data)
这样就不用f.close()来关闭文件了。
强调:
当我们f=(open。。。)一个软件的时候,如果我们没有为open指定编码,那么有可能会出现乱码。window系统默认是gbk,mac系统是utf-8。所以,要注意以什么编码方式存储,就用什么编码方式来打开。
二打开方式
1.打开句式:open(‘路径’,‘模式’)(针对文本模式)
f.open('a.text','r')
‘r’(文件只读,文件必须存在,如没有抛出异常)
‘w’(文件只可以写,不可以读,文件不存在,会自动创建,文件存在自动会清除)
‘a’ (文件不可以读,只可以追加,文件不存在则创建,文件存在会自动在末尾追加)
2.非文本模式)
我们只能用b模式,“b”模式存储方式是用字节方式来存储(可以存储文本模式,也可以存储图片.jgp模式,也可以存储视频.avi模式。但最大的区别就是不需要考虑字符编码)
‘rb’
‘wb’
‘aw’
读取内容是字节类型,写入时也是要字节类型。不能指定编码
#3 了解部分
“+”表示:可以同时读写某个文件
‘r+’:读写【可以读,可以写】
‘w+’:写读【可以写,可以读】
‘a+’:写读【可以写,可以读】
3.操作文件方法:
#掌握
f.read() #读取所有内容,光标移动到文件末尾
f.readline() #读取一行内容,光标移动到第二行首部
f.readlines() #读取每一行内容,存放于列表中
f.write('1111\n222\n') #针对文本模式的写,需要自己写换行符
f.write('1111\n222\n'.encode('utf-8')) #针对b模式的写,需要自己写换行符
f.writelines(['333\n','444\n']) #文件模式
f.writelines([bytes('333\n',encoding='utf-8'),'444\n'.encode('utf-8')]) #b模式
#了解
f.readable() #文件是否可读
f.writable() #文件是否可读
f.closed #文件是否关闭
f.encoding #如果文件打开模式为b,则没有该属性
f.flush() #立刻将文件内容从内存刷到硬盘
f.name
四 文件内光标移动;
一: read(3):
1. 文件打开方式为文本模式时,代表读取3个字符
2. 文件打开方式为b模式时,代表读取3个字节
(字符是元素,而字节是计量单位,类似于米,里面啊)
二: 其余的文件内光标移动都是以字节为单位如seek,tell,truncate
f.seek(3)
意思是移动了三个字节
注意:
1. seek有三种移动方式0,1,2,其中1和2必须在b模式下进行,但无论哪种模式,都是以bytes为单位移动的
2. truncate是截断文件,所以文件的打开方式必须可写,但是不能用w或w+等方式打开,因为那样直接清空文件了,所以truncate要在r+或a或a+等模式下测试效果
五 文件的修改
文件存在于硬盘,只存在覆盖,不存在修改怎么一说,我们平时看到的修改都是模拟出来的效果。有两种方式来实现:
第一种:将硬盘中的文件全部加载到内存中,在内存中可以修改,修改好之后在覆盖原文件上面。
import os with open('a.text',‘r') as read_f,open('a.text.swap','w') as write_f: data=read_f.read() data=data.replace('alex','sb') write_f.write(data) os.remove('a.text) os.rename('a.text.swap','a.text')
第二种:将硬盘中的文件一条一条读入内存,修改完毕之后写入新的文件,然后用新的文件来覆盖老的文件,实现修改。
import os
with open('a.text','r') as read_f,open('a.text.swap'.'w') as write_f:
for line in read_f:
if "alex " in line:
line=line.replace('alex','sb')
write_f.write(line)
os.remove('a.text')
os.rename('a.text.swap','a.text')
六 文件的复制
import sys 1=sys.argv. #把命令行中的解释器后的空格分割的所有参数都存成列表 src_file_path=1[1] dst_file_path=1[2] with open(r'%s' %src_file_path,mode='rb') as src_f,\ open(r'%s' %dat_file_path,mode='wb') as dst_f: for line in src_f: dst_f.write(line)