将字符串形式的列表转化成列表
两种方法:
一、用import ast 调用ast.literal_eval()函数
>>> fruits = "['apple','orange','banana']"
>>> import ast
>>> fa = ast.literal_eval(fruits)
>>> print(fa)
['apple', 'orange', 'banana']
>>> print(type(fa))
二、直接用python里的eval( )函数
>>> fruits = "['apple','orange','banana']"
>>> fb = eval(fruits)
>>> print(fb)
['apple', 'orange', 'banana']
>>> print(type(fb))
eval功能可谓非常强大,即可以做string与list,tuple,dict的类型转换,还可以做计算器使用:
>>> eval("1+2")
3
甚至,可以对它能解析的字符串都做处理,而不顾忌可能带来的后果!所以说eval强大的背后,是巨大的安全隐患,比如用户恶意输入字符串。而ast.literal_eval()更为安全。
dict取值防止报错
使用d['k']取值,如果不存在名为k的键会直接报错,防止报错可使用dict内置的get(key[,default])
方法或setdefault(key[,default])
方法。
不存在的键会返回default。default默认为None,可自定义。setdefault()还会向原dict补充一对键值。
Python获取对象属性的3种方法
- 方法一:使用属性运算符
print(xmr.name)
- 方法二:通过属性字典dict
print(xmr.__dict__['name'])
- 方法三:通过getattr函数
print(getattr(xmr, 'name'))
序列逆置
reversed()
对括号内的序列进行逆置,头变尾,尾变头,返回一个可迭代的reversed对象(迭代器),可以直接迭代,但需要使用list()转化为列表才能被正常print。
>>>l1 = [1,3,2]
>>>l2 = list(reversed(l))
>>>l2
[2,3,1]
相对应的列表对象方法:list.reverse()
,可以把原列表对象直接逆置,没有返回值,只能用于列表。注意可能会污染原数据。
序列排序
sorted() 的使用方法:
>>>a = [5,7,6,3,4,1,2]
>>> b = sorted(a) # 保留原列表
>>> a
[5, 7, 6, 3, 4, 1, 2]
>>> b
[1, 2, 3, 4, 5, 6, 7]
sorted()可加额外参数【cmp或key】和reverse
>>> L=[('b',2),('a',1),('c',3),('d',4)]
>>> sorted(L, cmp=lambda x,y:cmp(x[1],y[1])) # 参数cmp,lambda双参,自定义比较两元素的方式
[('a', 1), ('b', 2), ('c', 3), ('d', 4)]
>>> sorted(L, key=lambda x:x[1]) # 参数key,lambda单参,自定义要比较元素中的什么
[('a', 1), ('b', 2), ('c', 3), ('d', 4)]
>>> sorted(students, key=lambda s: s[2], reverse=True) # 按年龄降序
[('john', 'A', 15), ('jane', 'B', 12), ('dave', 'B', 10)]
lambda
中只能写一个表达式,不可写多行代码,不可有赋值操作。所有lambda表达式都可改为常规方法,后文不再赘述。
序列迭代map()
针对序列中的元素进行逐个处理,第一个参数是处理方式,第二个参数是原序列,返回一个可迭代map对象,与原序列元素个数相同
l1 = [1,2,3]
l2 = list(map(lambda x:x+1, l1))
l2值为[2, 3, 4]
序列筛选
- 列表推导式
mylist = [1, 2, 3, -4, -5, 6, 7, 8, 9]
new_list1 = [n for n in mylist if n > 0 ]
print(new_list1)
#result:[1, 2, 3, 6, 7, 8, 9]
- 内建的filter()函数
>>> mylist = [1, 2, 3, -4, -5, 6, 7, 8, 9]
>>> new_list2 = list(filter(lambda n:n>0, mylist))
>>> new_list2
[1, 2, 3, 6, 7, 8, 9]
python操作excel
常用工具对比:
xlrd:可读xls、xlsx;
xlwt:可写xls;
xlwings:可读写,依赖于pywin32,需要安装有excel软件,支持.xls和.xlsx格式
openpyxl:可读写,不需要excel软件,仅支持.xlsx格式,不支持.xls
各种工具各有特色,根据实际情况选择合适的工具。
某知名web框架使用的是xlrd、xlwt、openpyxl三者配合以兼容Linux服务器环境。
个人办公一般的数据处理推荐使用openpyxl,必须要处理xls的情况再用xlwings。
三者的安装方式相同,在有pip的情况下运行pip install <工具名>
;使用前导入:import <工具名>
- xlwings
import xlwings as xw
#连接到excel
workbook = xw.Book(r'path/myexcel.xlsx')#连接excel文件
#连接到指定单元格
data_range = workbook.sheets('Sheet1').range('A1')
#写入数据
data_range.value = [1,2,3]
#保存
workbook.save()
如果没有MS office,只有WPS,尝试添加app = xw.App(spec='wpsoffice')
,然后使用app代替xw。
- openpyxl
import openpyxl
# 新建文件(工作簿)
workbook = openpyxl.Workbook()
# 新建工作表
new_sheet = workbook.create_sheet()
# 在当前活动工作表中写入内容
workbook.activesheet['A1'] = 'data'
# 保存文件
workbook.save('test.xlsx')
# 打开文件
wb = openpyxl.load_workbook("test.xlsx")
# 在工作表中写入一整行(传入一个列表作为参数)
new_sheet.append([1,2,3])
# 在工作表中读取首行的首格(sheet.rows获得按行迭代器,可for循环,但不能方括取值;可转化为二维列表,先行后列)
list(sheet.rows)[0][0].value
注意在写文件路径的地方,后缀是必不可少的,Windows只能使用绝对路径,Linux可以使用绝对路径
文本文件操作
data = '123'
with open('file.txt','w') as f:
f.write(data) # 写
with open('file.txt','r') as f:
data = f.read() # 读
系统目录操作
将目录中的文件名保存到列表中:
import os
file_names = os.dirfile('dir_name')
备份与还原依赖包
pip存在的情况下,生成requirements.txt文件
pip freeze > requirements.txt
或者使用pipreqs
# 安装
pip install pipreqs
# 在当前目录(./)生成
pipreqs ./ --encoding=utf8 --force
pipreqs可以找到当前项目的所有组件及其版本,与pip freeze
相比,pipreqs
只记录指定项目所依赖的组件,而pip freeze
会记录当前python环境下所有安装的组件,会有和项目不相关的组件被记录下来。
安装requirements.txt依赖
pip install -r requirements.txt