python随笔记录
1、python的推导式
推导式结构: 表达式 for 迭代变量 in 可迭代对象 [if 条件表达式]
a = [ i * 2 for i in range(10) ]
print(a)
2、python文件基本操作
# 文件读取,写入
f = open("a.txt", mode='w', encoding="UTF-8")
f.write('今天天气不错', )
f.close()
# 文件内容读出
f = open('a.txt', mode='r', encoding="UTF-8")
content = f.read()
print(content)
f.close()
# 目的是为了保存程序运行过程中,产生的数据。方便以后直接使用这些已经保存的数据
# 流程:
# 打开,
# 读写
# 关闭
3、python中列表作为形参(易错)
python中,如果一个函数的形参有默认值,我们称之为缺省参数,当这个缺省参数的值是一个列表,则每次调用这个函数,这个列表都是累计变化的,并不会每次调用重新生成一个新列表。
def add_num(num, temp=[]):
temp.append(num)
print(temp)
add_num(11)
add_num(22)
add_num(33)
按正常思考,每次调用这个方法的时候,打印出列表值都是新的值,第一次是 11, 第二次重新开始是22
实际第一次是[11],第二次是[11, 22],并不是一个重新开始的列表
4、python中对列表中的字典进行排序
people_list = [
{"name": "张三", "age": 25, "city": "北京"},
{"name": "李四", "age": 30, "city": "上海"},
{"name": "王五", "age": 35, "city": "深圳"},
{"name": "赵六", "age": 40, "city": "广州"}
]
def get_value(temp):
return temp["age"]
people_list.sort(key=get_value) # 给key指定一个函数名,以后key会自动调用这个函数,然后把people_list这个列表中的字典往里面传
print(people_list)
也可以使用匿名函数
people_list = [
{"name": "张三", "age": 25, "city": "北京"},
{"name": "李四", "age": 30, "city": "上海"},
{"name": "王五", "age": 35, "city": "深圳"},
{"name": "赵六", "age": 40, "city": "广州"}
]
# 匿名函数的使用方法是 lambda 形参:返回值
people_list.sort(key=lambda x: x["age"]) #这一行是形参是x,返回的值是x这个字典的["age"],所以会在 people_list这个列表里找到所有字典,然后在这个字典的找age.根据这个排序如果是字典里套字典会怎么办呢 ??
print(people_list)
5、os.walk()使用
# os模块中walk的功能
# walk 能够遍历出文件夹中的所有文件,文件夹
import os
# os.walk()返回指向路径下的所有文件夹和文件,形式是dirpath(文件路径), dirnames(目录名), filenames(文件名)。使用的是深度遍历的方式
for temp in os.walk("./"):
print('_' * 30)
print(temp)
6、python使用递归方式遍历文件夹
listdir怎么用的
import os
# os.listdir(path_name)列举出这个路径下的文件和文件夹
def list_file_or_floder(path_name):
temp = os.listdir(path_name)
print(temp)
list_file_or_floder("./aa")
怎么遍历文件夹
# 遍历文件夹
import os
# os.listdir(path_name)列举出这个路径下的文件和文件夹,但是只是一层的路径
def list_file_or_floder(path_name):
# 列举出这个路径下的文件和文件夹,不包含这个路径本身的名字
file_floder_names = os.listdir(path_name)
print(file_floder_names)
# 循环路径下的文件和文件夹
for name in file_floder_names:
temp_path_name = path_name + '/' + name
# 判断这个文件是不是一个文件夹,
if os.path.isdir(temp_path_name):
print("%s是文件夹 " % name)
list_file_or_floder(temp_path_name) # 判断出name是文件夹名字的时候,使用函数递归操作,传入这个name的目录。而temp_path_name就是包含这个name
else:
print("%s是文件 " % name)
list_file_or_floder("./")
7、python的三元运算符(三目运算符)
- 三元运算符的语法格式: 条件成立返回的数据 if 条件 else 条件不成立返回的数据
一般会用一个变量保存这个返回的值
result = True if 10>0 else False
8、python的负索引和切片
# 负索引-字符串
info = 'abcdef'
print(info[-1]) # f
# 切片-字符串
print(info[1:-1]) # bcde 切片的时候, 后面是闭区间,所以取不到-1位置的。
print(info[-3:-1]) # de
print(info[-1:-3:-1]) # fe
print(info[-1::-1]) # fedcba
# 负索引-列表
nums = [11, 22, 33, 55]
print(nums[-1]) # 55
# 切片-列表
print(nums[1:-1]) # [22, 33]
print(nums[-3:-1]) # [22, 33]
print(nums[-1:-3:-1]) # [55, 33]
9、join 和 split结合
str = "life is short"
words = str.split(" ") # 以空格为分隔符,切割字符
print(words)
word2 = words[::-1]
str = " ".join(word2) # 把列表连接起来
print(str)
word3 = ("aa", "bb", "cc") # 把元组连接起来
str2 = "_".join(word3)
print(str2)
10、python的打乱列表的顺序
import random
nums=[11,22,33,44,55,66]
random.shuffle(nums)
print(nums)
11、python格式化字符串format
# 格式方式1
print(' %s %d %.2f' % ('11111', 1234, 3.1415))
# 结果是11111 1234 3.14
"""
字符串.format()形式, format后面是要收集好,传入的字符串内容,并且每次内容有个标记。默认就是位置标记,第一个是{0},之后是{1}
。format前面是要确认清楚,挑选后面哪个字符。
"""
# 1、通过位置 字符串.format()
print("-------通过位置------")
print("{0},{1}".format("aa", "bb")) # aa,bb formate后面的内容按0,1,2这样排序, 可以选择对应序号的,填写到前面
print("{2},{1}".format("aa", "bb", "cc")) # cc,bb
print("{0}-{1}".format("aa", "bb")) # aa-bb
print("{},{}".format("aa", "bb")) # aa,bb
# 2、通过关键字参数
print('--------------通过关键字参数-------------------------')
print("{name},{age}".format(age=18, name='ming')) # ming,18
class Person:
def __init__(self, name, age):
self.name = name
self.age = age
def __str__(self):
return "name is {a.name}".format(a=self)
print(Person("zhou", '99'))
# 3、通过映射list
print('---------------------通过list--------------')
a_list = ['zhou', 20, 'china']
print('my name is {0[0]} ,and age is {0[1]}'.format(a_list))
# 4、通过映射dict
print('-----------通过dict---------------------')
b_dict = {'name': 'zhou', 'age': 99, 'province': 'taiwan'}
print("my name is {name}, age is {age},from {province}".format(**b_dict))
print("my name is {info[name]}, age is {info[age]},from {info[province]}".format(info=b_dict))
# print("my name is {info["name"]}, age is {info["age"]},from {info["province"]}".format(info=b_dict))
# 按之前的字典取值, 是要用info["name"]这样写法的。但是这种格式下就是{info[name]}
# 5、填充与对齐
print('------------填充和对齐------------')
print('**************{:>8}************'.format("123"))
print('**************{:<8}************'.format("123"))
print('**************{:0<8}************'.format("123"))
print('**************{:a<8}************'.format("123"))
"""
值是
************** 123************
**************123 ************
**************12300000************
**************123aaaaa************
"""
# 6.精度和类型
print("-------精度与类型----------------")
print('{:.2f}'.format(321.22234)) # 小数点后两位
# 7、用金额的千位分割符
print('{:,}'.format(18))
print('{:b}'.format(16)) # 二进制 10000
print('{:d}'.format(16)) # 十进制 16
print('{:o}'.format(16)) # 八进制 20
print('{:x}'.format(16)) # 十六进制 10