需要掌握文件的读写的各种基础方法:
基本文件的打开方式:
fp = open('file_name', 'mode') #其实就是生成一个文件对象
...
...
fp.close()
mode可选,会有不同的效果:
'r' open for reading (default)
'w' open for writing, truncating the file first
'x' create a new file and open it for writing
'a' open for writing, appending to the end of the file if it exists
'b' binary mode
't' text mode (default)
'+' open a disk file for updating (reading and writing)
也可以用此方法更方便的创造一个文件对象:
>>> with open('workfile', 'r') as f:
... read_data = f.read()
>>> f.closed
True
打开文件对象之后,就可以进行读/写了:
f.read() #一次性读取整个文件
f.read(4) #读取四个字节
f.write(astr)
迭代文件内容:
>>> for line in f.readlines():
... print(line, end='')
...
文件内容第一行显示
文件内容第二行显示
等等
或者可以这样迭代,更加方便:
>>> for line in f:
... print(line, end='')
...
文件内容第一行显示
文件内容第二行显示
等等
python对象的序列化:
如果是基础的数据结构,其中的内容也都是可用文本看到的,用json
序列化。如果是复杂的python对象,用pickle
序列化。
例如:
#对象序列化到本地
with open('a_list.txt', 'w') as f:
a_list = [1,2,3,4]
json.dump(a_list, f)
#这样就将a_list这个对象存储到了本地的一个文本文件中
#下次直接从这个文本文件中加载,就能获得a_list这个对象
#json.dump(ensure_ascii=True)默认为ensure_ascii=True,这样会让存储到本地文件中的中文显示‘乱码’。改成True就好了。
#从本地加载一个对象
with open('a_list.txt') as f:
the_list = json.load(f)
json还有.loads()
,dumps()
的方法,可以将信息从字符串到python对象之间来回转换。
一个复杂的对象,比如一个function对象,存储到本地也看不出是什么东西,是不能用json
存储的,因为json
的存在就是为了方便各种编程语言交换数据。如果不能用文本交换数据的话,就违反了json
存在的原则了。所以我们需要pickle
这个库。
pickle
的使用方法和json
类似,不再赘述。
处理图像数据需要PIL.Image
这个库。可以用这个库读取、修改、甚至创造图像。
安装这个库pip install Image
#打开图像,获取图像的一些数据:
from PIL import Image
#获取图像对象
img = Image.open('test.png')
#获取图片高度、宽度
h, w = img.size
#用默认图片查看软件查看图片:
img.show()
#查看图片文件名:
img.filename
#获取图片的像素:
img.getpixel((heighth, weighth))
#如果图片是RGB三维的,那么就会得到如下格式的数据:(62, 131, 200)
#如果图片是灰度图,会得到一个数值
#如果是黑白图,会得到0或者1
#将RGB图片转换为二值图像
img_gray = img.convert('L') #先转化为灰白图
tab = [0 if i < 160 else 1 for i in range(256)]
black_white_img = img_gray.point(tab) #灰白图转化为黑白图
#图片的保存:
img.save('file_name.png')
需要使用python内置的csv模块
csv.reader(iterable, delimiter=',')
csv.writer(fileobj, delimiter=',')
#打开了读、写器之后,就可以方便的读写csv文件了。
csv模块只适合简单读取、遍历.csv文件,不适合做复杂的筛选、修改工作。后者这样的工作要交给pandas这个神器。所以这里暂时先一笔带过。
总览Numpy框架:
+ - * /
这些符号也可以。numpy的核心是ndarray
对象,它是封装了python基本数据类型的n维数组。numpy数组有如下几个特点:
比如计算两个数组对位相乘:
- python数组实现:
a = [1, 2, 3] b = [4, 5, 6] ans = [i*j for i, j in zip(a, b)]
- numpy数组实现:
a = np.array([1,2,3]) b = np.array([4,5,6]) ans = a*b
np数组让计算更接近数学符号!np的计算面向np的数组,而不是其中的一个一个元素。
np数组的属性:
创建简单数组
np.array([1,2,3,4]).reshape((2,2)).astype(np.float)
np.zeros(shape, dtype=float) #纯零矩阵
np.ones(shape, dtype=float) #纯幺矩阵
np.eye(N, dtype=float) #单位矩阵
np.empty(shape, dtype=float) #空阵
创建随机矩阵
在指定范围创建数组
np.arange(low, high, step=) #开区间,包括low,不包括high
np.linsapce(low, high, num=) #闭区间,包括low, high
从已有数组创建新数组
np.asarray(array, dtype=None) #获取一个数组array的副本,拥有和array相同的地址
np.empty_like(a) #创建和a相同形状的一个空数组
np.zeros_like(a) #创建和a相同形状的一个全零数组
np.ones_like(a) #创建和a相同形状的一个全幺数组
构造复杂数组
整个数组的重复
np.tile(a, n)
#如果a=array([1, 2, 3]), 用此方法重复3次后,得到array([1, 2, 3, 1, 2, 3, 1, 2, 3])
数组内各个元素的重复
np.repeat(a, 3)
或者
a.repeat(3)
#如果a=array([1, 2, 3]), 用此方法重复3次后,得到array([1, 1, 1, 2, 2, 2, 3, 3, 3])
数组的合并
append
np.append([1,2,3],[[4,5,6],[7,8,9]])
>>>array([1, 2, 3, 4, 5, 6, 7, 8, 9])
np.append([[1,2,3]], [[4,5,6]], axis=0)
>>>array([[1, 2, 3],
[4, 5, 6]])
np.append([[1,2,3]], [[4,5,6]], axis=1)
>>>array([[1, 2, 3, 4, 5, 6]])
concatenate与append基本相似,只不过是把两个合并对象合并到了一个元组内
np.concatenate(([[1,2,3]], [[4,5,6]]), axis=0)
>>>array([[1, 2, 3],
[4, 5, 6]])
数组拆分
何为pandas?:panel + data + analysis
panel:面板数据——计量经济学
基于matplotlib,能简便的画图
基于numpy,在计算上有较大优势
支持多种类型的文件的读写
有三大数据结构: