【Python】CSV,TSV语料读取的简单操作——内建包csv的使用

article/2025/10/3 4:45:56

背景

在做文本相关的任务时,难免会遇见csv,tsv等格式的数据,但有时只是读取,然后传入到下一个任务中而已,并不会做过多的操作。在这种情况下,可以使用pandas读取,但是难免有些臃肿,还引入了pandas中的数据结构,虽然在NLP任务中torchtext可以处理相关格式的文本数据,但是其更侧重于为了模型训练做准备的,这个时候也不太适用了。

其实,Python中自带了csv格式数据的读取和写入的包,使用起来也是比较简洁的,如果经常处理csv,tsv格式数据的话,可以将其封装成对应的工具包。下面记录一下csv这个包的具体使用。当然,最权威的使用当属于官方文档:https://docs.python.org/zh-cn/3.8/library/csv.html?highlight=csv#module-csv。

下文代码使用vscode编写,使用vscode中的Excel Viewer插件查看。

生成csv文件

这里主要介绍生成csv文件的两种方式:csv.writercsv.DictWriter

按行写入程序案例

csv格式数据写入案例:

import csvhead = ["head" + str(i) for i in range(1, 6)]  # 生成csv headdata_list = [[(i + 1) * j for i in range(5)] for j in range(1, 10)]  # 生成数据# newline='',否则会在两行之间插入空白行
with open('write_by_line.csv', 'w', encoding='utf8', newline="") as f:writer = csv.writer(f)  # 构建csv按行书写对象writer.writerow(head)  # 单行写入表头writer.writerows(data_list)  # 多行数据写入

csv数据如下:

在这里插入图片描述
在这里插入图片描述
tsv格式数据写入案例,其与csv格式的差别就是在实例化csv按行写入对象中设置delimiter参数为\t

import csvhead = ["head" + str(i) for i in range(1, 6)]  # 生成csv headdata_list = [[(i + 1) * j for i in range(5)] for j in range(1, 10)]  # 生成数据# newline='',否则会在两行之间插入空白行
with open('write_by_line.tsv', 'w', encoding='utf8', newline="") as f:writer = csv.writer(f, delimiter='\t')  # 构建csv按行书写对象writer.writerow(head)  # 单行写入表头writer.writerows(data_list)  # 多行数据写入

生成数据如下:
在这里插入图片描述
在这里插入图片描述

如果生成的文件后缀名不修改成tsv的话,使用Excel Viewer会出现显示异常的情况。

按字典写入对象案例

有时候需要已有的字典数据写入到csv数据中,csv也提供根据字典的key值进行写入,为了更具通用性,下面的程序将按行写入的模块也加入了,最后的代码如下:

import csvdef write_data(style='csv', write_style='list') -> None:head = ["head" + str(i) for i in range(1, 6)]  # 生成csv headif write_style == 'list':data_list = [[(i + 1) * j for i in range(5)] for j in range(1, 10)]  # 生成数据elif write_style == 'dict':data_list = [{key: j for key in head} for j in range(1, 10)]else:raise Exception(f'this write_style {write_style}, not in ["list", "dict"]')if style == 'csv':delimiter = ','file_name = write_style+"_writer_by_list.csv"elif style == 'tsv':delimiter = '\t'file_name = write_style+"_writer_by_list.tsv"else:raise Exception(f"this style {style} not in ['csv', 'tsv']")# newline='',否则会在两行之间插入空白行with open(file_name, 'w', encoding='utf8', newline="") as f:if write_style == 'list':writer = csv.writer(f, delimiter=delimiter)  # 构建csv按行书写对象writer.writerow(head)  # 单行写入表头else:writer = csv.DictWriter(f, head)writer.writeheader()writer.writerows(data_list)  # 多行数据写入if __name__ == '__main__':write_data(write_style='dict')

生成的数据如下:
在这里插入图片描述
在这里插入图片描述

csv数据读取

有了csv文件后,按理也应该有两种读取数据的方式。实例如下:

def read_data(file_path, style='csv', delimiter=',') -> Any:assert delimiter in [',', '\t'], f"delimiter must in [',','\t'], you input {delimiter}"data = {}with open(file_path, 'r', encoding='utf8') as f:if style == 'csv':reader = csv.reader(f, delimiter=delimiter)else:reader = csv.DictReader(f, delimiter=delimiter)data["head"] = next(reader)data['content'] = list(reader)return dataif __name__ == '__main__':import pprintdata = read_data("dict_writer_by_list.csv")pprint.pprint(data)

运行结果如下:
在这里插入图片描述

总结

总的来说,使用csv内建包,无论数据写入还是数据读取都比较简洁方便,定制化也比较容易,可以根据自己实际的工程需要进行定制化开发。以上的全部代码如下:

import csv
from typing import Anydef write_data(style='csv', write_style='list') -> None:head = ["head" + str(i) for i in range(1, 6)]  # 生成csv headif write_style == 'list':data_list = [[(i + 1) * j for i in range(5)] for j in range(1, 10)]  # 生成数据elif write_style == 'dict':data_list = [{key: j for key in head} for j in range(1, 10)]else:raise Exception(f'this write_style {write_style}, not in ["list", "dict"]')if style == 'csv':delimiter = ','file_name = write_style+"_writer_by_list.csv"elif style == 'tsv':delimiter = '\t'file_name = write_style+"_writer_by_list.tsv"else:raise Exception(f"this style {style} not in ['csv', 'tsv']")# newline='',否则会在两行之间插入空白行with open(file_name, 'w', encoding='utf8', newline="") as f:if write_style == 'list':writer = csv.writer(f, delimiter=delimiter)  # 构建csv按行书写对象writer.writerow(head)  # 单行写入表头else:writer = csv.DictWriter(f, head)  # 传入头writer.writeheader() # 写入头writer.writerows(data_list)  # 多行数据写入def read_data(file_path, style='csv', delimiter=',') -> Any:assert delimiter in [',', '\t'], f"delimiter must in [',','\t'], you input {delimiter}"data = {}with open(file_path, 'r', encoding='utf8') as f:if style == 'csv':reader = csv.reader(f, delimiter=delimiter)else:reader = csv.DictReader(f, delimiter=delimiter)data["head"] = next(reader)data['content'] = list(reader)return dataif __name__ == '__main__':import pprint# write_data(write_style='dict')data = read_data("dict_writer_by_list.csv")pprint.pprint(data)

感谢不错的话,记得给我 “一键三连”


http://chatgpt.dhexx.cn/article/ajZs7g6g.shtml

相关文章

tsv文件导oracle窜列,TSV文件扩展名 - 什么是.tsv以及如何打开? - ReviverSoft

你在这里因为你有,有一个文件扩展名结尾的​​文件 .tsv. 文件与文件扩展名 .tsv 只能通过特定的应用程序推出。这有可能是 .tsv 文件是数据文件,而不是文件或媒体,这意味着他们并不是在所有观看。 什么是一&nbsp.tsv&nbsp文件? 在TSV文件格式的全称是“制表符分隔…

升序和降序的理解

升序就是从小到大,降序就是从大到小,这里指的是数字的大小 你要说按名次的那个大小,你使用的就是升序排列 上面的理解适用于任何地方 因为是程序员,说下mysql的升序,降序 desc是descend 降序意思 asc 是ascend 升序…

python怎么升序和降序排序

python怎么升序和降序排序 1、首先打开cmd命令提示符,输入指令“ipython”打开python的命令行工具: 2、在命令行中先定义一个变量number数组,里面写入几个数,并用sorted函数对number排序并将排序的结果赋值给变量a,so…

python怎么升序和降序排序?

python怎么升序和降序排序 推荐:《python视频教程》 1、首先打开cmd命令提示符,输入指令“ipython”打开python的命令行工具: 2、在命令行中先定义一个变量number数组,里面写入几个数,并用sorted函数对number排序并将…

Java中的Arrays.sort(),升序降序?

一、一维数组比较 1、默认升序 首先对于sort()函数来说默认是升序的 import java.util.Arrays;public class helloworld {public static void main(String[] args) {int[] arr{1,4,3,6,7,9};Arrays.sort(arr);System.out.println(Arrays.toString(arr));} }2、区间排序sort(…

Js如何实现升序和降序

前言 在网页中,实现列表的升序和降序,是一个比较常见的操作,尤其是在做一些数据栓选表格的时候,按照索引,时间等特定的参数,提供升序和降序排列的功能的 具体示例 sort 原生js 在原生js中主要是操作DOM,遍历节点,通过removeChild()删除节点,而使用appendChild()添加元素去实现的…

堆排序(升序降序)

堆排序是利用堆这种数据结构而设计的一种排序算法&#xff0c;堆排序是一种选择排序&#xff0c;它的最坏、最好、平均时间复杂度均为O(nlogn)&#xff0c;是不稳定排序。 小根堆&#xff08;最小堆&#xff09;&#xff1a;每个结点的值都<其左右孩子结点的值。 大根堆&…

python列表中的升序与降序

在使用python进行编程的时候&#xff0c;我们经常使用到列表&#xff0c;并需要对列表里的元素进行升降序操作&#xff0c;下面以一个简单的例子来展示python列表中的升序与降序操作。**例如&#xff1a;**输入三整数x,y,z,现在需要把这三数进行升序和降序操作 **tips:**使用 .…

Python 排序列表——如何按降序或升序排序

在 Python 中&#xff0c;你可以使用 sorted() 方法或 sort() 方法对数据进行排序。 在本文中&#xff0c;我将提供 sorted() 和 sort() 方法的代码示例&#xff0c;并解释两者之间的区别。 Python 排序列表——如何按降序或升序排序 在 Python 中&#xff0c;你可以使用 so…

C语言——选择排序(升序、降序)

举例出第一趟&#xff1a; 从a[0]开始找 遍历找最小值 第一趟排序后&#xff1a; B站“AF程序猿”视频中截到的 第二趟从a[1]开始…… &#xff08;随机生成我这里就指定10以内的了哈&#xff0c;方便看运行结果&#xff09; 程序&#xff08;升序&#xff09;&#xff1a; #…

java数组排序,升序和降序

文章目录 前言基本数据类型排序升序降序排列 基本数据类型包装类升序降序 对象排序升序降序 前言 对于数组的排序一直很疑惑&#xff0c;尤其是如何对数组进行降序排列&#xff0c;例如要对int[]类型的数组降序排列&#xff0c;这里来进行说明 基本数据类型排序 升序 int[]…

Java中的升序和降序

1.使用Arrays中的升序API&#xff08;sort&#xff09;进行升序 代码示例如下&#xff1a; public class px {public static void main(String[] args) {int[] a{11,55,99,66,22,88,33};System.out.println(Arrays.toString(a));//打印原有数组Arrays.sort(a);System.out.pri…

MySQL数据库升降序排序

在使用数据库时&#xff0c;我们可能要将数据按照从小到大&#xff0c;或者从大到小的顺序排序。这样我们就用到了升降序排序。 升序&#xff1a;从小到大&#xff08;asc&#xff09; 以这个表数据为例&#xff1a;从小到大排序 语法&#xff1a; select * from stu order …

Linux中查看bz2压缩文件大小,Linux bz2文件解压与压缩之bzip2命令

1. Linux系统上bz2的简介 在Linux运维中,我们经常看到.bz2后缀的文件,这是一种压缩文件,一般存在于Linux系统当中。本文介绍一下如何使用bzip2工具来压缩和解压bz2文件。 2. 安装bzip2 以CentOS系统为例,最小化安装的情况下,并没有集成bzip2。 [root@zcwyou ~]# bzip2 -ba…

linux 文件夹tar.bz2压缩命令,使用tar命令提取(或解压缩)tar.bz2和tbz2文件的方法...

本文介绍使用tar命令提取(或解压缩)tar.bz2和tbz2文件的方法。tar命令允许你创建和提取tar归档文件,它支持各种压缩程序,例如gzip、bzip2、lzip、lzma、lzop、xz和compress。Bzip2是用于压缩tar文件的最受欢迎的算法之一,按照约定,用bzip2压缩的tar归档文件的名称以.tar.bz…

window系统怎么解压tar.bz2文件

下载7zip工具选择要解压的文件&#xff0c;右键选择7zip > 打开压缩包 点击提取菜单&#xff0c;选择解压之后文件存放的路经 解压出来后是一个.tar格式的文件&#xff0c;此时再次解压即可 耐心等待解压完成 解压完成 欢迎小伙伴讨论&#xff0c;文章内容如有错误请在评论区…

Linux常用命令详解

Linux命令 命令提示符 打开终端时&#xff0c;我们输入信息的左边就是命令提示符&#xff0c;例如&#xff1a; Linux命令提示符结构&#xff1a; 普通用户boy&#xff1a;boyboy-virtual-machine:/$ 根用户root&#xff1a;rootboy-virtual-machine:/# 前面的是当前用户名b…

PHP验证码SESSION验证码图片不同步

PHP验证码SESSION验证码图片不同步 今天在做php登录验证的时候带验证码的&#xff0c;nc的在页面输出了下验证码的session&#xff0c;于是乎出现了戏剧性的一幕&#xff0c;session验证码和图片上的验证码不一样&#xff1f;那用户岂不是登陆不上了&#xff1f;但是奇怪的是用…

php 验证码 生成,PHP实现随机生成验证码功能

验证码在表单实现越来越多了,但是用js的写的验证码,总觉得不方便,所以学习了下php实现的验证码 验证码在表单实现越来越多了,但是用js的写的验证码,总觉得不方便,所以学习了下php实现的验证码。当然,也可以封装成一个函数,以后使用的时候也是很方便的,但是现在未封装。…

php验证是否图片,php验证码图片不显示图片怎么办

php验证码图片不显示图片的解决办法&#xff1a;首先检查php是否安装gd扩展&#xff1b;然后在php目录下找到php.ini文件&#xff1b;最后将文件编码方式改为utf-8无DOM格式&#xff0c;并在header前清除缓存即可。 PHP图片验证码无法显示的解决方案 问题&#xff1a;使用php实…