Python查漏补缺

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()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值