文件I/O、插值、拟合、随机数。
文件I/O
Python 提供了必要的函数和方法进行默认情况下的文件基本操作。你可以用 file
对象做大部分的文件操作。
打开文件
Python 内置 open()
函数来打开文件,并创建一个 file 对象
1 | file = open(path, mode="r") |
path
为字符串,包含文件的路径和名称mode
指定文件的打开模式
模式 | 描述 |
---|---|
r | 以只读方式打开文件。文件指针将会放在文件的开头。 |
r+ | 打开一个文件用于读写。文件指针将会放在文件的开头,原有内容不会被预先清空 (truncate) 。 |
w | 打开一个文件并清空所有内容用于写入。文件指针将会放在文件的开头。如果该文件不存在,创建新文件。 |
w+ | 打开一个文件用于读写。文件指针将会放在文件的开头,原有内容会被预先清空。如果该文件不存在,创建新文件。 |
a | 打开一个文件用于追加写。文件指针将会放在文件的结尾。如果该文件不存在,创建新文件进行写入。 |
a+ | 打开一个文件用于追加读写。文件指针将会放在文件的结尾。如果该文件不存在,创建新文件用于读写。 |
关闭文件
调用 file
对象的 close()
方法以关闭文件。
Python 为防止程序员忘记关闭文件,提供 with
关键字以打开文件,并在语句执行完毕后自动关闭文件。
1 | # Method 1 |
with
关键字实际上等价于 try/finally
语句,with
关键字支持用 as
创建别名。
文件写入
Python 文件写入操作使用 file
对象的 write()
方法或 writelines()
方法
write()
write()
方法用于向文件中写入单个字符串。- 它接受一个字符串作为参数,并将该字符串写入文件。
- 如果多次调用
write()
方法,每次调用将在文件中追加写入的内容。
writelines()
writelines()
方法用于向文件中写入多个字符串。- 它接受一个可迭代对象(如列表)作为参数,其中每个元素都是字符串。
- 它将迭代对象中的每个字符串写入文件。
/* 注:无论 write() 还是 writelines() 都不会自动向字符串末尾添加换行符’\n’,需要手动插入,不要被 writelines() 中的 line 所迷惑! */
文件读取
Python 文件读取使用 file
对象的 read()
方法、readline()
方法或 readlines()
方法
1 | file.read(size) |
其中 size
为读取的字节数,默认为 -1
,表示读取全部内容。转义字符 '\n'
等也占且仅占 1 个字节。
假设 foo.txt 包含以下内容
1 | Strawberry Creek Park |
执行如下 Python 代码
1 | str1 = file.read(10) # str1 = 'Strawberry' |
注:read(), readline() 和 readlines() 读取的字符串都包含行末换行符!
可以使用 .rstrip() 字符串方法删除字符串末尾的空白字符,如空格、制表符、换行符等。
文件操作
清空内容 使用 file
对象的 truncate()
方法
光标定位 使用 file
对象的 tell()
方法获知光标的当前位置,使用 seek(offset, whence=0)
移动光标
CSV 数据
对 CSV 数据的操作可使用 Pandas ,一个强大的分析结构化数据的工具集
1 | import pandas as pd |
DataFrame
DataFrame 是 Pandas 内建的表格型数据结构,包含一组带标签的列,每列可以是不同的值类型(数值、字符串、布尔型值),并共用一个行索引,默认为 RangeIndex(0,…,n) 。
1 | class pandas.DataFrame(data, index=None, columns=None, dtype=None, copy=None) |
- data 为数据,可从 dict 或 ndarray 构建
- index 为行索引,默认为
- columns 为列索引,可指定为 list of strings 标签,方便说明每列数据的意义。默认为 。
- dtype 为数据类型,默认为 None 自动推断
- copy 指定是否复制一份源数据的副本,若为 None 则依据内置规则确定
如下数据可创建为 DataFrame
对象
stu | age | sex | |
---|---|---|---|
0 | ‘Feng’ | 20 | ‘M’ |
1 | ‘Yaki’ | 21 | ‘F’ |
2 | ‘J-20’ | 7 | ‘J’ |
1 | # Method 1 |
文件读取
外置 CSV 文件的读取使用 read_csv 函数
1 | pandas.read_csv(file, header=None, names=no_default) |
- header 指示是否包含列标签,默认为 infer
- names 指定列标签,为字符串列表
数据索引
列数据 使用 dfobj['col'].to_numpy()
获取列标签为 'col'
的转为 numpy 数据类型后的数据
插值
插值使用 Scipy 中的 interpolate 模块
一维插值
1 | interp1d(x, y, kind='linear') |
interp1d 的 kind
参数可指定插值方法,默认为线性插值 (linear) ,还可指定为最近邻插值 (nearest) 、二次样条插值 (quadratic),三次样条插值 (cubic) 。一般使用 cubic 。
interp1d 返回一个可调用的函数,而非离散的预测值。
interp1d 不支持外推。
拟合
拟合使用 Scipy 中的 Optimize 模块
随机数
待更