修改文件方式、文件管理

一、修改文件的两种方式

原理: “修改文件”是删除源文件的同时,把源文件加载到内存,修改完再放回去,替代原文件,所以并没有“修改”这一说,而是重做了个新的文件。

文件修改方案与思路一:适合处理小型文本文件

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临时编辑、查看

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

posted @ 2022-06-09 18:19  秋风お亦冷  阅读(231)  评论(0编辑  收藏  举报