Python3笔记

将字符串形式的列表转化成列表

两种方法:
一、用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]

序列筛选

  1. 列表推导式
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]
  1. 内建的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 <工具名>

  1. 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。

  1. 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

你可能感兴趣的:(Python3笔记)