Python基于分隔符的文本数据存取

239 阅读3分钟

「这是我参与2022首次更文挑战的第15天,活动详情查看:2022首次更文挑战」。

基于分隔符的文本数据文件以行尾各条数据的分隔,以各种分隔符(同一个文本数据文件中通常只使用一种)作为一条数据内不同列(字段)的分隔,存储需要处理的数据。下面是分别使用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)

三种方式的区别

  1. 读取数据以后得到的数据类型,以及写入文件后的数据格式不同。

  2. 主要功能和运行效率不同。CSV模块主要用于处理文本型数据的读写;而PandasNumpy的功能比CSV模块要强大很多,Numpy库主要用于面向高精度和高性能的计算,提供了大量统计相关的函数;Pandas库多用于时间序列的分析,可以便捷快速的处理大量连续性数据。


对于刚入门 Python 或是想要入门 Python 的小伙伴,可以通过关注公众号“Python新视野”,一起交流学习,都是从新手走过来的,有时候一个简单的问题卡很久,但可能别人的一点拨就会恍然大悟,由衷的希望大家能够共同进步。另有整理的近千套简历模板,几百册电子书等你来领取哦!