Python数据分析基础——CSV文件——选取连续的行

参考文献:《Python数据分析基础》

前言

有时,在文件内容中,工作表头部和尾部都是你不想处理的。
例如,在supplier_data_unnecessary_header_footer.csv文件中,头部有“I don’t care about this row”,尾部有“I don’t want this row either”。这两部分都不是我们想要的,通过本文的讲述,我们将学习使用Python脚本使它不读取这些行。
在这里插入图片描述

创建脚本

在文本编辑器中输入一段代码,然后将文件保存为:11csv_reader_select_contiguous_rows.py

#!/usr/bin/env python3
import csv
import sys

input_file = sys.argv[1]
output_file = sys.argv[2]

row_counter = 0
with open(input_file, 'r', newline='') as csv_in_file:
	with open(output_file, 'w', newline='') as csv_out_file:
		filereader = csv.reader(csv_in_file)
		filewriter = csv.writer(csv_out_file)
		for row in filereader:
			if row_counter >= 3 and row_counter <= 15:
				filewriter.writerow([value.strip() for value in row])
			row_counter += 1

脚本代码注释

row_counter = 0

这里使用row_counter变量来跟踪行编号,以便可以识别和选取想要保留的行。

if row_counter >= 3 and row_counter <= 15:

这一行代码使用if控制流语句,跳过那些不需要的头部和尾部。在本例输入文件的前三行和后三行均不执行if代码块,起到了不读取这些行的效果。

filewriter.writerow([value.strip() for value in row])

这行代码的作用是处理需要保留的行,将它们写入输出文件,在列表生成式中,使用strip函数除去列表中每个元素两端的空格、制表符和换行符。
在这里需要进一步讨论一下,由于小编比较懒,一开始把这行代码写成了这个样子:

filewriter.writerow(row)

运行这两种版本的脚本,观察一下各自csv格式的文件
(左图为无strip版,右图为有strip版)
在这里插入图片描述
是不是没有看出什么明显的不同呢?那这意味着两种版本就是相同的吗?
答案当然不是啦!我们不妨换一种文件打开方式看看,这里小编使用的是记事本。
在这里插入图片描述
再仔细观察,是不是发现了一些端倪呢?细心的小伙伴可以看出,这两种版本区别在于最后一个逗号前的空格。无strip版本有空格,而有strip版本无空格。到此,是不是就可以理解strip函数在此处的作用呢?

row_counter += 1

最后这一行代码,作用是将行编号进行迭代。

运行脚本

在命令行输入以下命令,然后按回车键:
在这里插入图片描述

查看结果

(左图为处理前,右图为处理后)
在这里插入图片描述

结语

本文介绍了CSV文件中选取连续行的知识,对书上的内容及实际操作出现的问题进行了思考与总结。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值