python:基础笔记

一、格式化字符串

1、使用占位符

占位符说明
%d整数
%f浮点数
%s字符串
%x十六进制
%c格式化字符及其 ASCII 码
%o格式化无符号八进制数
%X格式化无符号十六进制数(大写)
%e用科学计数法格式化浮点数
%E作用同 %e,用科学计数法格式化浮点数
%g根据值的大小决定使用 %f 或 %e
%G作用同 %g,根据值的大小决定使用 %f 或者 %E

%d:
在%与d之间加非0的数字表示这个占位符最少的长度(长度数值)。若’值长度’小于’长度数值’则将值放在最后( 为空格)

>>>'%d-%2d'%(3,3)
'3- 3'

在%与长度数值之间加0,表示在’值长度’小于’长度数值’时自动补‘0’

>>>'%2d-%02d'%(3,3)
' 3-03'

%f:
%f默认保留6位小数,

>>>'%f'%1
'1.000000'

指定保留的小数位数在%与f之间加 ‘.n’(n为位数)

例如:保留3位小数和4位小数

>>>'%.3f-%.4f'%(1,2)
'1.000-2.0000'

若是想输出一个’%‘字符串就需要转义,用%%表示一个’%'字符

>>>'他的成绩比去年提升了%.2f%%'%3.145926
'他的成绩比去年提升了3.15%'

2、格式化操作符辅助命令

符号说明
m.nm 是显示的最小总宽度,n 是小数点后的位数
-用于左对齐
+在正数前面显示加号(+)
#在八进制数前面显示 ‘0o’,在十六进制数前面显示 ‘0x’ 或 ‘0X’
0显示的数字前面填充 ‘0’ 取代空格

3、format()方法

一个实例:

str1 = '{} {} {}'.format(1, 2, 3)
str2 = '{1} {2} {0}'.format(1, 2, 3)
str1 = '1 2 3'
str2 = '2 3 1'

函数部分:

format('czlun',17,)
#str类型要添加用引号
#'czlun'的key为0
#17的key为1,依次增加。

字符部分:

'Name:{} Age:{}'
#format中以{}作为占位符
#占位符里为空,则第一个占位符对应第一个值(对应key为0的值),依次增加
#占位符里为空,则占位符的数量不能大于函数内的值的数量
'Name:{1} Age:{0} Name:{1}'
#若想让每个占位符分别指向函数内的值,只需可以在占位符里填入对应的key
#函数内的值可以被非空占位符多次调用,所以可以出现非空占位符数量大于函数内的值的数量的情况

#注意:空占位符与非空占位符不可混用

任何情况下,函数内的值的数量大于占位符的数量都不会报错

关键字映射:

'Name:{_name} Age:{_age} Name:{_name}'.format(_name='czlun',_age=17,)
#与索引映射不同的是,用关键字替代了索引号,更容易理解对应的值
#若想让每个占位符分别指向函数内的值,只需可以在占位符里填入对应的关键字

4、填充与对齐

格式限定符是用 : 表示

填充:
格式限定符后面带填充的长度

# 格式:{: Num}
>>>'{:5}'.format('a') #'a'长度为1,小于5,执行填充操作
'a    '
>>>'{:5}'.format('abcdefg') #'abcdefh'长度为7,不小于5,不执行填充操作
'abcdefg'
# '{:5}'意义:用:表示填充的操作,5表示填充的长度,当值的长度小于5时,便会用空格在末尾将长度补到5(填充结果默认是左对齐)

对齐:
格式限定符后面带对齐符(^、<、>分别是居中、左对齐、右对齐),后面带宽度

# 格式:{:^|<|>Num}
>>>'{:^5}'.format('a')
' a  '
>>>'{:<5}'.format('a')
'a    '
>>>'{:>5}'.format('a')
'    a'

用指定字符进行填充:
格式限定符与对齐符中间加一个字符,则使用该字符进行填充,不指定的话默认是用空格填充

>>>'{:*^5}'.format('a')
'**a**'
>>>'{:*<5}'.format('a')
'a****'
>>>'{:*>5}'.format('a')
'****a'

指向函数内的值:
是不是觉得用了这个格式限定符就无法输出函数内其他的值了?
若想让每个占位符分别指向函数内的值,只需可以在格式限定符前填入对应的key

>>>'{0:*^5}'.format('a','b','c')
'**a**'
>>>'{1:*<5}'.format('a','b','c')
'b****'
>>>'{2:*>5}'.format('a','b','c')
'****c'

5、数据类型

符号说明实例
‘f’将数值以浮点数输出>>>‘{:.2f}’.format(10/3)
‘3.33’
‘d’将数字以十进制进行输出>>>‘{:d}’.format(10)
‘10’
‘b’将数字以二进制数进行输出>>>‘{:b}’.format(3)
‘11’
‘o’将数字以八进制数进行输出>>>‘{: o}’.format(10)
‘12’
‘x’将数字以十六进制数进行输出>>>‘{:x}’.format(10)
‘a’
‘c’在打印之前将整数转换成对应的Unicode字符串>>>‘{:c}’.format(65)
‘A’
‘e’用科学计数法打印数字,用’e’表示幂>>>‘{:.2e}’.format(1999)‘
2.00e+03’
‘%’将数字以百分数输出>>>‘{:.2%}’.format(3/10)‘
30.00%’
‘,’金额千位分隔符>>>‘{:,}’.format(100861001010000)‘
100,861,001,010,000’

6、字符串的方法及注释

方法注释
capitalize()把字符串的第一个字符改为大写
casefold()把整个字符串的所有字符改为小写
center(width)将字符串居中,并使用空格填充至长度 width 的新字符串
count(sub[, start[, end]])返回 sub 在字符串里边出现的次数,start 和 end 参数表示范围,可选。
encode(encoding=‘utf-8’, errors=‘strict’)以 encoding 指定的编码格式对字符串进行编码。
endswith(sub[, start[, end]])检查字符串是否以 sub 子字符串结束,如果是返回 True,否则返回 False。start 和 end 参数表示范围,可选。
expandtabs([tabsize=8])把字符串中的 tab 符号(\t)转换为空格,如不指定参数,默认的空格数是 tabsize=8。
find(sub[, start[, end]])检测 sub 是否包含在字符串中,如果有则返回索引值,否则返回 -1,start 和 end 参数表示范围,可选。
index(sub[, start[, end]])跟 find 方法一样,不过如果 sub 不在 string 中会产生一个异常。
isalnum()如果字符串至少有一个字符并且所有字符都是字母或数字则返回 True,否则返回 False。
isalpha()如果字符串至少有一个字符并且所有字符都是字母则返回 True,否则返回 False。
isdecimal()如果字符串只包含十进制数字则返回 True,否则返回 False。
isdigit()如果字符串只包含数字则返回 True,否则返回 False。
islower()如果字符串中至少包含一个区分大小写的字符,并且这些字符都是小写,则返回 True,否则返回 False。
isnumeric()如果字符串中只包含数字字符,则返回 True,否则返回 False。
isspace()如果字符串中只包含空格,则返回 True,否则返回 False。
istitle()如果字符串是标题化(所有的单词都是以大写开始,其余字母均小写),则返回 True,否则返回 False。
isupper()如果字符串中至少包含一个区分大小写的字符,并且这些字符都是大写,则返回 True,否则返回 False。
join(sub)以字符串作为分隔符,插入到 sub 中所有的字符之间。
ljust(width)返回一个左对齐的字符串,并使用空格填充至长度为 width 的新字符串。
lower()转换字符串中所有大写字符为小写。
lstrip()去掉字符串左边的所有空格
partition(sub)找到子字符串 sub,把字符串分成一个 3 元组 (pre_sub, sub, fol_sub),如果字符串中不包含 sub 则返回 (‘原字符串’, ‘’, ‘’)
replace(old, new[, count])把字符串中的 old 子字符串替换成 new 子字符串,如果 count 指定,则替换不超过 count 次。
rfind(sub[, start[, end]])类似于 find() 方法,不过是从右边开始查找。
rindex(sub[, start[, end]])类似于 index() 方法,不过是从右边开始。
rjust(width)返回一个右对齐的字符串,并使用空格填充至长度为 width 的新字符串。
rpartition(sub)类似于 partition() 方法,不过是从右边开始查找。
rstrip()删除字符串末尾的空格。
split(sep=None, maxsplit=-1)不带参数默认是以空格为分隔符切片字符串,如果 maxsplit 参数有设置,则仅分隔 maxsplit 个子字符串,返回切片后的子字符串拼接的列表。
splitlines(([keepends]))在输出结果里是否去掉换行符,默认为 False,不包含换行符;如果为 True,则保留换行符。。
startswith(prefix[, start[, end]])检查字符串是否以 prefix 开头,是则返回 True,否则返回 False。start 和 end 参数可以指定范围检查,可选。
strip([chars])删除字符串前边和后边所有的空格,chars 参数可以定制删除的字符,可选。
swapcase()翻转字符串中的大小写。
title()返回标题化(所有的单词都是以大写开始,其余字母均小写)的字符串。
translate(table)根据 table 的规则(可以由 str.maketrans(‘a’, ‘b’) 定制)转换字符串中的字符。
upper()转换字符串中的所有小写字符为大写。
zfill(width)返回长度为 width 的字符串,原字符串右对齐,前边用 0 填充。

7、转义字符及其含义

符号说明
\’单引号
\"双引号
\a发出系统响铃声
\b退格符
\n换行符
\t横向制表符(TAB)
\v纵向制表符
\r回车符
\f换页符
\o八进制数代表的字符
\x十六进制数代表的字符
\0表示一个空字符
\\反斜杠

8、去除字符中得’\xa0’

text = '738.7\xa0MB'
text = ''.join(text.split())
print(text)

==> 738.7MB

9、字符串类型判断

函数说明
str.isalnum()所有字符都是数字或者字母
str.isalpha()所有字符都是字母
str.isdigit()所有字符都是数字
str.isspace()所有字符都是空白字符、t、n、r

二、异常

1、处理单个异常

try:
    print(5/0)  # 该行为测试的语句
except ZeroDivisionError as e:  # 如果测试的语句出现except后的异常(例中的ZeroDivisionError),则执行下一行代码,否则跳过此模块
    print(e)  # 打印错误名称

2、分开处理多个异常

a = [0, 1]
try:
    print(a[3])
    print(5/0)  # 语句在上一行就遇到错误传到except里面去了,未检测到此语句
except ZeroDivisionError as e:  # 处理Error1异常
    print(e)
except IndexError as e:  # 处理Error2异常
    print(e)

3、统一处理多个异常

a = [0, 1]
try:
    print(a[3])
    print(5/0)   # 语句在上一行就遇到错误传到except里面去了,未检测到此语句
except (ZeroDivisionError, IndexError) as e:  # 处理Error1异常
    print(e)

4、完整结构

a = [0, 1]
try:
    print(a[1])
    print(5/1)   # 语句在上一行就遇到错误传到except里面去了,未检测到此语句
except (ZeroDivisionError, IndexError) as e:  # 处理Error1异常
    print(e)
else:
    print("没有错误")
finally:
    print("不管有没有错,都执行finally")

5、不确定异常类型

a = [0, 1]
try:
    print(a[3])
    print(5/0)   # 语句在上一行就遇到错误传到except里面去了,未检测到此语句
except Exception as e:  # 处理Error1异常
    print(e)

6、常见错误总结

错误说明
AttributeError试图访问一个对象没有的树形,比如foo.x,但是foo没有属性x
IOError输入/输出异常;基本上是无法打开文件
ImportError无法引入模块或包;基本上是路径问题或名称错误
IndentationError语法错误(的子类) ;代码没有正确对齐
IndexError下标索引超出序列边界,比如当x只有三个元素,却试图访问x[5]
KeyError试图访问字典里不存在的键
KeyboardInterruptCtrl+C被按下
NameError使用一个还未被赋予对象的变量
SyntaxErrorPython代码非法,代码不能编译(个人认为这是语法错误,写错了)
TypeError传入对象类型与要求的不符合
UnboundLocalError试图访问一个还未被设置的局部变量,基本上是由于另有一个同名的全局变量,导致你以为正在访问它
ValueError传入一个调用者不期望的值,即使值的类型是正确的

7、自发异常

class CustomError(Exception):
    def __init__(self,ErrorInfo):
        super().__init__(self) #初始化父类
        self.errorinfo=ErrorInfo
    def __str__(self):
        return self.errorinfo


if __name__ == '__main__':
    try:
        raise CustomError('自定义异常')
    except Exception as e:
        print(e)

三、join,split函数

1、join()函数

seq1 = ['hello', 'good', 'boy', 'doiido']
seq2 = "hello good boy doiido"
seq3 = ('hello', 'good', 'boy', 'doiido')
seq4 = {'hello': 1, 'good': 2, 'boy': 3, 'doiido': 4}
print(','.join(seq1))
print(','.join(seq2))
print(','.join(seq3))
print(','.join(seq4))
hello,good,boy,doiido
h,e,l,l,o, ,g,o,o,d, ,b,o,y, ,d,o,i,i,d,o
hello,good,boy,doiido
hello,good,boy,doiido

2、os.path.join()函数

import os
path = os.path.join('/hello/', 'good/boy/', 'doiido')
print(path)
/hello/good/boy/doiido

3、split()函数

str1 = "s13-d21.avi_252_452"
print(str1.split('_'))  # 1
print(str1.split('_', 1))  # 2
['s13-d21.avi', '252', '452']
['s13-d21.avi', '252_452']

四、保留小数的几种方法

1、保留两位小数且做四舍五入处理

from decimal import Decimal

x = 3.1415926
print("%.2f" % x)
print(round(x, 2))
print(Decimal(x).quantize(Decimal("0.00")))

2、保留两位小数且不做四舍五入处理

import re

x = 3.1415926
print(str(x).split(".")[0] + "." + str(x).split(".")[1][:2])
print(re.findall(r"\d{1,}?\.\d{2}", str(x)))

五、一行式

1、if语句

在这里插入图片描述

2、all函数

判断一个tuple或者list是否全部不为空、0、False。
如果全部不为空、0、False,则返回True;否则(只要有空或0或False)返回False。

注意:空tuple(小括号)和空list(中括号)、空字典dictionary、空集合set(大括号)的返回值是True

found = all(thing==other_thing for thing in things)

3、any()函数

判断一个tuple或者list是否全部为空、0、False。
如果全为空、0、False,则返回False
如果(只要有非[空或0或False])不全为空、0、False,则返回True

注意:空tuple(小括号)和空list(中括号)、空字典dictionary、空集合set(大括号)的返回值是False

found = any(thing==other_thing for thing in things)

六、集合

集合(s).方法名等价符号方法说明
s.issubset(t)s <= t子集测试(允许不严格意义上的子集):s 中所有的元素都是 t 的成员
\s < t子集测试(严格意义上):s != t 而且 s 中所有的元素都是 t 的成员
s.issuperset(t)s >= t超集测试(允许不严格意义上的超集):t 中所有的元素都是 s 的成员
\s > t超集测试(严格意义上):s != t 而且 t 中所有的元素都是 s 的成员
s.union(t)s | t合并操作:s “或” t 中的元素
s.intersection(t)s & t交集操作:s “与” t 中的元素
s.differences - t差分操作:在 s 中存在,在 t 中不存在的元素
s.symmetric_difference(t)s ^ t对称差分操作:s “或” t 中的元素,但不是 s 和 t 共有的元素
s.copy()返回 s 的拷贝(浅复制)
以下方法仅适用于可变集合
s.updates |= t将 t 中的元素添加到 s 中
s.intersection_update(t)s &= t交集修改操作:s 中仅包括 s 和 t 中共有的成员
s.difference_update(t)s -= t差修改操作:s 中包括仅属于 s 但不属于 t 的成员
s.symmetric_difference_update(t)s ^= t对称差分修改操作:s 中包括仅属于 s 或仅属于 t 的成员
s.add(obj)加操作:将 obj 添加到 s
s.remove(obj)删除操作:将 obj 从 s 中删除,如果 s 中不存在 obj,将引发异常
s.discard(obj)丢弃操作:将 obj 从 s 中删除,如果 s 中不存在 obj,也没事儿_
s.pop()弹出操作:移除并返回 s 中的任意一个元素
s.clear()清除操作:清除 s 中的所有元素

七、文件处理

1、文件处理模式

模式描述
r以只读方式打开文件。文件的指针将会放在文件的开头。这是默认模式。
rb以二进制格式打开一个文件用于只读。文件指针将会放在文件的开头。这是默认模式。
r+打开一个文件用于读写。文件指针将会放在文件的开头。
rb+以二进制格式打开一个文件用于读写。文件指针将会放在文件的开头。
w打开一个文件只用于写入。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。
wb以二进制格式打开一个文件只用于写入。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。
w+打开一个文件用于读写。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。
wb+以二进制格式打开个文件用于读写。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。
a打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。
ab以二进制格式打开一个文件用于追加。 如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。
a+打开一一个文件用于读写。如果该文件已存在,文件指针将会放在文件的结尾。文件打开时会是追加模式。如果该文件不存在,创建新文件用于读写。
ab+以二进制格式打开一个文件用于追加。 如果该文件已存在,文件指针将会放在文件的结尾。如果该文件不存在,创建新文件用于读写。
‘x’如果文件已经存在,使用此模式打开将引发异常
‘b’以二进制模式打开文件
‘t’以文本模式打开(默认)
‘+’可读写模式(可添加到其他模式中使用)
‘U’通用换行符支持

2、文件对象的方法

方法说明
f.read()为了读取一个文件的内容,调用 f.read(size), 这将读取一定数目的数据, 然后作为字符串或字节对象返回。size 是一个可选的数字类型的参数。 当 size 被忽略了或者为负, 那么该文件的所有内容都将被读取并且返回。
f.readline()从文件中读取单独的一行。换行符为 ‘\n’。如果返回一个空字符串, 说明已经已经读取到最后一行。
f.readlines()将返回该文件中包含的所有行。如果设置可选参数 sizehint, 则读取指定长度的字节, 并且将这些字节按行分割。
f.write(string)将 string 写入到文件中, 然后返回写入的字符数。
f.writelines(seq)向文件写入字符串序列seq,seq应该是一个返回字符串的可迭代对象
f.tell()返回文件对象当前所处的位置, 它是从文件开头开始算起的字节数。
f.seek(offset, from)在文件中移动文件指针,从from(0代表文件起始位置,1代表当前位置,2代表文件末尾)偏移offset个字节
f.truncate([size=file.tell()])截取文件到size个字节,默认是截取到文件指针当前位置
f.close()关闭文件
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值