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

前言

有时,在文件内容中,工作表头部和尾部都是你不想处理的。

例如,在supplier_data_unnecessary_header_footer.csv文件中,头部有“I don’t care about this row”,尾部有“I don’t want this row either”。这两部分都不是我们想要的,通过本文的讲述,我们将学习使用Python脚本使它不读取这些行。

python将csv文件可视化 python分析csv文件_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版)

python将csv文件可视化 python分析csv文件_控制流_02


是不是没有看出什么明显的不同呢?那这意味着两种版本就是相同的吗?

答案当然不是啦!我们不妨换一种文件打开方式看看,这里小编使用的是记事本。

python将csv文件可视化 python分析csv文件_控制流_03


再仔细观察,是不是发现了一些端倪呢?细心的小伙伴可以看出,这两种版本区别在于最后一个逗号前的空格。无strip版本有空格,而有strip版本无空格。到此,是不是就可以理解strip函数在此处的作用呢?

row_counter += 1

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

运行脚本

在命令行输入以下命令,然后按回车键:

python将csv文件可视化 python分析csv文件_数据分析_04

查看结果

(左图为处理前,右图为处理后)

python将csv文件可视化 python分析csv文件_数据分析_05

结语

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