python - csv模块的基础读写操作使用

Python处理csv、Excel:https://blog.csdn.net/weixin_50517509/article/details/125578376
Python与CSV文件(CSV模块):https://blog.csdn.net/weixin_30711917/article/details/95609536

CSV(逗号分隔值)格式是电子表格和数据库最常见的导入和导出格式。

csv函数

csv函数说明
csv.reader(csvfile,dialect =‘excel’,** fmtparams )。返回一个reader对象,它将迭代给定csvfile中的行。 【csvfile:可以是任何支持迭代器协议的对象,并在每次next()调用其方法时返回一个字符串- 文件对象和列表对象都是合适的。如果csvfile是一个文件对象,那么它必须在平台上以“b”标志打开,这会产生影响。 dialect :可选参数,该参数用于定义特定于CSV方言的一组参数。它可以是类的子类的实例,也可以是函数Dialect返回的字符串之一 list_dialects()。 fmtparams:可选参数,可以给出关键字参数来覆盖当前方言中的各个格式参数。】
csv.writer(csvfile,dialect =‘excel’,** fmtparams )。返回一个编写器对象,负责将用户的数据转换为给定的类文件对象上的分隔字符串。 【csvfile:可以是带有write()方法的任何对象 。如果csvfile是一个文件对象,那么它必须在平台上以“b”标志打开,这会产生影响。 dialect :可选参数,该参数用于定义特定于CSV方言的一组参数。它可以是类的子类的实例,也可以是函数Dialect返回的字符串之一 list_dialects()。fmtparams:可选参数,关键字参数来覆盖当前dialect中的各个格式参数。】
csv.register_dialect(name,[ dialect,] ** fmtparams )将dialect与name联系起来。 name必须是字符串或Unicode对象。dialect可以通过传递子类Dialect,或通过fmtparams关键字参数或两者来指定,并使用关键字参数覆盖dialect的参数
csv.unregister_dialect(name)从dialect注册表中删除与名称关联的dialect。如果name不是已注册的dialect名称,则引发An 错误
csv.get_dialect(name)返回与name相关的dialect。如果name 不是已注册的dialect名称,则引发An 错误
csv.list_dialects()返回所有已注册dialect的名称
csv.field_size_limit([ new_limit ])返回解析器允许的当前最大字段大小。如果给出new_limit,则这将成为新限制

reader对象方法

csv.reader(csvfile,dialect =‘excel’,** fmtparams )读。

reader对象:函数DictReader返回的实例和对象 reader()。

  • csvreader.next () 将读者的可迭代对象的下一行作为列表返回,根据当前方言进行解析。

Reader对象具有以下公共属性:

  • csvreader.dialect  解析器使用的方言的只读描述。
  • csvreader. line_num   从源迭代器读取的行数。这与返回的记录数不同,因为记录可以跨越多行。 2.5版中的新功能。

DictReader对象具有以下公共属性:

  • csvreader. fieldnames   如果在创建对象时未作为参数传递,则在首次访问时或从文件中读取第一条记录时初始化此属性。

writer对象方法

csv.writer(csvfile,dialect =‘excel’,** fmtparams )写。

writer对象:函数 DictWriter返回的实例和对象 writer()。

甲行必须是字符串或数字为序列 Writer对象和一个字典映射字段名到字符串或数字(通过使它们通过 str() 第一)为 DictWriter对象。请注意,复数会被parens包围。这可能会导致其他读取CSV文件的程序出现问题(假设它们支持复数)。

  • csvwriter. writerow (行)   将row参数写入writer的文件对象,根据当前方言进行格式化。
  • csvwriter. writerows (行)   将行中的所有元素(如上所述的可迭代行对象)写入编写器的文件对象,并根据当前Dialects进行格式化。

writer对象具有以下public属性:

  • csvwriter. dialect   writer 使用的Dialects的只读描述。

DictWriter对象具有以下公共方法:

  • DictWriter. writeheader ()    使用字段名称(在构造函数中指定)写一行。

实例代码

# -*- coding:utf-8 -*-
import os
import sys
import datetime
import csv

path = os.path.dirname(sys.argv[0])    # sys.argv[0]获取到一个文件的绝对路径【需要import sys】。sys.argv[0]相当于os.path.abspath(__file__)
os.chdir(path)   # 更改路径为运行文件img.py下的路径
readpath = sys.argv[1]       # sys.argv[1]获取到第二个文件的绝对路径, 即需要插入图片的目标文件

# 读取表格的所有数据
readFile = open(readpath, 'r', encoding='utf-8')
read_data = csv.reader(readFile)
allData = list(read_data)   # 所有数据
readFile.close()

# 提取第二列chinese,allData[1:]从第二行开始,i1[1]提取第二列
chineseList = [ i1[1] for i1 in allData[1:] ]
# 提取第三列math,allData[1:]从第二行开始,i1[2]提取第三列
mathList = [ i1[2] for i1 in allData[1:] ]
# print(chineseList)

# 数据
csvData = ['d','66','100','kk6899',['kk','90'],['a','88','95']]

# 如果文件夹不存在就创建,filepath:'./output'需要创建的文件夹路径
if not os.path.exists('./output'):
    os.mkdir('./output')

# 获取当前系统时间
curr_time = datetime.datetime.now()     # 2019-07-06 14:55:56.873893 <class 'datetime.datetime'>
inputFile = './output/output'+ curr_time.strftime("%Y%m%d-%H%M%S")+'.csv'

# 如果newline=''未指定,则嵌入在引用字段中的换行符将不会被正确解释
with open(inputFile, 'w', newline='') as file:
    w = csv.writer(file)
    # 写入列头
    w.writerow(['name','chinese','math'])
    # 写入数据
    w.writerows(csvData)
print('完成文件:',inputFile)

输出csv表格
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值