满满干货!20个Python使用的小技巧

Python031

满满干货!20个Python使用的小技巧,第1张

本节对一些 Python 易混淆的操作进行对比。

1.1 有放回随机采样和无放回随机采样

1.2 lambda 函数的参数

1.3 copy 和 deepcopy

复制和变量别名结合在一起时,容易混淆:

对别名的修改会影响原变量,(浅)复制中的元素是原列表中元素的别名,而深层复制是递归地进行复制,对深层复制的修改不影响原变量。

1.4 == 和 is

1.5 判断类型

1.6 字符串搜索

1.7 List 后向索引

这个只是习惯问题,前向索引时下标从0开始,如果反向索引也想从0开始可以使用~。

2.1 读写 CSV 文件

注意,当 CSV 文件过大时会报错:_csv.Error: field larger than field limit (131072),通过修改上限解决

csv 还可以读以 分割的数据

2.2 迭代器工具

itertools 重新定义了很多迭代器工具,例如子序列工具:

序列排序:

多个序列合并:

2.3 计数器

计数器可以统计一个可迭代对象中每个元素出现的次数。

2.4 带默认值的 Dict

当访问不存在的 Key 时,defaultdict 会将其设置为某个默认值。

2.5 有序 Dict

3.1 输出错误和警告信息

向标准错误输出信息

输出警告信息

控制警告消息的输出

3.2 代码中测试

有时为了调试,我们想在代码中加一些代码,通常是一些 print 语句,可以写为:

一旦调试结束,通过在命令行执行 -O 选项,会忽略这部分代码:

3.3 代码风格检查

使用 pylint 可以进行不少的代码风格和语法检查,能在运行之前发现一些错误

3.4 代码耗时

耗时测试

测试某代码块耗时

代码耗时优化的一些原则

4.1 argmin 和 argmax

argmax同理。

4.2 转置二维列表

4.3 一维列表展开为二维列表

#coding=utf-8

records = []

record = {}

with open("data.txt") as f:

    while True:

        line = f.readline()

        if not line:

            if len(record)!= 0: records.append(record)

            break

        field = line[line.find(":") + 1:].strip()

        if line.startswith("ScopeId"):

            if len(record)!= 0: records.append(record)

            record = {}

            record["ScopeId"] = field

        elif line.startswith("Name"):

            record["Name"] = field

        elif line.startswith("Free"):

            record["Free"] = field

        elif line.startswith("InUse"):

            record["InUse"] = field

        elif line.startswith("PercentageInUse"):

            record["PercentageInUse"] = field

# 设置缺省项            

for r in records:

    r.setdefault("InUse", 0)

    r.setdefault("PercentageInUse", 0)

    r.setdefault("Name", "")

    r.setdefault("Free", 0)

    

print records

假如你的5文件在同一个文件夹中,路径为path

file_name_list = ['usa', 'china', 'uk', 'canada', 'japan']

data_list = []

for i in file_name_list:

data_list.append(pd.read_excel(path + '/%s.xlsx' % i))

data = pd.concat(data_list)