Python全栈-day6-day7-字符编码和文件处理

时间:2022-11-06 04:39:39
一、字符编码

1.编码基础

  定义:人在使用计算机时,使用的是人类能够读懂的字符,使用者必须通过一张字符和数字间的相对应关系表实现人机交互,这一系列标准称为字符编码

  Python应用中解决核心字符串乱码的最佳方法:用什么格式编码,就用什么格式解码

  参考:http://www.cnblogs.com/linhaifeng/articles/5950339.html#_label2

二、文件处理

1.文件基础

  1)定义

  计算机系统分为:计算机硬件,操作系统,应用程序三部分。python或其他语言编写的应用程序若想要把数据永久保存下来,必须要保存于硬盘中,这就涉及到应用程序要操作硬件。实际上,应用程序是无法直接操作硬件的,这就用到了操作系统。操作系统把复杂的硬件操作封装成简单的接口给用户/应用程序使用,其中文件就是操作系统提供给应用程序来操作硬盘虚拟概念,用户或应用程序通过操作文件,可以将自己的数据永久保存下来。

  2)操作文件的流程:

    a.打开文件,得到文件句柄并赋值给一个变量
    b.通过句柄对文件进行操作
    c.关闭文件

2.Python中文件操作

  1)打开文件的过程

# 打开文件,得到文件句柄并赋值给一个变量
f=open('test.txt','r',encoding='utf-8') #默认打开模式就为r,即只读模式
# 通过句柄对文件进行操作
data=f.read()
# 关闭文件
f.close()

  打开文件的执行过程:

    a.应用程序想操作系统发起系统调用open()请求

    b.操作系统打开文件,将文件内容加载到内存中,并返回一个文件句柄给应用程序

    c.应用程序将文件句柄赋值给 f

  2)open()方法介绍

      open(r'文件路径',mode='打开方式',encoding='编码格式')

      r作用:避免文件路径中的特殊字符例如'\'被强制转义,导致路径无法识别

      打开方式:r/w/a(只读只写追加等)

      编码格式:应用程序打开文件时,必须制定其打开的编码格式,否则有可能出现乱码

  3)文件打开的模式

Python全栈-day6-day7-字符编码和文件处理

打开文件的模式有(默认为文本模式):
r 只读模式 默认模式,文件必须存在,不存在则抛出异常
w 只写模式 不可读;不存在则创建;存在则清空内容
a 追加写模式 不可读;不存在则创建;存在则只追加内容 对于非文本文件,只能使用b模式,"b"表示以字节的方式操作(而所有文件也都是以字节的形式存储的,
使用这种模式无需考虑文本文件的字符编码、图片文件的jgp格式、视频文件的avi格式)
rb
wb
ab
注意:以b方式打开时,读取到的内容是字节类型,写入时也需要提供字节类型,不能指定编码 了解部分:
+ 表示可以同时读写某个文件
r+ 读写可读,可写
w+ 写读可读,可写
a+ 写读可读,可写

3.操作文件的方法

  读文件操作:

  1)read()

# 读取文件所有内容,光标移动到文件末尾
f = open(r'test.txt','r',encoding='utf-8')
prit(f.read())
f.close()

  2)readline()、readlines()

# f.readline()     读取一行内容,光标移动到第二行首部
# f.readlines() 读取每一行内容,存放于列表中 # 单行读取文件
print(f.readline()) # 多行读取,且转化为列表输出
print(f.readlines())

  3)readable()

# 判断文件是否可读
print(f.readable())

  读文件:

  1)write()

# 只写模式
# 注意:
# 1.文件存在时,清空原来的内容
# 2.文件不存在是,创建空文件
# 3.默认不会自动换行写入
f = open(r'zhang.txt','w',encoding='utf-8') #默认是wt
f.write('第一行\n')
f.write('第二行\n') # 追加写的模式
# 注意:
# 1.文件存在时,光标移动到文件末尾,且将内容追加到文件默认
# 2.文件不存在是,创建空文件
f = open(r'zhang.txt','a',encoding='utf-8') #默认是wt
f.write('第一行\n')
f.write('第二行\n')
f.close()

  2)其他内置方法

f.writable()    #判断文件是否可读
f.writelines() #以列表形式,多行写入

4.练习

  1)循环读取文件

# open(r'文件路径',mode='打开方式'encoding='编码格式')
with open(r'zhang.txt',mode='r',encoding='utf-8') as file:
for line in file:
time.sleep(1)
print(line,end='')

  2)简单写文件,并且实现写入的新内容总是置于文件末尾

with open(r'zhang.txt',mode='a',encoding='utf-8') as file:
file.write('第一天\n')

  3)文件打开之b模式

# 1.必须和其它模式组合使用,rb\wb\ab
# 2.b模式下读写都是以bytes为单位
# 3.b模式下不能指定encoding和decoding模式 # rb模式
with open(r'120.jpg','rb') as f:
data = f.read()
print(data)
print(type(data)) with open(r'zhang.txt','rb') as f:
data = f.read()
print(data)
print(data.decode('utf-8'),end='')
print(type(data)) # wb模式
# 不同编码格式写入,查看打开出现的情况
with open(r'120.txt','wb') as f:
msg = '你是猪吗?'
f.write(msg.encode('gbk'))
with open(r'120.txt','wb') as f:
msg = '你是猪吗?'
f.write(msg.encode('utf-8')) # ab模式
with open(r'120.txt','ab') as f:
f.write('张哈哈'.encode('utf-8')) # 可以看出.jpg以bytes的形式被存储和打开了
with open(r'120.jpg','rb') as f:
for line in f:
print(line)

5.作业:文件修改

  1)修改文件的实际

# 修改文件方式一:
# 1.先把文件全部读到内存中
# 2.然后在内存中完成修改
# 3.再把修改后的结果覆盖到源文件中
# 缺点:会在文件内容过大的情况下耗费过多的内存
with open(r'修改文件.txt','r',encoding='utf-8') as f:
data = f.read()
data = data.replace('zhang','你是猪吗?')
with open(r'修改文件.txt','w',encoding='utf-8') as f:
f.write(data) # 修改文件方式二:
# 1.以读的方式打开原文件
# 2.以写的方式拷贝到新文件 import os
with open(r'修改文件.txt','rt',encoding='utf-8') as src_f,\
open(r'修改文件.txt.swap','wt',encoding='utf-8') as dst_f:
for line in src_f:
if '你是猪吗?' in line:
line = line.replace('你是猪吗','啊哈哈')
dst_f.write(line)
os.remove('修改文件.txt')
os.rename('修改文件.txt.swap','修改文件.txt')

  2)实现文件拷贝

rst_file = input('原文件路径>>')
dst_file = input('目标文件路径>>') with open(r'%s' %rst_file,'rb') as src_f,\
open(r'%s' %dst_file,'wb') as dst_f:
for line in src_f:
dst_f.write(line)

  3)拷贝文件和修改文件程序

# 编写程序,提供两种可选功能:
# 1)拷贝文件
# 2)修改文件
# 用户输入操作的编码,根据用户输入的编号
# 执行文件拷贝(让用户输入原文件路径和目标文件路径)
# 或修改操作 import os
print('选择模式:')
warm = '''
1 拷贝文件
2 修改文件
输入quit退出
'''
print(warm)
while True:
choice = input('选择操作>>').strip()
if choice == '':
src_file = input('输入原文件路径>>').strip()
dst_file = input('输入目标文件路径>>').strip()
with open(r'%s' %src_file,'rb') as src,\
open(r'%s' %dst_file,'wb') as dst:
for line in src:
dst.write(line)
elif choice == '':
dst_f = input('输入要修改的文件路径>>').strip()
msg_old = input('输入要修改的内容>>').strip()
msg_new = input('修改后的内容>>').strip()
# # 方法一:
# with open(r'%s' %dst_f,'r',encoding='utf-8') as f_old:
# data = f_old.read()
# data = data.replace(msg_old,msg_new)
# with open(r'%s' %dst_f,'w',encoding='utf-8') as f_new:
# f_new.write(data)
# 方法二:
dst_f_swap = input('临时交换的文件名>>')
with open(r'%s' %dst_f,'r',encoding='utf-8') as f_old,\
open(r'%s' % dst_f_swap,'w',encoding='utf-8') as f_new:
for line in f_old:
if msg_old in line:
line = line.replace(msg_old,msg_new)
f_new.write(line)
os.remove(dst_f)
os.rename(dst_f_swap,dst_f) elif choice == 'quit':
break
else:
print('没有这个选项,请重新输入...')

补充说明:资源回收

打开一个文件包含两部分资源:操作系统级打开的文件+应用程序的变量。在操作完毕一个文件时,必须把与该文件的这两部分资源一个不落地回收
回收方法为:
1)f.close() #回收操作系统级打开的文件
2)del f #回收应用程序级的变量 其中del f一定要发生在f.close()之后,否则就会导致操作系统打开的文件还没有关闭,白白占用资源,而python自动的垃圾回收机制决定了我们无需考虑del f,这就要求我们,在操作完毕文件后,一定要记住f.close() 推荐傻瓜式操作方式:使用with关键字来帮我们管理上下文
with open('a.txt','w') as f:
pass with open(r'test.txt','r',encoding='utf-8') as f:
data=f.read()

    

Python全栈-day6-day7-字符编码和文件处理的更多相关文章

  1. python全栈开发-Day7 字符编码总结

    python全栈开发-Day7 字符编码总结 一.字符编码总结 1.什么是字符编码 人类的字符--------->翻译--------->数字 翻译的过程遵循的标准即字符编码(就是一个字符 ...

  2. python全栈开发_day7_字符编码,以及文件的基本读取

    一:字符编码 1)什么是字符编码 将人能识别的字符等高级标识符与计算机所能识别的二进制01进行转化,这之间的交流需要一个媒介,进行两种标识符之间的转化. 字节的存储方式为八个二进制位 2)乱码 存放数 ...

  3. python基础(三)----字符编码以及文件处理

      字符编码与文件处理 一.字符编码 由字符翻译成二进制数字的过程   字符--------(翻译过程)------->数字   这个过程实际就是一个字符如何对应一个特定数字的标准,这个标准称之 ...

  4. python全栈开发-Day7 文件处理

    python全栈开发-Day7   文件处理 一 .文件操作 一 .介绍 计算机系统分为:计算机硬件,操作系统,应用程序三部分. 我们用python或其他语言编写的应用程序若想要把数据永久保存下来,必 ...

  5. Python全栈开发day7

    一.Python生成器/迭代器 1 2 3 4 5 6 7 8 9 10 11 12 #!/bin/env python # -*- coding:utf-8 -*- def shaw(n):     ...

  6. DAY7 字符编码和文件操作

    一.软件与python解释器打开文件的方法 1.软件打开文件读取数据的流程: 1. 打开软件 2. 往计算机发生一个打开文件的指令,来打开文件 3. 读取数据渲染给用户(存取编码不一致:乱码) 2.p ...

  7. python基础2--进制、字符编码和文件处理

    一.进制 1.二进制 定义 二进制数据是用0和1两个数码来表示的数.它的基数为2,进位规则是"逢二进一"   转换方式 二进制转换为十进制: 把二进制数按权展开.相加即得十进制数. ...

  8. Python全栈之路4--内置函数--文件操作

    上节重点回顾: 判断对象是否属于某个类,例如: 列表中有个数字,但是循环列表判断长度,用len会报错;因为int不支持len,所以要先判断属于某个类,然后再进行if判断. # isinstance(对 ...

  9. python 全栈开发,Day86(上传文件,上传头像,CBV,python读写Excel,虚拟环境virtualenv)

    一.上传文件 上传一个图片 使用input type="file",来上传一个文件.注意:form表单必须添加属性enctype="multipart/form-data ...

  10. Python全栈day21(作业针对一个文件进行查询修改删除的操作练习)

    需求,有一个配置文件test.conf内容如下 backend www1 server 1 server 2 backend www2 server 3 server 4 add [{'backend ...

随机推荐

  1. tomcat乱码原因--基本的编码问题

    tomcat乱码原因:在学习servlet时候,经常会遇到中文乱码的问题,网上查只知道如何设置不乱码,其中的原理不是很明白.我认为明白其中的原理,乱码问题就很容易解决 tomcat乱码解决方法: po ...

  2. Createjs学习一

    需求1:根据后端返回过来的不同信息,实现长按保存图与文字片功能(图片都是一样的,文字信息不同) 首先我们来分析一下要求,得出需要用到哪些技术.长按保存这一功能只针对图片,文字长按的话只会出现复制.. ...

  3. nyoj-----284坦克大战(带权值的图搜索)

    坦克大战 时间限制:1000 ms  |  内存限制:65535 KB 难度:3   描述 Many of us had played the game "Battle city" ...

  4. 面试java简答题

    1.  sleep() 和 wait() 有什么区别? 答:1.这两个方法来自不同的类分别是Thread和Object      2.最主要是sleep方法没有释放锁,而wait方法释放了锁,使得其他 ...

  5. JAVAWEB 生成excel文字在一格显示两位不变成#号

    在用java生成excel的时候会发现这种问题, 如果是人家给的模板还好,如果不是模板,而是通过代码生成的话, 就需要进行处理了, 一个小单元格,如果是一位的话,如1-9显示没有问题,一旦是两位的话, ...

  6. 记录:sea.js和require.js配置 与 性能对比

    最近有点忙,很久无写博客,记录一下之前的配置require.js和sea.js的配置.(有误有望提出 require.js 文件目录 /app(项目使用js) /lib(require.js jq存放 ...

  7. 三、oracle 用户管理(user)

    一.创建用户概述:在oracle中要创建一个新的用户使用create user语句,一般是具有dba(数据库管理员)的权限才能使用.create user 用户名 identified by 密码;  ...

  8. 201621123002《Java程序设计》第十周学习总结

    1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结异常相关内容. 2. 书面作业 本次PTA作业题集异常 1. 常用异常 结合题集题目7-1回答 1.1 自己以前编写的代码中经常出现 ...

  9. java中,什么是方法的重载?需要满足什么条件?两同三不同指的什么?

    方法重载需要满足以下几个条件: 在同一个类中 方法的名称相同 参数列表不同 方法重载有以下特点: 与访问修饰符和返回值类型无关 与异常无关 方法重载的作用: 传递不同的参数实现相同的效果 所谓两同,就 ...

  10. xilinx 官方技术资料

    http://china.xilinx.com/support/index.html/content/xilinx/zh/supportNav/ip_documentation.html