修改文件方式、文件管理
一、修改文件的两种方式
原理: “修改文件”是删除源文件的同时,把源文件加载到内存,修改完再放回去,替代原文件,所以并没有“修改”这一说,而是重做了个新的文件。
文件修改方案与思路一:适合处理小型文本文件
1、先以r的方式打开源文件;
然后将源文件内容一次性全部读入内存,在内存中修改完毕。
2、然后以w的方式打开源文件(源文件内容立即被清空);
将内存中修改的结果写回源文件中
特点:对内存占用比较大,要求内存有充足的空间,对硬盘没有特殊要求
# with open('a.txt', mode="r", encoding="utf-8") as f:
# data=f.read()
# res=data.replace("egon",'EGON')
#
#
# with open('a.txt', mode="w", encoding="utf-8") as f1:
# f1.write(res)
文件修改方案与思路二:适合处理大型文本文件
1、先以r的方式打开源文件,以w的方式打开一个新的文件
2、每从源文件中读取一行内存,就立即修改,然后将修改完毕之后的结果立即写入新文件中,循环往复,直到源文件完全修改完毕
3、删除源文件,将新文件名重命名为源文件名
特点:要求硬盘有充足的空间,对内存没有特殊要求
# import os
# with open('a.txt', mode="r", encoding='utf-8') as src_f,\
# open('.a.txt.swp',mode="w",encoding='utf-8') as dst_f:
# for line in src_f:
# res=line.replace("EGON","egon")
# # print(res)
# dst_f.write(res)
# os.remove('a.txt')
# os.rename('.a.txt.swp', 'a.txt')
二、文件处理
1、文本处理:
格式:
默认是t(txt文本)模式
r(读),默认为rt;
w(写),默认为wt;
b(二进制),需要指定,如rb为读取二进制模式
2、打开一个图片文件:
f.read()和for的区别:当处理大文件时,用for不会占用很多资源,一行一行的处理。
# with open('1.png',mode='rb') as f:
# data=f.read()
# print(data)
可以交给for处理
# for line in f:
# print(line)
3、复制文件:复制文件从某处到某处
# src_file_path=input("请输入源文件路径>>>: ").strip() #.strip去除空格字符
# dst_file_path=input("请输入目标文件路径>>>: ").strip() #.strip去除空格字符
# src_file_path=r"%s" %src_file_path # %s占用变量并替换,r取消转义用户输入的特殊字符如\
# dst_file_path=r"%s" %dst_file_path # %s占用变量并替换,r取消转义用户输入的特殊字符如\
# with open(src_file_path,mode='rb') as src_f,open(dst_file_path,mode='wb') as dst_f:
# data=src_f.read()
# dst_f.write(data) #一次写入,占用内存空间
# for line in src_f:
# dst_f.write(line) #边读边写,省内存空间
复制图片:填写绝对路径(路径全名)或当前路径(写个文件名即可),默认为当前路径;
一次写入,占用内存空间,
x=input('请输入源原文件路径>>>:').strip()
y=input('请输入目标文件路径>>>:').strip()
x=r'%s' %x
y=r'%s' %y
with open(x,mode='rb') as q,open(y,mode='wb') as f:
date=q.read()
f.write(date)
或
边读边写,省内存空间
x=input('请输入源原文件路径>>>:').strip()
y=input('请输入目标文件路径>>>:').strip()
x=r'%s' %x
y=r'%s' %y
with open(x,mode='rb') as q,open(y,mode='wb') as f:
for line in q:
f.write(line
·
4、规则介绍:
f=open(文件的路径,mode="打开模式",encoding="字符编码")
print(f)
f.read()
f.write()
f.close()
# 上下文管理
with open(文件的路径,mode="打开模式",encoding="字符编码") as f:
代码1
代码2
代码3
用r(读)的模式打开、编辑,再用w(写)的模式保存:
# with open('a.txt', mode="r", encoding="utf-8") as f:
# data=f.read()
# res=data.replace("egon",'EGON')
#
#
# with open('a.txt', mode="w", encoding="utf-8") as f1:
# f1.write(res)
三、文本编码:字符编码一般为utf-8(万国字符表)
相互关系:
字符--------编码---------数字
字符《------解码---------数字
字符编码表:字符与数字的对应关系:
ASCII表:英文字符与数字的对应关系
用一个Bytes对应一个英文字符
GBK表:英文字符与中文字符跟数字的对应关系
用2Bytes对应一个字符
Shift-JIS:英文字符与日文字符跟数字的对应关系
Euc-KR:英文字符与韩文字符跟数字的对应关系
utf-8:"万国字符与数字的对应关系"
1Bytes===>1个英文字符
3Bytes===>1个中文字符
# 编码与解码使用的格式要保持一致!
# with open('d.txt',mode='wt',encoding='utf-8') as f:
# f.write("哈哈哈哈")
# with open('d.txt', mode='rt', encoding='utf-8') as f:
# print(f.read())
linux文本文件编码
vim打开文件,输入冒号底行插入代码即可
常用编码模式:utf-8 GBK big5 cp936
set fenc=编码:更改要转换的编码
set fileencoding:查看当前文件编码格式
set ff:查看当前文本模式,一般为dos、linux
set ff=dos:设置为dos模式
set ff=unix:设置为unix模式
最末行模式输入命令:edit ++enc=gb18030临时编辑、查看