首页 > 编程语言 >关于Python的学习记录(二十二_读写 CSV 文件)

关于Python的学习记录(二十二_读写 CSV 文件)

时间:2023-08-14 19:34:29浏览次数:41  
标签:文件 csv Python 读写 writer file scores CSV

CSV 文件介绍

CSV(Comma Separated Values)全称逗号分隔值文件是一种简单、通用的文件格式,被广泛的应用于应用程序(数据库、电子表格等)数据的导入和导出以及异构系统之间的数据交换。因为 CSV 是纯文本文件,不管是什么操作系统和编程语言都是可以处理纯文本的,而且很多编程语言中都提供了对读写 CSV 文件的支持,因此 CSV 格式在数据处理和数据科学中被广泛应用。

CSV 文件有以下特点:

  1. 纯文本;
  2. 由一条条的记录组成(典型的是每行一条记录);
  3. 每条记录被分隔符(如逗号、分号、制表符等)分隔为字段(列);
  4. 每条记录都有同样的字段序列。

CSV 文件可以使用文本编辑器或类似于 Excel 电子表格这类工具打开和编辑,当使用 Excel 这类电子表格打开 CSV 文件时,你甚至感觉不到 CSV 和 Excel 文件的区别。很多数据库系统都支持将数据导出到 CSV 文件中,当然也支持从 CSV 文件中读入数据保存到数据库中。

将数据写入 CSV 文件

现有五个学生三门课程的考试成绩需要保存到一个 CSV 文件中,要达成这个目标,可以使用 Python 标准库中的csv模块,该模块的writer函数会返回一个csvwriter对象,通过该对象的writerowwriterows方法就可以将数据写入到 CSV 文件中,具体的代码如下所示。

import csv
import random

with open('scores.csv', 'w') as file:
    writer = csv.writer(file)
    # 先写入第一行:列名
    writer.writerow(['姓名', '语文', '数学', '英语'])
    names = ['关羽', '张飞', '赵云', '马超', '黄忠']
    for name in names:
        scores = [random.randint(50, 101) for _ in range(3)]
        scores.insert(0, name)
        writer.writerow(scores)
# 将 csv 文件内容打印出来
with open('scores.csv', 'r') as file:
    print(file.read())

生成的 CSV 文件的内容如下:

姓名,语文,数学,英语
关羽,98,86,61
张飞,86,58,80
赵云,95,73,70
马超,83,97,55
黄忠,61,54,87

写文件的时候所使用的 writer 函数,除了传入要写入数据的文件对象外,还可以通过delimiterquotecharquoting参数来指定分隔符(默认是逗号)、包围值的字符(默认是双引号)以及包围的方式。其中,包围值的字符主要用于当字段中有特殊符号时,通过添加包围值的字符可以避免二义性。

writer = csv.writer(file, delimiter='|', quoting=csv.QUOTE_ALL)

生成的 CSV 文件的内容。

"姓名"|"语文"|"数学"|"英语"
"关羽"|"88"|"64"|"65"
"张飞"|"76"|"93"|"79"
"赵云"|"78"|"55"|"76"
"马超"|"72"|"77"|"68"
"黄忠"|"70"|"72"|"51"

从 CSV 文件读取数据

通过csv模块的reader函数创建出csvreader对象,该对象是一个迭代器,可以通过for-in循环读取到文件中的数据。

import csv
import random
with open('scores.csv', 'w') as file:
    writer = csv.writer(file)
    # 先写入第一行:列名
    writer.writerow(['姓名', '语文', '数学', '英语'])
    names = ['关羽', '张飞', '赵云', '马超', '黄忠']
    for name in names:
        #列表推导式,它的作用是生成一个包含三个随机整数的列表
        scores = [random.randint(50, 101) for _ in range(3)]
        scores.insert(0, name)
        writer.writerow(scores)

with open('scores.csv', 'r') as file:
    reader = csv.reader(file)
    # data_list 是一个列表对象,该列表对象包含了一行中所有的字段。
    for data_list in reader:
        # 我们会给读到的数据打印出行信息
        print(reader.line_num, end='\t')
        for elem in data_list:
            # 打印行里面的每一个字段
            print(elem, end='\t')
        print()

标签:文件,csv,Python,读写,writer,file,scores,CSV
From: https://blog.51cto.com/u_16181955/7080104

相关文章

  • Python分享之requests(1)
    1、模块说明requests是使用Apache2licensed许可证的HTTP库。用python编写。比urllib2模块更简洁。Request支持HTTP连接保持和连接池,支持使用cookie保持会话,支持文件上传,支持自动响应内容的编码,支持国际化的URL和POST数据自动编码。在python内置模块的基础上进行了高度的封装,从而......
  • Python 对象拷贝的详细教程
    在本篇文章中,会先介绍Python中对象的基础概念,之后会提到对象的深浅拷贝以及区别。在阅读后,应该掌握如下的内容:理解变量、引用和对象的关系理解Python对象中identity,type和value的概念什么是mutable和immutable对象?以及它们和hashable的关系深浅拷贝的过程以及区别1.......
  • Python 优雅的使用 paramiko 进行交互式输入输出
    目的:需要ssh链接到Linux主机,执行telnet命令,抓回显匹配制定内容。ssh.exec_command(cmd,bufsize,timeout)#exec_command参数使用只需要执行一次的命令,因为执行完该命令以后,shell会自动回到ssh初始连接的shell状态下ssh.invoke_shell()#在SSHserver端创建一个交互式的shell,且......
  • python中function使用class调用和使用对象调用的区别
    问题在python中,class中函数的定义中有一个特殊的self指针,如果一个函数有一个self参数,通常意味着这是一个非静态函数,也就是调用的时候第一个参数是对象指针,只是这个指针是调用这个函数时由python来自动填充。tsecer@harry:catcls_mth.pyclasstsecer():defharry(self):......
  • Python中threading模块 lock、Rlock的使用
    一、概述在使用多线程的应用下,如何保证线程安全,以及线程之间的同步,或者访问共享变量等问题是十分棘手的问题,也是使用多线程下面临的问题,如果处理不好,会带来较严重的后果,使用python多线程中提供Lock、Rlock、Semaphore、Event、Condition用来保证线程之间的同步,后者保证访问......
  • Python中os._exit(), sys.exit(), exit() 的区别
    在Python3.x中,os._exit(),sys.exit(),和exit()是三个不同的终止程序执行的函数,它们之间有一些区别:os._exit():这个函数是os模块中的一个函数,它用于直接终止程序的执行,并且不会触发任何清理活动或关闭程序中的资源。它不会抛出任何异常或执行任何finally子句。使用os._exit(......
  • 各个时区对应的时差表 及 python中时区获取方式(支持夏令时)
    1Africa/Abidjan+00:002Africa/Accra+00:003Africa/Addis_Ababa+03:004Africa/Algiers+01:005Africa/Asmara+03:006Africa/Bamako+00:007Africa/Bangui+01:008Africa/Banjul+00:009Africa/Bissau+00:0010Africa......
  • Python 优雅的使用 subprocess.Popen 获取实时输出,以及中止 subprocess
    #-*-coding:utf-8-*-importshleximportosimportsignalimporttimeimportthreadingfromsubprocessimportPopen,PIPEdefrun_command(command):process=Popen(shlex.split(command),stdout=PIPE)st=time.time()whileTrue:ou......
  • Python合并两个字典代码
    合并两个字典Python3.5之后,合并字典变得容易起来。我们可以通过**符号解压字典,并将多个字典传入{}中,实现合并。defMerge(dict1,dict2):res={**dict1,**dict2}returnres#两个字典dict1={"name":"Joy","age":25}dict2={"name":"Joy",......
  • Python代码链式比较
    链式比较python有链式比较的机制,在一行里支持多种运算符比较。相当于拆分多个逻辑表达式,再进行逻辑与操作。a=5print(2<a<8)print(1==a<3)输出:TrueFalse......