Python编程让繁琐的工作自动化(3)-处理CSV文件和(JSON数据)

了解CSV文件格式特性,掌握Python csv模块使用方法,实现CSV文件高效读写及数据处理,包括去除表头等常见任务。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

CSV 表示“Comma-Separated Values(逗号分隔的值)”,CSV文件是简化的电子表格,保存为纯文本文件。Python 的csv 模块让解析CSV 文件变得容易。CSV 文件中的每行代表电子表格中的一行,逗号分割了该行中的单元格。CSV 文件是简单的,缺少 Excel 电子表格的许多功能。例如,CSV 文件中:
• 值没有类型,所有东西都是字符串;
• 没有字体大小或颜色的设置;
• 没有多个工作表;
• 不能指定单元格的宽度和高度;
• 不能合并单元格;
• 不能嵌入图像或图表。
CSV 的文件的优势是简单。CSV 文件被许多种类的程序广泛地支持,可以在文
本编辑器中查看(包括 IDLE 的文件编辑器),它是表示电子表格数据的直接方式。
因为 CSV 文件就是文本文件,所以你可能会尝试将它们读入一个字符串,例如,因为 CSV 文件中的每个单元格有逗号分割,也许你可以只是对每行文本调用 split()方法,来取得这些值。但并非CSV 文件中的每个逗号,都表示两个单元格之间的分界。CSV 文件也有自己的转义字符,允许逗号和其他字符作为值的一部分。split()方法不能处理这些转义字符。因为这些潜在的缺陷,所以总是应该使用 csv 模块来读写 CSV 文件。

常用操作

下图为exsample.csv文件
在这里插入图片描述

#要用csv模块从CSV文件中读取数据,需要创建一个 Reader 对象。Reader 对象让你迭代遍历 CSV 文件中的每一行。
#csv模块时python是自带的,不需要安装,这里用逗号分割的txt文件也可以用该模块处理
import csv
exsampleFile = open('exsample.csv')

#reader对象
#注意,不能将文件名字符串直接传递给该函数
exsampleReader = csv.reader(exsampleFile)
exsampleData = list(exsampleReader)# 输出exampleData -> [['4/5/2015 13:34', 'Apples', '73']

#可以用表达式 exampleData[row][col]来访问特定行和列的值
 exampleData[0][0]
 
#对于大型的 CSV 文件,你需要在一个 for 循环中使用 Reader 对象。这样避免将整个文件一次性装入内存。每一行是一个值的列表,每个值表示一个单元格。line_num包含了当前行的行号。
for row in exampleReader: 
        print('Row #' + str(exampleReader.line_num) + ' ' + str(row)) 
 
#writer对象
#要创建一个 Writer 对象,就使用csv.writer()函数
#在 Windows 上,需要为 open()函数的 newline 关键字参数传入一个空字符串。
#这样做的技术原因超出了本书的范围。如果忘记设置 newline 关键字参数,output.csv中的行距将有两倍
outputFile = open('output.csv', 'w', newline='') 
outputWriter = csv.writer(outputFile) 
outputWriter.writerow(['spam', 'eggs', 'bacon', 'ham']) 
outputWriter.writerow(['Hello, world!', 'eggs', 'bacon', 'ham']) 
#输出"Hello, world!",eggs,bacon,ham 。Writer 对象自动转义了'Hello, world!'中的逗号,在 CSV 文件中使用了双引号。

#用制表符代替逗号来分隔单元格,并有两倍行距,通过delimiter 和 lineterminator 关键字参数改变,然后使用文件扩展名.tsv表示制表符分隔的值
csvWriter = csv.writer(csvFile, delimiter='\t', lineterminator='\n\n') 
csvWriter.writerow(['apples', 'oranges', 'grapes']) 

项目:从CSV文件中删除表头

假设你有一个枯燥的任务,要删除几百 CSV 文件的第一行。也许你会将它们送入一
个自动化的过程,只需要数据,不需要每列顶部的表头。可以在 Excel 中打开每个文件,
删除第一行,并重新保存该文件,但这需要几个小时。让我们写一个程序来做这件事。
该程序需要打开当前工作目录中所有扩展名为.csv 的文件,读取 CSV 文件的内
容,并除掉第一行的内容重新写入同名的文件。这将用新的、无表头的内容替换
CSV 文件的旧内容。
总的来说,该程序必须做到以下几点:
• 找出当前工作目录中的所有 CSV 文件。
• 读取每个文件的全部内容。
• 跳过第一行,将内容写入一个新的 CSV 文件。
在代码层面上,这意味着该程序需要做到以下几点:
• 循环遍历从 os.listdir()得到的文件列表,跳过非 CSV 文件。
• 创建一个 CSV Reader 对象,读取该文件的内容,利用 line_num 属性确定要跳
过哪一行。
• 创建一个 CSV Writer 对象,将读入的数据写入新文件。
针对这个项目,打开一个新的文件编辑器窗口,并保存为 removeCsvHeader.py

#与往常一样,当你写程序修改文件时,一定要先备份这些文件,以防万一你的程序没有按期望的方式工作。你不希望意外地删除原始文件。
#! python3 
# removeCsvHeader.py - Removes the header from all CSV files in the current 
# working directory. 
 
import csv, os 
 
os.makedirs('headerRemoved', exist_ok=True) 
 
#第1步:循环遍历每个CSV文件
for csvFilename in os.listdir('.'): 
    if not csvFilename.endswith('.csv'): 
        continue     # skip non-csv files 
        
    print('Removing header from ' + csvFilename + '...') 
	#第2步:读入CSV文件,并跳过第一行
	csvRows = [] 
	csvFileObj = open(csvFilename) 
	readerObj = csv.reader(csvFileObj) 
	for row in readerObj: 
	    if readerObj.line_num == 1: 
	        continue     # skip first row 
	    csvRows.append(row) 
	csvFileObj.close()     
	#第3步:写入CSV文件,没有第一行
	 csvFileObj = open(os.path.join('headerRemoved', csvFilename), 'w', 
                 newline='') 
    csvWriter = csv.writer(csvFileObj) 
    for row in csvRows: 
        csvWriter.writerow(row) 
    csvFileObj.close() 

针对 CSV 文件写的程序类似于针对 Excel 文件写的程序,因为它们都是电子表
格文件。你可以编程完成以下任务:
• 在一个 CSV 文件的不同行,或多个 CSV 文件之间比较数据。
• 从 CSV 文件拷贝特定的数据到 Excel 文件,或反过来。
• 检查 CSV 文件中无效的数据或格式错误,并向用户提醒这些错误。
• 从 CSV 文件读取数据,作为 Python 程序的输入。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值