天天看點

Python資料分析基礎——CSV檔案——選取連續的行

參考文獻:《Python資料分析基礎》

前言

有時,在檔案内容中,工作表頭部和尾部都是你不想處理的。

例如,在supplier_data_unnecessary_header_footer.csv檔案中,頭部有“I don’t care about this row”,尾部有“I don’t want this row either”。這兩部分都不是我們想要的,通過本文的講述,我們将學習使用Python腳本使它不讀取這些行。

Python資料分析基礎——CSV檔案——選取連續的行

建立腳本

在文本編輯器中輸入一段代碼,然後将檔案儲存為: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變量來跟蹤行編号,以便可以識别和選取想要保留的行。

這一行代碼使用if控制流語句,跳過那些不需要的頭部和尾部。在本例輸入檔案的前三行和後三行均不執行if代碼塊,起到了不讀取這些行的效果。

這行代碼的作用是處理需要保留的行,将它們寫入輸出檔案,在清單生成式中,使用strip函數除去清單中每個元素兩端的空格、制表符和換行符。

在這裡需要進一步讨論一下,由于小編比較懶,一開始把這行代碼寫成了這個樣子:

運作這兩種版本的腳本,觀察一下各自csv格式的檔案

(左圖為無strip版,右圖為有strip版)

Python資料分析基礎——CSV檔案——選取連續的行

是不是沒有看出什麼明顯的不同呢?那這意味着兩種版本就是相同的嗎?

答案當然不是啦!我們不妨換一種檔案打開方式看看,這裡小編使用的是記事本。

Python資料分析基礎——CSV檔案——選取連續的行

再仔細觀察,是不是發現了一些端倪呢?細心的小夥伴可以看出,這兩種版本差別在于最後一個逗号前的空格。無strip版本有空格,而有strip版本無空格。到此,是不是就可以了解strip函數在此處的作用呢?

最後這一行代碼,作用是将行編号進行疊代。

運作腳本

在指令行輸入以下指令,然後按Enter鍵:

Python資料分析基礎——CSV檔案——選取連續的行

檢視結果

(左圖為處理前,右圖為處理後)

Python資料分析基礎——CSV檔案——選取連續的行

結語

本文介紹了CSV檔案中選取連續行的知識,對書上的内容及實際操作出現的問題進行了思考與總結。