簡體   English   中英

以pythonic方式迭代csv.reader()

[英]Iterating over csv.reader() in a pythonic way

我正在開發一個程序,用csv.reader()讀取csv等。 我想在兩個不同的類變量中保存與兩個條件之一匹配的變量。 因為我喜歡編寫列表推導,並且我試圖以更加pythonic的方式編寫我的代碼,我想知道這是否是正確的方法。 csv.reader()似乎是一個生成器對象,因為我只能迭代它一次。 所以對於第二個條件,我第二次創建了reader-object。 這對我來說似乎是一種浪費。 當然,我可以用正常的for循環寫它,如果情況不同。 但是有更多的pythonic方式來編寫這段代碼嗎?

with open(file, "r") as f:
    reader = csv.reader(f, delimiter=",")
    self.xitireq = [row[0] for row in reader if "xiti" in row[0]]
with open(file, "r") as f:
    reader = csv.reader(f, delimiter=",")
    self.apireq = [row[0] for row in reader if "https://www.blabal.de/api" in row[0]]

如果我寫這樣的代碼,self.apireq是空的:

with open(file, "r") as f:
    reader = csv.reader(f, delimiter=",")
    self.xitireq = [row[0] for row in reader if "xiti" in row[0]]
    self.apireq = [row[0] for row in reader if "https://www.blabal.de/api" in row[0]]

我能想到的最簡單的解決方案就是這樣做

with open(file, "r") as f:
    reader = list(csv.reader(f, delimiter=","))
    self.xitireq = [x for x in reader if "xiti" in x]
    self.apireq = [x for x in reader if "https://www.blabal.de/api" in x]

這里唯一的區別是我將你的閱讀器轉換為一個列表,列表(),基於這個帖子Python import csv to list和這個文檔https://docs.python.org/3/library/csv.html#csv .Dialect

此時可能更准確地將讀者重命名為某些內容,但這只是語義。

暫無
暫無

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

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