A.文件读取
1.读:获取文件的数据:一次性读取全部数据,文件太大超过内存数内存容易爆,适合小文件,所有的都在内存中,速度快read()
按行读,一次读一行数据,然后把所有的行都读出来,使用大小文件均可,节省内存,速度相对慢点readline() for i in fp
用空间换时间(一次性全读)用时间换空间(逐行读)
2.写:把数据写入到文件中:清空写:把文件原有的内容都删除掉,再写入新内容fp.write(“xxxx”)不可以写数字
追加写:保留原有文件内容的同时,把新的内容写到最后面
B.文件的操作模式:
r:读模式,只能读取数据,不能写入新数据
r+:读写模式,可以同时读也可以同时写(原有的数据会保存)
w:清空写模式,如果文件不存在则自动创建,如果已存在 ,把原内容删除替换新内容
w+:清空读写模式,但是只能读新增的内容
a:追加写,保留原来的内容,在末尾写入新的的内容 rb:读二进制文件的内容 wb:写二进制文件的内容 ab:追加写二进制文件的内容
文件区分文本文件:肉眼可以识别的内容,一般用写字板(.txt)能打开识别,图片、WordExcel都是二进制文件
二进制文件:用写字板打开基本都是鬼码乱码,图片、WordExcel都是二进制文件
操作文件格式 打开文件,获取文件句柄fp=open(“e:\\xxx.txt”,”r”)通过文件句柄去读取或写入内容全部读出来read() 按行读:readline() for i in fp 写:fp.write("xxxx") #不可以直接写数字 追加完成关闭fp.close()
...
f=open("d:\\14.txt","w",encoding="utf-8")#此处如果为指明编码,默认可能是ansi保存对应gbk
f.write("今天天气海青蓝3\n")#\n表示换行
f.write("处处好风光5\n")
f.write("我们不用上自习,真是开心呀6\n")
#f.write("我们不用上自习,真是开心呀7\n")
f.close()
...
f=open("d:\\ 15.txt","w+",encoding="gbk")
#f.write("123")
#f.write("345\n")
#f.write("567sd\n")
f.close()
...
f=open("d:\\14.txt","r",encoding="utf-8")#此处如果为指明编码,默认可能是ansi保存对应gbk
content=f.read()#一次性读
f.close()
#print(content)
...
#f=open("d:\\14.txt","r",encoding="utf-8")
#for i in f:#逐行读
#print(i,end="")#end=""是为了少换行一次,否则会出现读取每个文件内容有个回车然后print也会换行,print的回车去掉
#再次回车结束遍历即可打印
#f.close()
...
f=open("d:\\14.txt","r",encoding="utf-8")
content=f.readlines()#一次性全部读取,文件不能太大
f.close()
#print(content)
#for line in content:
#print(line,end="")
...
f=open("d:\\14.txt","r+",encoding="utf-8")#r+默认将游标定位在文件最后,新增内容在最后
#f.seek(0,0)#表示0 从绝对位置,0从第一个位置开始==》文件的开头
#f.write("生效\n")
#for line in f:
#print(line,end="")
f.close()
...
f=open("d:\\15.txt","a",encoding="utf-8")#a表示append追加
f.write("江南可采莲\n")
f.write("荷叶连田田\n")
f.write("日拱一卒,每天开心\n北京欢迎你")#可以一行写\n换行就可以了
f.close()
...
#统计一个文件有多少行
f=open("d:\\14.txt","r+",encoding="utf-8")
print(len(f.readlines()))
f.close()
...
#统计有多少数字的行数
f=open("d:\\14.txt","r+",encoding="utf-8")
count=0
for i in f:#把文件的每一行都遍历一遍
for char in i:#把每一行的每一个字符都判断下是否含有数字
if char in"0123456789":
count +=1
break
f.close()
print(count)
...
#过滤文本的空行,统计文本的行数
f=open("d:\\14.txt","r+",encoding="utf-8")
count=0
for line in f:
if line.strip(): #如果一行内容是空行,strip()后就会变成""就是False
count+=1
f.close()
print(count)
...
#将文本倒着输出,不能直接修改,需要先拿出来,修改后再写进去覆盖下
#第一步:把所有文件内容拿出来
f=open("d:\\14.txt","r",encoding="utf-8")
lines=f.readlines()#所有的行内容放到一个列表里
#第二步:修改内容:反转顺序
lines=lines[::-1]
f.close()
print(lines)
#第三步将反转的内容在写进去
f=open("d:\\14.txt","w",encoding="utf-8")
f.writelines(lines)
f.close()
...
#修改文本某几行的数据
fp=open("d:\\15.txt","r",encoding="utf-8")
lines = fp.readlines()#所有的行内容放到一个列表里
fp.close()
for row_no in range(len(lines)):
if "4" in lines [row_no] or "6" in lines[row_no]:
lines[row_no]=lines[row_no].replace("4","$$")
lines[row_no]=lines[row_no].replace("6","##")
print(lines)
fp=open("d:\\15.txt","w",encoding="utf-8")
fp.writelines(lines)
fp.close()
...
#二进制的文本处理:复制一个图片或者什么worldExcel
fp=open("d:\\王丹丹1月项目补贴.pdf","rb")#rb表示二进制的读取
content=fp.read()#读取所有文件内容
fp.close()
fp=open("d:\\王丹丹2月项目补贴.pdf","wb")#wb表示二进制的写
fp.write(content)#读取所有文件内容
fp.close()
...
#close()如果没有关闭个人电脑无影响,如果Python语句执行完毕也会自动关闭;如果是在服务器句柄耗尽,Linux有打开文件的上限,65535个,如果不关闭文件,服务器不会自己退出。如果文件不关闭,可能会导致写入的内容没有真正写入磁盘,可以用flash()时时刷新生效,with无法使用flush
#用with不需要保存,会自动保存
with open("d:\\15.txt","r",encoding="utf-8") as fp: #基于上下文,会自动保存,不需要close
print(fp.read())
...
fp=open("d:\\15.txt","r",encoding="utf=8")
fp.readline()
'北京欢迎你日拱一卒,每天开心$$\n'
fp.tell()#表示查看读取位置
46
fp.readline()
'荷叶连田田##\n'
fp.tell()
65
>>> fp.seek(0,0)#可以回到首行第一个
0
无法直接写入int或者float的类型,需要转化下字符串写入即可
fp=open("d:\\15.txt","w",encoding="utf=8")
fp.write(str(12))