1.python中的深浅拷贝
浅拷贝:源对象不止一级目录的话,源做任何改动,都要影响浅拷贝。
深拷贝:源对象只有一级目录的话,源做任何改动,不影响深浅拷贝对象
深拷贝就是在内存中重新开辟一块空间,不管数据结构多么复杂,只要遇到可能发生改变的数据类型,就重新开辟一块内存空间把内容复制下来,直到最后一层,不再有复杂的数据类型,就保持其原引用。这样,不管数据结构多么的复杂,数据之间的修改都不会相互影响。
2.辅助迭代:map、zip、enumerate
map函数:
def square(x) : # 计算平方数
... return x ** 2
...
>>> map(square, [1,2,3,4,5]) # 计算列表各个元素的平方
<map object at 0x100d3d550> # 返回迭代器
>>> list(map(square, [1,2,3,4,5])) # 使用 list() 转换为列表
[1, 4, 9, 16, 25]
>>> list(map(lambda x: x ** 2, [1, 2, 3, 4, 5])) # 使用 lambda 匿名函数
[1, 4, 9, 16, 25]
zip函数:
>>> a = [1,2,3,4,5]
>>> b = [9,8,7,6,5]
>>> c = zip(a,b)
>>> c
[(1, 9), (2, 8), (3, 7), (4, 6), (5, 5)]
>>>zip(*c)
[(1,2,3,4,5), (9,8,7,6,5)]
enumerate函数:
>>> L=['Adam','Lisa','Bart','Paul']
>>> for index,name in enumerate(L):
print index,'-',name
0 - Adam
1 - Lisa
2 - Bart
3 - Paul
3.文件操作:读写、CSV、XML和JSON文件操作及转换
使用pandas快速将csv转换为字典列表,再使用dicttoxml库将其转换为xml格式,还可以将其保存为JSON格式:
import pandas as pd from dicttoxml import dicttoxml import json # 创建一个DataFrame data = {'Name': ['Emily', 'Katie', 'John', 'Mike'], 'Goals': [12, 8, 16, 3], 'Assists': [18, 24, 9, 14], 'Shots': [112, 96, 101, 82] } df = pd.DataFrame(data, columns=data.keys()) # 将DataFrame转化为一个字典并且将它存储到json文件中 data_dict = df.to_dict(orient="records") with open('output.json', "w+") as f: json.dump(data_dict, f, indent=4) # 将DataFrame转化为一个字典并且将它存储到xml文件中 xml_data = dicttoxml(data_dict).decode() with open("output.xml", "w+") as f: f.write(xml_data)
JSON数据:
可以通过pandas或者使用Python的内置csv模块轻松地将我们的数据存储为CSV文件,而在转化为成XML时,我们使用的是dicttoxml库
import json import pandas as pd import csv # 从json文件中读取数据 # 数据存储在一个字典列表中 with open('output.json') as f: data_listofdict = json.load(f) # 以列表中的字典写入倒csv文件中 keys = data_listofdict[0].keys() with open('saved_data.csv', 'w') as output_file: dict_writer = csv.DictWriter(output_file, keys) dict_writer.writeheader() dict_writer.writerows(data_listofdict)
XML数据:
与JSON和CSV相比,XML确实具有一些额外的特性:你可以使用名称空间来构建和共享标准结构、更好的继承表示,以及用XML schema、DTD等表示数据的行业标准化方法。
要读取XML数据,我们将使用Python内置的XML模块的子模块ElementTree。这里,我们可以使用xmltodict
库将ElementTree对象转换为字典。一旦有了字典,我们就可以像上面一样将字典换转换为CSV、JSON或pandas的 DataFrame
import xml.etree.ElementTree as ET import xmltodict import json tree = ET.parse('output.xml') xml_data = tree.getroot() xmlstr = ET.tostring(xml_data, encoding='utf8', method='xml') data_dict = dict(xmltodict.parse(xmlstr)) print(data_dict) with open('new_data_2.json', 'w+') as json_file: json.dump(data_dict, json_file, indent=4, sort_keys=True)
4.常见的库
1)os库:常见的有路径操作、进程管理、环境参数等
路径操作:os.path字库,处理文件路径及信息
进程管理:启动系统中其他程序
环境参数:获得系统软硬件信息等环境参数
2)math库:各种数字常数、数学符号的表示、幂对数函数、三角运算函数、高等特殊函数
3)pandas库:用于数据操作和数据分析
Series
构建Series:ser_obj = pd.Series(range(10))
由索引和数据组成(索引在左<自动创建的>,数据在右)。
获取数据和索引:ser_obj.index; ser_obj.values
预览数据: ser_obj.head(n);ser_obj.tail(n)
DateFrame
获取列数据:df_obj[col_idx]或df_obj.col_idx
增加列数据:df_obj[new_col_idx] = data
删除列:del df_obj[col_idx]
按值排序:sort_values(by = “label_name”)
4)SciPy库:scipy库建立在Numpy的基础上,用于数值运算,比如:数值积分、优化、统计、信号处理、图像处理等功能
滤波操作模块:scipy.ndimage.filters,使用快速一维分离方式计算卷积
from PIL import Image
from numpy import *
from scipy.ndimage import filters
im = array(Image.open('sample.jpg').convert('L'))
im2 = filters.gaussian_filter(im, 5) # 标准差为5
若是模糊彩色图像,则对每个颜色通道进行高斯模糊:
im = array(Image.open('smaple.jpg'))
im2 = zeros(im.shape)
for i in range(3):
im2[;, ;, i] = filters.gaussian_filter(im[;, ;, i], 5)
im2 = uint8(im2) # 或者 im2 = array(im2, 'uint8')
以图像形式保存数组
# 将数组im直接保存为图像文件
from scipy.misc import imsave
imsave('test.jpg', im)
5)opencv库:对图像进行各种操作
读取、写入图像:
import cv2 # 载入图像 im = cv2.imread('./0.png') # 打印图像尺寸 h, w = im.shape[:2] print(h, w) # 保存PNG格式图像为JPEG格式 cv2.imwrite('./0.jpg', im)
颜色空间转换:在OpenCV中,图像不是用常规的RGB颜色通道来存储的,他们用的顺序是BGR顺序。当读取一幅图像后,默认的是BGR,不过有很多转换方式可以利用。颜色空间转换函数可以用cvtColor()完成。
import cv2
# 载入图像
im = cv2.imread('./2.png')
print(im.shape)
# create a grayscale version
gray = cv2.cvtColor(im, cv2.COLOR_BGR2GRAY)
print(gray.shape)
显示图像:
#!/usr/bin/env python3 # -*- coding: utf-8 -*- import cv2 # from matplotlib import pyplot as plt from pylab import * # 添加中文字体支持 from matplotlib.font_manager import FontProperties font = FontProperties(fname=r"c:\windows\fonts\SimSun.ttc", size=14) # 载入图像 im = cv2.imread('1.jpg') # 颜色空间转换 gray = cv2.cvtColor(im, cv2.COLOR_BGR2GRAY) # 显示原始图像 fig = plt.figure() subplot(121) plt.gray() imshow(im) title(u'彩色图', fontproperties=font) axis('off') # 显示灰度化图像 plt.subplot(122) plt.gray() imshow(gray) title(u'灰度图', fontproperties=font) axis('off') show()