Python全栈开发实战学习3

阅读: 评论:0

Python全栈开发实战学习3

Python全栈开发实战学习3

三元运算

三元运算又称三目运算,是对简单的条件语句的简写,如:
简单条件语句:

if 条件成立:val = 1
else:val = 2

改成三元运算:

val = 1 if 条件成立 else 2

字符编码

看着别人写的内容挺简单的,但是仔细捋一捋还挺乱,还是硬着头皮把难懂的部分写了写。

参考:.html

这里面是各种编码方式的详细介绍。

字符在硬盘上的存储

本质上讲,存储形式都是二进制。不过利用不同编码方式映射出来的二进制序列并不相同,所以在读取时,一定要以存放时使用的编码方式来读取,否则就会出现乱码。这就像是用不同语言表达同一个意思,写和读的时候都要用同一种语言。

编码的转换

  • unicode是万国码,只要是以unicode形式存储的,所有国家的计算机都能正确显示。
  • gbk是我国Windows系统中默认的编码方式。
  • Python3上以utf-8编写代码,解释器会把代码字符串转成Unicode后转入内存。

手动编码和解码

Python2不支持自动转换,需要手动转换。

utf-s ——> decode解码 ——> unicode
unicode ——> encode 编码 ——> utf-8

# decode 示例
s="小叮当"
print(s)
s2 = s.decode('utf-8')
print s2
print type(s2)# encode 示例
s3 = s2.encode('GBK')
print type(s3)
print s3

文件处理

读文件——‘r’或‘rb’

示例1

# 示例1
f = open(file='D:/学习/联系方式.txt',mode='r',coding='utf-8')
data = f.read()
f.close()
# 解释
1.file='D:/学习/联系方式.txt'     表示文件路径
2.mode='r' 				        表示读写模式为只读
3.coding='utf-8'                表示将硬盘上的0101010按照utf-8的规则断句,然后转换成unicode
ad()                      表示读取所有内容,内容是已经转换完毕的字符串
5.f.close()                     表示关闭文件

PS:此处的encoding必须和文件在保存时设置的编码保持一致,不然断句会不准确而造成乱码

示例2

f = open(file='D:/学习/联系方式.txt',mode='rb')
data = f.read()
f.close()
# 解释
1.file='D:/学习/联系方式.txt'     表示文件路径
2.mode='rb' 				        表示读写模式为只读
ad()                      表示读取所有内容,内容是已经转换完毕的字符串
4.f.close()                     表示关闭文件

示例1和示例2的区别在哪里?
在于示例2打开文件时并未指定encoding,这是为何?是因为直接以rb模式打开了文件,rb是指二进制模式,数据读到内存里直接是bytes格式,如果想看内容还要手动decode,因此在文件打开阶段,不需要指定编码。

如果不知道要处理的文件是什么编码怎么办?

import chardetf = open('log',mode='rb')
data = f.read()
f.close()result = chardet.detect(open('log',mode='rb').read())
print(result)
#输出
{'encoding':'GB2312','confidence':0.99,'language':'Chinese'}

chardet是一个非常优秀的编码识别模块。chardet 是python的第三方库,需要下载和安装。
例子:小重山
1.创建一个文本文件,输入文件名为小重山,输入诗词内容
2.用Python语句来读取内容

# 文件名:小重山    文件路径:与代码放在同一文件夹即用相对路径,否则用绝对路径
昨夜寒蛩不住鸣。
惊回千里梦,已三更。
起来独自绕阶行。
人悄悄,帘外月胧明。
白首为功名,旧山松竹老,阻归程。
欲将心事付瑶琴。
知音少,弦断有谁听。
# 代码
f = open('小重山', 'r',encoding='utf8')
data = f.read()  # read(5):读取5个字符
print(data)
f.close()

方法

文件不存在会报错
file=open(‘小重山’,‘r’,encoding=‘utf8’) # 把小重山这个文件作为一个对象,‘r’:表示可读,encoding=‘utf8’:编码转换
data&#ad() # 按字符串个数,取字符串内容,默认为所有,可以为数字,表示取多少个字符,加数字没意义
data&#adline() # 跟随光标按行取内容,每行的末尾都会有一个换行符 n,也算一个字符,取一行内容
data&#adlines() # 跟随光标位置开始打印所有行,但是是以列表的形式展现出来,想打印所有,就用 for 循环 data
data&#adable() # 判断文件是否可读
file.close() # 只要有打开文件的方法存在,就加上文件关闭的方法
ll() # 打印当前光标的位置,按utf8来,读一个字母为进1,一个中文进3,GBK,中文进2,按字节移动
file.seek(0) # 重设光标的位置,按字节移动,一个中文3个字节,例如:当断点后,可以记录传输的位置,并从断点的位置开始重传
其他方法:
f.fileno() # 返回一个操作令牌:当一个对象被你使用时,你会获得这个对象的操作令牌,这个操作令牌是唯一的,且为整型
f.isatty() # 判断对象是否为终端,返回:True、false

写文件——‘w’或‘wb’

仍然是对小重山文件进行操作,原来有诗词内容

f = open('小重山', 'w',encoding='utf8')
f.write('hello,world!')
f.close()
# 结果
hello,world!
》原来的内容没有了,以‘w’模式打开时,有该文件就清空文件内容再写入,如果没有这个文件就创建一个文件后再写入

方法

file=open(‘小重山2’,‘w’,encoding=‘utf8’) #当 小重山2 这文件不存在,会自动创建一个,如果里面有内容会清空掉
file.write(‘hello’)
file.write(‘alex’) # 结果是不换行:helloalex,换行要加 nalex
file.writelines([‘a’,‘b’,‘c’]) # abc
file.flush() # 当写一条数据后,不存入内存缓存,而是立马写进磁盘,确保安全,但是会降低性能,flush 当内存缓存满了也会自动写进磁盘
file.close()

追加——‘a’或‘ab’

f = open('小重山', 'a',encoding='utf8')
f.write('nhello,world!n')
f.write('Martin')
f.close()
# 结果
昨夜寒蛩不住鸣。
惊回千里梦,已三更。
起来独自绕阶行。
人悄悄,帘外月胧明。
白首为功名,旧山松竹老,阻归程。
欲将心事付瑶琴。
知音少,弦断有谁听。
hello,world! #追加内容
Martin   #追加内容

读写r+

f = open('小重山', 'r+', encoding='utf8')
data = f.read()
print(data)f.write('n读写模式!')
f.close()
#结果
昨夜寒蛩不住鸣。
惊回千里梦,已三更。
起来独自绕阶行。
人悄悄,帘外月胧明。
白首为功名,旧山松竹老,阻归程。
欲将心事付瑶琴。
知音少,弦断有谁听。
hello,world!
Martin
读写模式!  #先读后写

写读 w+

f = open('小重山', 'w+', encoding='utf8')
data = f.read()
print(data)
f.write('第一季n')
f.write('第二季n')
f.write('第三季n')
f.write('第四季')
print("content", f.read())
f.close()#结果content
第一季
第二季
第三季
第四季

content前面空一行,说明之前的内容是空的,w+是先清空或新建,然后再写入、读取

按指定位置读写

这里要用到以下方法:
seek(): 用于移动文件读取指针到指定位置。
tell():返回文件的当前位置,即文件指针当前位置

f = open('小重山', 'r', encoding='utf8')
data = f.read()
ll())
print(data)
f.seek(8)
ll())
f.close()# 结果
12
hello,world!
8

遗留问题

f = open('小重山', 'r+', encoding='utf8')
data = f.read()
ll())
print(data)
f.seek(6)
f.write("小重山")
ll())
f.close()# 文件中出现乱码
hello,小重山��一季
第二季
第三季
第四季# 之前文件写入方式
f = open('小重山', 'w',encoding='utf8')
f.write('hello,world!')
f.write('n第一季n')
f.write('第二季n')
f.write('第三季n')
f.write('第四季')
f.close()
# 文件内容
hello,world!
第一季
第二季
第三季
第四季

本文发布于:2024-02-03 23:18:32,感谢您对本站的认可!

本文链接:https://www.4u4v.net/it/170697358451510.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:实战   Python
留言与评论(共有 0 条评论)
   
验证码:

Copyright ©2019-2022 Comsenz Inc.Powered by ©

网站地图1 网站地图2 网站地图3 网站地图4 网站地图5 网站地图6 网站地图7 网站地图8 网站地图9 网站地图10 网站地图11 网站地图12 网站地图13 网站地图14 网站地图15 网站地图16 网站地图17 网站地图18 网站地图19 网站地图20 网站地图21 网站地图22/a> 网站地图23