[英]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文件,過濾它們等等。
或者,您可以在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.