簡體   English   中英

按特定列數據過濾CSV行

[英]Filtering CSV rows by specific column data

我想根據第12列中的值過濾包含數百行的CSV文件(不帶標題)。過濾這些行的值包含“00GG”,“05FT”,“66DM”等數據。

使用下面的代碼,我可以根據一個標准打印行:

def load_source(filename):
    with open(filename, "r") as f:
        reader = csv.reader(f, delimiter=";")
        return list(reader)

sourcecsv = load_source("data1.csv")

for row in sourcecsv:
    if row[12] == "00GG":
        print(row)

由於數據過濾(1.csv)對於以后的任何查詢都很重要,我認為將它包含在函數load_source中是明智的。 我嘗試做一個類似的“for row .. if row [12]”循環,如上面的標准列表而不是一個字符串,並將其附加到一個新列表,但每當我嘗試打印時,我得到一個空列表(sourcecsv)然后。 謝謝你的幫助。

你可以這樣做:

def load_source(filename):
    with open(filename, "r") as f:
        reader = csv.reader(f, delimiter=";")
        return filter(lambda x: x[12] in ("00GG", "05FT", "66DM")), list(reader))

但是使用pandas可能是一個更好的主意,它可以加載csv文件,過濾它們等等。

http://pandas.pydata.org/

或者,您可以在100kb足跡下使用我的庫pyexcel

>>> import pyexcel as pe
>>> sheet=pe.get_sheet(file_name="test.csv", delimiter=';')
>>> sheet
Sheet Name: test.csv
+---+---+---+---+------+----+
| 1 | 2 | 3 | 4 | 00GG | 11 |
+---+---+---+---+------+----+
| 2 | 1 | 1 | 3 | 00GG | 12 |
+---+---+---+---+------+----+
| 3 | 2 | 4 | 5 | 11   | 11 |
+---+---+---+---+------+----+
>>> # filter out the rows that does not contain '00GG'
>>> filter = pe.filters.RowValueFilter(lambda row: row[4] != '00GG')
>>> sheet.filter(filter)
>>> sheet
Sheet Name: test.csv
+---+---+---+---+------+----+
| 1 | 2 | 3 | 4 | 00GG | 11 |
+---+---+---+---+------+----+
| 2 | 1 | 1 | 3 | 00GG | 12 |
+---+---+---+---+------+----+

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM