1. 文件读取函数
with open(doc_name, mode, encoding="utf-8") as f:
data = f.read() 等读写操作
1.1 参数
参数:doc_name, 文件路径
参数: mode,
常用模式:
1.'r',只读 用read()
2.'w', 只写 用write() # 会清除之前写的内容,若没有,则新建
3.'a', 追加内容,用write() #会在已经写的内容基础上追加新的内容
参数:encoding,默认"utf-8",
注意:要读取非UTF-8编码的文本文件,需要给open()函数传入encoding参数
对参数 mode
,参见:文件读写操作。
1.2 file 对象属性
1.2.1 属性
file.closed 表示文件已经被关闭,否则为False
file.mode 文件打开时使用的访问模式
file.encoding 文件所使用的编码
file.name 文件名
file.newlines
未读取到行分隔符时为None;
只有一种行分隔符时为一个字符串;
当文件有多种类型的行结束符时,则为一个包含所有当前所遇到的行结束的列表。
file.softspace 为0表示在输出一数据后,要加上一个空格符,1表示不加
1.2.2 读操作
file.read([size]) 将文件数据作为字符串返回,可选参数size控制读取的字节数
注意:当读取大文件时,反复调用read(size)方法,每次最多读取size个字节的内容。
file.readline([size]) 每次读取一行内容
file.readlines([size]) 返回文件中行内容的列表,size参数可选
1.2.3 写操作
file.write(str) 将字符串写入文件
file.writelines(strings) 将字符串序列写入文件
2. 利用pandas读取
2.1 函数接口
返回值为 dataframe
pandas.read_csv(filepath_or_buffer, # 文件路径名,字符串类型
sep=NoDefault.no_default, # 分隔符
delimiter=None, # 定界符,备选分隔符(如果指定该参数,则sep参数失效)
header='infer', # 指定行数用来作为列名,以及数据开始行数
names=NoDefault.no_default, # 要使用的列名
index_col=None, # 用作 DataFrame 的行标签的列
usecols=None, # 返回所有列的子集,即选中的列;
squeeze=None, # 如果解析后的数据只包含一列,则返回 Series,默认值为 False
prefix=NoDefault.no_default, # 在没有列标题时,给列添加前缀。例如:添加‘X’ 成为 X0, X1, ...
mangle_dupe_cols=True, # 将重复的列‘X’...’X’表示为‘X.0’...’X.N’。默认为True,如果设定为false则会将所有重名列覆盖
dtype=None, # 每列数据的数据类型
engine=None, # 解析引擎
converters=None, # 用于转换特定列中值的函数的定义。键可以是整数或列标签
true_values=None, # 列表类型,将其视为真 True
false_values=None, # 列表类型,将其视为假 False
skipinitialspace=False, # 忽略分隔符后的空白(默认为False,即不忽略)
skiprows=None, # 需要忽略的行数
skipfooter=0, # 从文件尾部开始忽略。 (c引擎不支持)
nrows=None, # 需要读取的行数(从文件头开始算起)。
na_values=None, # 用于替换NA/NaN的值
keep_default_na=True, # 解析数据时是否包含默认 NaN 值。
na_filter=True, # 是否检查丢失值(空字符串或者是空值)
verbose=False, # 是否打印各种解析器的输出信息,例如:“非数值列中缺失值的数量”等。
skip_blank_lines=True, # 如果为True,则跳过空行;否则记为NaN。
parse_dates=None, # 解析日期
infer_datetime_format=False, # 如果设定为True并且parse_dates 可用,那么pandas将尝试转换为日期类型
keep_date_col=False, # 如果连接多列解析日期,则保持参与连接的列。
date_parser=None, # 于解析日期的函数,默认使用dateutil.parser.parser来做转换。
dayfirst=False, # DD/MM格式的日期类型
cache_dates=True, # 如果为 True,则使用惟一的、已转换日期的缓存来应用日期时间转换。
iterator=False, # 返回一个TextFileReader 对象,以便逐块处理文件。
chunksize=None, # 文件块的大小
compression='infer', # 直接使用磁盘上的压缩文件。
thousands=None, # 千分位分割符
decimal='.', # 字符中的小数点
lineterminator=None, # 行分割符,只在C解析器下使用。
quotechar='"', # 用作标识开始和解释的字符。
quoting=0, # 控制csv中的引号常量。
doublequote=True, # 双引号,当单引号已经被定义,并且quoting 参数不是QUOTE_NONE的时候,使用双引号表示引号内的元素作为一个元素使用。
escapechar=None, # 当quoting 为QUOTE_NONE时,指定一个字符使的不受分隔符限值。
comment=None, # 标识着多余的行不被解析。如果该字符出现在行首,这一行将被全部忽略。
encoding=None, # 指定字符集类型,通常指定为'utf-8';指定为Python标准字符编码
encoding_errors='strict', # 如何对待编码错误
dialect=None, # 如果没有指定特定的语言,如果sep大于一个字符则忽略。
error_bad_lines=None, # 如果一行包含太多的列,那么默认不会返回DataFrame ,如果设置成false,那么会将改行剔除(只能在C解析器下使用)。
warn_bad_lines=None, # 如果error_bad_lines =False,并且warn_bad_lines =True 那么所有的“bad lines”将会被输出(只能在C解析器下使用)。
on_bad_lines=None, # 指定遇到错误行(字段太多的行)时要做什么。可选参数:‘error’, ‘warn’, ‘skip’
delim_whitespace=False, # 指定是否使用空格(例如’或’)作为 sep。
low_memory=True, # 分块加载到内存,再低内存消耗中解析。
memory_map=False, # 如果使用的文件在内存内,那么直接map文件使用。使用这种方式可以避免文件再次进行IO操作
float_precision=None, # 指定 C 引擎应该为浮点值使用哪个转换器
storage_options=None) # 对特定存储连接有意义的额外选项
2.2 重要参数解释
2.2.1 常用参数
参数:filepath, # 文件路径名,字符串类型
参数:sep,用于分割csv文件的分隔符;默认值为 ","
注意: 1.当 engine="c"时,不能为空;
2.当 engine="python"时,可以为空,python会自动探索分隔符;
3.当 sep 是长度超过 1 的字符时,会被python视为正则表达式分割,并且忽略数据中的逗号;
参数:engine,解析引擎
可选值: 1. "c",快
2. "python",基本功能更完善
3. "pyarrow",支持多线程。
2.2.2 列名索引参数
参数:header, 可选类型:int, list of int, None;默认值 ‘infer’
作用:指定行数用来作为列名,以及数据开始行数;
注意: 1.默认值 ‘infer’ 是推断列名;
2.如果没有传递名称,则默认为与 header = 0 相同,并且从文件的第一行推断出列名称;
3.如果显式传递列名称,则行为与 header = None 相同;
4.如果 header = 0 则会替换掉原来的列名;
参数:names,array类型,要使用的列名,即最后结果中的列名;
参数:index_col, 可选类型:int, str, sequence of int / str, False, 默认值:None
作用:用作 DataFrame 的行标签的列,可以作为字符串名称或列索引给出。
注意: 1.如果给定 int/str 序列,则使用 MultiIndex;
2.index_col=False 用来强制使pandas不使用第一列作用索引;
参数:dtype,关于列的字典类型;
作用:指定每列数据的数据类型
案例:{‘a’: np.float64, ‘b’: np.int32}
2.2.3 内容读取选择(行列)
参数:usecols,列表类型
作用:返回所有列的子集,即选中的列;
注意: 1.若给定了names,则不能使用文件的标题行;
参数:skiprows,列表类型
作用:要跳过的行数;
注意: 1.从文件开始处算起,第一行为 0;
参数: nrows,整型;
作用:要读取的行数(从文件头开始算起),用于从大文件中读取一些小样本
2.2.4 缺失值参数
参数: na_values,scalar, str, list-like, or dict
作用: 用于替换NA/NaN的值。如果是字典,则指定对应列空值的替换
默认为解析NaN的顺序为:'', ‘#N/A’, ‘#N/A N/A’, ‘#NA’, ‘-1.#IND’, ‘-1.#QNAN’, ‘-NaN’, ‘-nan’, ‘1.#IND’, ‘1.#QNAN’, ‘<NA>’, ‘N/A’, ‘NA’, ‘NULL’, ‘NaN’, ‘n/a’, ‘nan’, ‘null’.
参数: keep_default_na,布尔类型,默认值为 True
作用:解析数据时是否包含默认 NaN 值;
注意:与 na_values 有关;
参数:na_filter,布尔类型,默认为 True
作用:是否检查丢失值(空字符串或者是空值),当为大文件且无缺失值时,可提升读取速度;
2.2.5 大文件参数
参数:iterator,布尔类型,默认为false
作用:返回一个TextFileReader 对象,以便逐块处理文件。
参数:chunksize, int, default None
作用: 文件块的大小,一次读取多少行数据
参数:compression,字符串或字典类型,默认值'infer',
作用:直接使用磁盘上的压缩文件。
如果使用infer参数,则使用 gzip, bz2, zip或者解压文件名中以‘.gz’, ‘.bz2’, ‘.zip’, or ‘xz’这些为后缀的文件,否则不解压。
如果使用zip,那么ZIP包中必须只包含一个文件。
设置为None则不解压。
2.2.6 日期参数
3. Python直接读取
import csv
with open(path_name) as f:
f_csv = csv.reader(f)
headers = next(f_csv) # 获取表头
for row in f_csv:
pass # 获取每一行的数据进行操作
3.1 数据类型转换
column_types = [str, float, str, ..., int]
with open('file_name.csv') as f:
f_csv = csv.reader(f)
headers = next(f_csv) # 获取表头
for row in f_csv:
row = [convert(value) for convert, value in zip(column_types, row)]