基于分隔符的文本数据文件以行尾各条数据的分隔,以各种分隔符(同一个文本数据文件中通常只使用一种)作为一条数据内不同列(字段)的分隔,存储需要处理的数据。下面是分别使用TAB制表符、逗号、空格、竖线作为分隔符的四个文本数据文件的例子。
在Python中读写这类文件一般采用三种方法CSV模块、Numpy库、Pandas库。
CSV模块读写
(1)读取reader()
方法和writer()
方法的delimiter
参数指明了文件使用的分隔符。
import csv with open('竖线.txt', encoding='utf-8') as cf: lines = csv.reader(cf, delimiter='|') for line in lines: print(line) 复制代码
(2)写入
import csv headers = ['姓名', '性别'] rows = [('张三', '男'), ('李四', '男'), ('王五', '男')] with open('test.txt', 'a+', encoding='utf-8', newline="")as fp: wf = csv.writer(fp) wf.writerow(headers) wf.writerows(rows) 复制代码
Numpy库读写
(1)读取
import numpy as np data = np.loadtxt('竖线.txt', dtype=str, delimiter='|', unpack=False, encoding='utf-8') print(data) 复制代码
通过结果可以看到,Numpy
库读取的结果和CSV
模块读取的结果不同;Numpy
读取的结果数据类型是ndarry
,与CSV
模块读取得到的list不同。
loadtxt()
函数
loadtxt(fname, dtype=<class 'float'>, comments='#', delimiter=None, converters=None, skiprows=0, usecols=None, unpack=False, ndmin=0, encoding='bytes')
各参数含义如下:
- fname:要读取的带路径的文件名,如文件后缀是.gz或.bz2,泽稳健将被解压,然后再载入。
- dtype:要读取的数据类型。
- comments:文件头部或尾部字符串的开头字符,用于识别头部或尾部字符串。
- delimiter:分隔字段(列)的字符串。
- converters:将某列使用特定函数处理。
- skiprows:跳过前若干行。
- usecols:获取某些列,如需要前三列则为usecols=(0,1,2)。
- unpack:取值为True时,每列数据以数组的形式返回。
- ndmin:指定读取文件后存储数据的数组最少应具有的ndarry维度。
- encoding:解码输入文件的字符集编码。
(2)写入
import numpy as np data = [['姓名', '性别'], ['张三', '男'], ['李四', '男'], ['王五', '男']] np.savetxt('test.txt', data, delimiter=',', newline='\n', fmt='%s, %s') 复制代码
savetxt()
函数
savetxt(fname, X, fmt='%.18e', delimiter=' ', newline='\n', header='', footer='', comments='# ', encoding=None)
各参数含义如下:
- fname:要写入的带路径的文件名。
- X:要存储的移位或二维数组。
- fmt:控制数据存储的格式。
- delimiter:分隔字段(列)的字符串。
- newline:数据行之间的分隔符。
- header:文件头部写入的字符串。
- footer:文件末尾写入的字符串。
- comments:文件头部或者尾部字符串的开头字符串,默认为#。
- encoding:写入文件的字符集编码。
使用pandas库读写
(1)读取
import pandas as pd df = pd.read_csv('竖线.txt', delimiter='|') print(df) 复制代码
(2)写入
import pandas as pd dic = {'姓名': ['张三', '李四', '王五'], '姓别': ['男', '男', '男']} df = pd.DataFrame(dic) df.to_csv('test.txt', index=False) 复制代码
三种方式的区别
- 读取数据以后得到的数据类型,以及写入文件后的数据格式不同。
- 主要功能和运行效率不同。
CSV
模块主要用于处理文本型数据的读写;而Pandas
和Numpy
的功能比CSV
模块要强大很多,Numpy
库主要用于面向高精度和高性能的计算,提供了大量统计相关的函数;Pandas
库多用于时间序列的分析,可以便捷快速的处理大量连续性数据。