參考文獻:《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變量來跟蹤行編号,以便可以識别和選取想要保留的行。
這一行代碼使用if控制流語句,跳過那些不需要的頭部和尾部。在本例輸入檔案的前三行和後三行均不執行if代碼塊,起到了不讀取這些行的效果。
這行代碼的作用是處理需要保留的行,将它們寫入輸出檔案,在清單生成式中,使用strip函數除去清單中每個元素兩端的空格、制表符和換行符。
在這裡需要進一步讨論一下,由于小編比較懶,一開始把這行代碼寫成了這個樣子:
運作這兩種版本的腳本,觀察一下各自csv格式的檔案
(左圖為無strip版,右圖為有strip版)
是不是沒有看出什麼明顯的不同呢?那這意味着兩種版本就是相同的嗎?
答案當然不是啦!我們不妨換一種檔案打開方式看看,這裡小編使用的是記事本。
再仔細觀察,是不是發現了一些端倪呢?細心的小夥伴可以看出,這兩種版本差別在于最後一個逗号前的空格。無strip版本有空格,而有strip版本無空格。到此,是不是就可以了解strip函數在此處的作用呢?
最後這一行代碼,作用是将行編号進行疊代。
運作腳本
在指令行輸入以下指令,然後按Enter鍵:
檢視結果
(左圖為處理前,右圖為處理後)
結語
本文介紹了CSV檔案中選取連續行的知識,對書上的内容及實際操作出現的問題進行了思考與總結。