字符编码及基本文件操作

摘要:
字符编码和基本文件操作字符编码文字转换成数字就是强制转换ASCIIASCII:美国信息交换标准码,现今通用的单字节编码系统计算机最小的表示单位:bit(比特)计算机最小的存储单位:bytes(字节),8b=1bytesUnicode:万国语言编码使用Unicode编码比ASCII编码需要多一倍的存储空间UTF-8将Unicode编码转化为utf-8编码,它把一个Unicode字符根据不同的数字大小编码成1-6个字节。
字符编码和基本文件操作

字符编码

文字转换成数字就是强制转换

ASCII

ASCII:美国信息交换标准码,现今通用的单字节编码系统

计算机最小的表示单位:bit(比特)

计算机最小的存储单位:bytes(字节),8b = 1bytes

Unicode:万国语言编码

使用Unicode编码比ASCII编码需要多一倍的存储空间

UTF-8

将Unicode编码转化为utf-8编码,它把一个Unicode字符根据不同的数字大小编码成1-6个字节。

计算机字符编码工作方式

在计算机内存中,统一使用Unicode编码,当需要保存到硬盘或者需要传输的时候,就转换为utf-8编码。

用记事本编辑的时候,从文件读取 的utf-8字符被转换为Unicode字符到内存里,编辑完成后,保存的时候再把Unicode转换为utf-8保存到文件

  • Unicode----->encode(编码)-------->gbk
  • Unicode<--------decode(解码)<----------gbk

基本文件操作

文件的定义

文件:操作系统为用户或应用程序提供的一个读写硬盘的虚拟单位

只要我们想要操作文件就是对操作系统发起请求,然后由操作系统将用户或应用程序对文件的读写操作转换成集体的硬盘指令

文件的功能

内存无法永久保存数据,但凡我们想要永久保存数据都需要把文件保存到硬盘中,而操作文件就可以实现对硬件的操作。

Python中文件的操作

绝对路径:

  • Windows系统绝对路径从盘符(C:、D:)开始写一个完整的路径。
  • macos系统从根目录(/Users)开始写一个完整的路径。

相对路径:

  • 相对于当前执行文件所在的文件夹开始找

打开文件的五种方式

1.read模式

r:只读模式,只能读不能写,文件不存在时报错。

#f = open(r'/Users/mac/desktop/jupyter/pythonCourseware/32.txt', mode='r',encoding='utf8')
#读取文件内容,向操作系统发起读请求,会被操作系统转成具体的硬盘操作,将内容由硬盘读入内存
#data=print(f.read())
#print(data)
#f.close()
#由于Python的垃圾回收机制只回收引用计数为0的变量,但是打开文件还占用操作系统的资源,所以我们需要回收操作系统的资源资源

2.write模式

w: 只能写,不能读,文件存在的时候回清空文件后再写入内容;文件不存在的时候会创建文件后写入内容。强行读入会删除源文件数据

#f = open(r'/Users/mac/desktop/jupyter/pythonCourseware/32.txt', mode='w',encoding='utf8')
#f.write('qwqqf')
#f.close()

3.append模式(添加数据)

a:可以追加。文件存在,则在文件的末端写入内容;文件不存在的时候会创建文件后写入内容。

若强行读入,不会删除原文件数据

#f = open(r'/Users/mac/desktop/jupyter/pythonCourseware/32.txt', mode='a',encoding='utf8')
#f.write('qwqqf')
#f.close()

需要注意的是t、b这两种模式均不能单独使用,都需要与r/w/a之一连用。

4.text模式(文本模式)

# with open('test', 'rt', encoding='utf8') as f:
#     data = f.read()
#     print(data)

5.bytes模式(字节模式)

b模式是通用的模式,因为所有的文件在硬盘中都是以二进制的形式存储的,需要注意的是:b模式读写文件,一定不能加上encoding参数,因为二进制无法再编码

# with open('test', 'rb') as f:
#     data = f.read()
#     print(data)

with上下文管理:with open(file,mode,encoding) as f :

复制文件:

# with open('test1', 'r', encoding='utf8') as fr, 
#         open('test2', 'w', encoding='utf8') as fw:
#     data = fr.read()
#     fw.write(data)

修改文件内容的两种方式

文件的数据是存放于硬盘上的,因而只存在覆盖、不存在修改这么一说

方式一:一次性读所有

将硬盘存放的该文件的内容全部加载到内存,在内存中是可以修改的,修改完毕后,再由内存覆盖到硬盘

import os
with open('test.txt') as fr
	open('test1.txt','w') as fw:
    data = fr.read()                    # 全部读入内存
    data = data.replace('a','b')        # 在内存中完成修改
    fw.write(data)
os.remove("test.txt")                   # 删除原文件名
os.rename("test1.txt","test.txt")       # 重新命名新文件名为原文件名
print("done...")

方式二:逐行修改

import os
with open('test.txt') as fr
	open('test1.txt','w') as fw:
	for line in fr:                     # 循环读取文件内容,逐行修改
		line=line.replace('a','b')      # 新文件写入原文件修改后内容
		fw.write(line)
os.remove("test.txt")                   # 删除原文件名
os.rename("test1.txt","test.txt")       # 重新命名新文件名为原文件名
print("done...")

修改文件内容的思路为:以读的方式打开原文件,以写的方式打开一个新的文件,把原文件的内容进行修改,然后写入新文件,之后利用os模块的方法,把原文件删除,重命名新文件为原文件名,达到以假乱真的目的。

了解补充:

文件光标的移动:

一: read(3):

  1. 文件打开方式为文本模式时,代表读取3个字符

  2. 文件打开方式为b模式时,代表读取3个字节

二: 其余的文件内光标移动都是以字节为单位如seek,tell,truncate

注意:

1. seek有三种移动方式0,1,2,其中1和2必须在b模式下进行,但无论哪种模式,都是以bytes为单位移动的

2. truncate是截断文件,所以文件的打开方式必须可写,但是不能用w或w+等方式打开,因为那样直接清空文件了,所以truncate要在r+或a或a+等模式下测试效果

免责声明:文章转载自《字符编码及基本文件操作》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇(4.16)存储过程的加密与解密solaris 命令下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

ehcache历史变迁及常用API的使用(转)

  ehcache是一个用Java实现的使用简单,高速,实现线程安全的缓存管理类库,ehcache提供了用内存,磁盘文件存储,以及分布式存储方式等多种灵活的cache管理方案。同时ehcache作为开放源代码项目,采用限制比较宽松的Apache License V2.0作为授权方式,被广泛地用于Hibernate, Spring,Cocoon等其他开源系统...

pgloader 学习(六) 加载csv 数据

关于加载的配置参数都是使用comand file command file 参考格式 LOAD CSV FROM 'GeoLiteCity-Blocks.csv' WITH ENCODING iso-646-us HAVING FIELDS ( startIpNum, endIpNum, loc...

python字符编码、字符串格式化、字符串方法、列表、元组、字典、集合等基础知识总结

目录: 一、字符编码 二、字符串格式化 三、进制转换 四、数据类型及其操作 1.int类、2.str类 五、格式转换 六、For循环 七、三元运算 八.列表 九、列表推导式 十、元组 十一、字典 十二、集合set 十三、文件操作 十四、变量指向和深浅拷贝 一.字符编码: 计算机由美国人发明,最早的字符编码为ASCII,只规定了英文字母数字和一些特殊字符与数...

python3 字符串base64编码

在一些项目中,接口的报文是通过base64加密传输的,所以在进行接口自动化时,需要对所传的参数进行base64编码,对拿到的响应报文进行解码; str(源字符串)--str(加密后)--str(解密) Python 2 将 strings 处理为原生的 bytes 类型,而不是 unicode, Python 3 所有的 strings 均是 unico...

RAID和LVM磁盘阵列

RAID磁盘冗余阵列  CPU的处理性能保持着高速增长,Intel公司在2017年最新发布的i9-7980XE处理器芯片更是达到了18核心36线程。但与此同时,硬盘设备的性能提升却不是很大,因此逐渐成为当代计算机整体性能的瓶颈。而且,由于硬盘设备需要进行持续、频繁、大量的IO操作,相较于其他设备,其损坏几率也大幅增加,导致重要数据丢失的几率也随之增加。 1...

shell学习笔记之正则表达式

一:知识背景 sed -i ' /PermitRootLogin no/ s/^.*$/PermitRootLogin yes/g' /etc/ssh/sshd_config 正则表达式的作用实在太强大了!!!! linux三剑客grep、awk、sed的强大是和正则分不开的,正则说到最基本的就是:从文件或者命令输出过滤文本。正则就是一些特殊字符串的集合...