文本数据读写
- python 读取文件常用的一种方式是 open()函数,open 里写文件的路径,读取后返回一个文件对象,借助 file_obj.read()函数可以调取出文件对象的数据(返回字符串),这种情况下要记得使用 close 函数把读取的文件关闭,以免造成损害。
- 另外一种读取文件的方法是利用 with 关键词来打开文件建立对象,打开的文件对象会在 with 区块内跳出时关闭文件对象。
逐行读取文件
- 逐行读取的第一种方法是直接通过循环对文件对象进行操作,每次读取出的一行行末的换行符可通过 restrip()函数删除
- 第二种方法是直接调用文件对象的 readline()方法,该方法将会返回一个字符串组成的列表,列表中每一个字符串包含一行,且有结尾换行符。通过对返回列表的操作可以实现对数据的组合
file_obj=open("D:/test.txt") |
read 函数不带参数使用时会一次读入文件的全部内容,因为会占用系统的内存,可以选择分块读入再进行拼接:
类似地,也可以对 file_obj.read()返回的字符串通过 str.replace()函数进行字符串的替换。通过 in 来搜寻拼接后的字符串中是否有搜寻的字符串。
读取文件起始位置修改
文件打开后,在调用 read 函数之前可以通过seek()
函数来改变读取开始时相对于某一位置的偏移量
file_object.seek(offset,origin)
- origin 默认为 0,表示从开头偏移 offset 个字节
- 为 1 表示从当前位置偏移 offset 个字节
- 为 2 表示从结尾处偏移 offfset 个字节
tell()
返回当前位置距离文件名开始处字节的偏移量
写入文件
可以通过对 open 函数的 mode 参数进行调整来更改对文件的操作方式:
- 默认为’r’,只供打开
- ‘w’,用来重写文件,相当于新建或者覆盖一个文件
- ‘r+’,即读又写文件
- ‘a’,append,在文件的基础上进行写入
需要注意的是对于普通文件读写想要实现先读后写的操作要写作’r+'或者先打开文件将数据读出(mode='r'
)再重新写入修改后的内容(mode='w'
),二者的区别是前者是追加写入,后者是覆盖写。这在文本数据进行替换的场景使用较为频繁,直接写入mode='w+'
时会在文件打开时将内容删除,此时fp.read()
将读取不到内容。
- 对文件进行写入时用到的是 file_obj.write()方法,该方法在写入文件时不会自动添加换行符,写入内容需以字符串的形式传递进去。
with open("D:/test.txt",'w') as fl: |
- 除了可以用 write 函数,也可以选择使用 print 函数,与 write 函数类似。print 函数在写入文件时默认在每个参数后面添加空格,每行结束添加换行。
print("latex\n",file=fl,seq='',end='')
对于二进制文件,也可以通过调整 open 函数的参数为’rb’,'wb’等进行调整
Numpy读写
文件读取:读取文件有两个函数,numpy.loadtxt
和numpy.genfromtxt()
,后者面向结构化数组和缺失数据的读取
文件储存:文件储存要借助 numpy.savetxt()
函数
arr=np.arange(0,12,0.5).reshape(4,-1) (让计算机自行计算列数,-1) |
csv文件
pandas 读写文本文件时需要借助pandas.read_table()
或者pandas.read_csv()
函数
pandas.read_table(filepath_or_buffer, sep=’\t’, |
- chunksize 参数,设置读取数据上限,在文件较大时可能会需要使用
pandas 将 DataFrame 保存为.csv 的文本文件时需要利用 DataFrame.to_csv()
函数。
DataFrame.to_csv(path_or_buf=None, sep=’,’, na_rep=”, |
- 参数说明
对于单一分割符的 csv 文件也可以使用 python 内置的 csv 模块,要使用它需要把打开的文件 fp 传到 csv.reader()中(返回可迭代对象)。更重要的是这个库提供了一种方法让我们对读取 csv 的分割符进行自定义(通过定义子类传入 reader 方法即可):
class my_dialect(csv.Dialect): |
对 csv 文件进行写入也可以利用 csv.writer 规定写入的格式:
with open('mydata.csv', 'w') as f: |
Excel 文件
与读取文本文件类似,在访问 Excel 文件时,我们借助 pandas.read_excel()
来读取文件,借助DataFrame.to_excel()
来保存 Excel 文件。与访问文本文件不同的是,这两个函数都有一个 sheet_name 参数用来表示读取的表的名称或者保存的表的名称。
#读取一个文件里的多张表时这样可以增加读取速度 |
二进制数据
Numpy 读写文件
文件读取:读取二进制文件要用到numpy.load()
函数
#读取时扩展名不能省略 |
文件储存:保存单个数组为后缀名是.npy 的二进制文件用的是numpy.save()
函数,保存多个数组到一个后缀名为.npz 的文件用到的函数是numpy.savez()
(按照传入函数的参数先后顺序进行保存,可以通过变量名=数组名的形式给保存数组赋予名称,再次打开数组时直接按照字典的格式索引即可)
import numpy as np |
Pandas读写
存储为二进制文件的一个最快方法是使用 python 内置的 pickle,pd 对象都有一个to_pickle()
方法将数据以 pickle 的格式写入磁盘。读取时利用read_pickle()
方法,但是需要注意的是 pickle 文件不能长期保存(大概是因为翻译规则会随着 library 的变化经常更改)
pd 有两种支持数据存为二进制的格式:HDF5 和 MessagePack
HDF5
HDF5 常用来存储数组数据,这种格式本身是一个 C 的库,但是提供了 matlab、Python 等借口。
- 多种压缩模式,存储高效,但不适合放在内存中
- 非数据库,适合于一次写入多次读取的数据集(同时写入多个容易崩溃)
frame = pd.DataFrame({'a': np.random.randn(100)}) |
Interacting with Databases
pd 提供了简便获取数据库数据的方法
- 使用 sqlite3 创建的数据库将数据转为 df 相对麻烦
- sqlalchemy 的灵活性使得 pd 可以很容易实现与数据库交互
""" |
利用numpy的函数产生模拟数据集
参见numpy中数据集的产生