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))
<class 'list'>

二、直接用python里的eval( )函数

>>> fruits = "['apple','orange','banana']"
>>> fb = eval(fruits)
>>> print(fb)
['apple', 'orange', 'banana']
>>> print(type(fb))
<class 'list'>

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
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,504评论 6 496
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,434评论 3 389
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 160,089评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,378评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,472评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,506评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,519评论 3 413
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,292评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,738评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,022评论 2 329
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,194评论 1 342
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,873评论 5 338
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,536评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,162评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,413评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,075评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,080评论 2 352

推荐阅读更多精彩内容

  • 说明 本笔记参考的Python3教程 笔记只是自己在学习过程中,查漏补缺的零星记录,建议自己系统学习教程 笔记 交...
    惑也阅读 445评论 0 1
  • python学习笔记 声明:学习笔记主要是根据廖雪峰官方网站python学习学习的,另外根据自己平时的积累进行修正...
    renyangfar阅读 3,032评论 0 10
  • 写在前面的话 代码中的# > 表示的是输出结果 输入 使用input()函数 用法 注意input函数输出的均是字...
    FlyingLittlePG阅读 2,751评论 0 8
  • py函数:1.print()2.exit()3.input()4.int() 转为int类型5...
    MORESIR阅读 373评论 0 1
  • Python基础知识_0001 1.0 Python是一种怎样的语言 Python是一门跨平台、开源、免费的解释型...
    爱学习的小白F1阅读 1,089评论 0 1