背景

在做文本相关的任务时,难免会遇见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)

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

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

  1. python对文件的读操作有哪些方法-Python中文件的读取和写入操作

    从文件中读取数据 读取整个文件 这里假设在当前目录下有一个文件名为'pi_digits.txt'的文本文件,里面的数据如下: 3.1415926535 8979323846 2643383279 wi ...

  2. python对文件的读操作方法有哪些-Python中文件的读取和写入操作

    从文件中读取数据 读取整个文件 这里假设在当前目录下有一个文件名为'pi_digits.txt'的文本文件,里面的数据如下: 3.1415926535 8979323846 2643383279 wi ...

  3. python连接到SQList数据库以及简单操作

    python连接到SQList数据库以及简单操作 背景了解: Python就内置了SQLite3,所以,在Python中使用SQLite,不需要安装任何东西,直接使用.Python定义了一套操作数据库 ...

  4. R语言:从 csv 文件中读取数据,然后将数据写入 csv 文件

    在 R 中,我们可以从存储在 R 环境外部的文件读取数据.我们还可以将数据写入将由操作系统存储和访问的文件中.R可以读取和写入各种文件格式,如csv,excel,xml等. 在本章中,我们将学习从 c ...

  5. Python文件操作-文本文件、二进制文件、csv文件的读取写入、OS、shutil、CSV模块、常用字符编码

    Python文件操作 文本文件和二进制文件 文件操作相关模块 open()创建文件对象 文件对象的常用属性和方法 pickle 序列化 文本文件读取和写入 文本文件写入步骤 write()/write ...

  6. office是python打开方式_Python读取word文本操作详解

    本文研究的主要问题时Python读取word文本操作,分享了相关概念和实现代码,具体如下. 一,docx模块 Python可以利用python-docx模块处理word文档,处理方式是面向对象的.也就 ...

  7. python生成递增序列_Python的6种内建序列之通用操作

    数据结构式通过某种方式(例如对元素进行编号)组织在一起的数据元素的集合,这些数据元素可以是数字或者字符,甚至可以是其他数据结构.在Python中,最基本的数据结构是序列(sequence).序列中的每 ...

  8. Python零基础教程:函数和类内建魔法属性

    前言 关于对象的魔法方法我们已经讲得太多,但是对于类或函数内建的魔法属性和功能我们涉及较少,下面系统了解一下类和函数的内建属性. 查看内建属性 class Person(object):passdef ...

  9. Python openpyxl 之 Excel 文档简单操作

    背景:生活中常常因日常工作,在记录统计方面需频繁处理较多 Excel 表格,这部分工作虽可由人工完成,但这样会显得有些繁琐且可能存在偏差,遂闲时查阅了是否有相关基于python处理Excel表格的学习 ...

最新文章

  1. php 开发cs,PHP开发CS结构的技巧
  2. 开发转测试没人要_入行或转行软件测试(测试开发)要怎么学
  3. 单链表倒数第K个节点的查找和显示
  4. 中国SaaS死或生之五:目标、方法、钱,一个都不能少
  5. php中获取ip的地域信息比较精准
  6. 2. Add Two Numbers 两数相加
  7. JAVA实现telnet代理,对输入命令拦截
  8. android简单的夜间模式
  9. linux绑定team网卡,linux 实现双网卡绑定单个IP——team篇
  10. 信息学奥赛一本通C++语言——1119:矩阵交换行
  11. 斑能不能彻底去掉_海鲜不能和什么一起吃
  12. arm linux 蜂鸣器qt,Qt 程序中使用蜂鸣器 ioctl()
  13. Word2Vec 与 Word Embedding的关系
  14. python windows7下创建~/.pypirc文件
  15. 多线程的Lock锁——ReentrantReadWriteLock
  16. 管家婆普及版_昆明逸马软件 — 管家婆普及版新手入门指南
  17. steam换头像出现服务器错误_推特热搜第二!史上bug最多的游戏终于出现…
  18. 第4节课第一节 Dos攻击
  19. Pytorch 微调(Fine-tuning)
  20. 师太、老衲、贫道的爱恨全集

热门文章

  1. 计算机校本研究题目,信息技术小课题研究题目大全
  2. <<视觉问答>>2021:Zero-shot Visual Question Answering usingKnowledge Graph
  3. ATECLOUD智能云测试平台-测试测量/仪器程控/工业控制/上位机开发软件
  4. 人工智能导论笔记-第四章-不确定性推理方法
  5. csv和json文件
  6. java括号用法_Java双括弧使用技巧
  7. (DP)codeforces - 710E Generate a String
  8. adguard没有核心 core no_树莓派安装AdGuard Home屏蔽广告
  9. C1认证学习六(HTTPS)
  10. EMWin对话框(Diolog)通知框(Messa…