Я разрабатываю программу, которая, среди прочего, читает csv с помощью csv.reader (). Я хочу сохранить переменные, которые соответствуют одному из двух условий, в двух разных переменных класса. Поскольку мне нравится писать списочные выражения, и я пытаюсь написать свой код более питоническим образом, мне было интересно, правильный ли это подход. Кажется, csv.reader () является объектом-генератором, потому что я могу повторить его всего один раз. Итак, для второго условия я создаю объект-читатель во второй раз. Мне кажется, это пустая трата ресурсов. Конечно, я мог бы написать это с нормальным циклом for и разными if-случаями. Но есть ли более питонный способ написать этот кусок кода?
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]]