猿问

无法从 .txt 文件(python)中读取单独的行

我有一些代码如下:


def read_lines(csv_reader, row_list):

    for row_number, row in enumerate(csv_reader):

        if row_number in row_list:

            yield row_number, row


with open(file_name, 'r') as File:

    reader = csv.reader(File, dialect='tab_delim')

    r = list(range(4))

    r2 = list(range(4, 7))

    combined_list = []

    combined_list2 = []


for row_number, row in read_lines(reader, r):

    row_tuples = list(it.combinations(row, 2))

    combined_list.append(row_tuples)

这适用于读取前 3 行并生成我想要的组合列表。但是,当我尝试在代码中稍后使用以下方法读取第二组行 (4,7) 时:


for row_number, row in read_lines(reader, r2):

    row_tuples = list(it.combinations(row, 2))

    combined_list.append(row_tuples)

未读入行并且 combine_list2 为空。我试图排除故障,但似乎无法弄清楚如何在不关闭文件并重新打开它的情况下使其工作(我试图避免)。


慕姐8265434
浏览 179回答 1
1回答

牛魔王的故事

您正在重复使用reader已经迭代过的同一个对象,因此第二次调用read_lines它时,它将为空。您需要重置或重新创建它 -重置 csv.reader() 迭代器for row_number, row in read_lines(reader, r):    # do stuff# TODO: reset 'reader'for row_number, row in read_lines(reader, r2):    # do stuff或者,将所有行读入一个生成器,然后在迭代一次时将它们过滤掉with open(file_name, 'r') as File:    reader = csv.reader(File, dialect='tab_delim')    r = list(range(4))    r2 = list(range(4, 7))    combined_list = []    combined_list2 = []    for row_number, row in enumerate(csv_reader):        data = list(it.combinations(row, 2))        if row_number in r:            combined_list.append(data)        if row_number in r2:            combined_list2.append(data)
随时随地看视频慕课网APP

相关分类

Python
我要回答