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

无法从.txt文件(python)中读取单独的行,python,python-3.x,Python,Python 3.x,我有一些代码如下: 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_deli

我有一些代码如下:

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)

未读入行,组合的_列表2为空。我试图排除故障,但似乎无法找到如何在不关闭文件并重新打开它(我正试图避免)的情况下使其正常工作。

您使用的是相同的
读取器
对象,该对象已被迭代,因此第二次调用
read\u lines
时,它将为空

您需要重置或重新创建它-

或者,将所有行读入单个生成器,然后在迭代一次时过滤掉它们

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)

谢谢你的回复。当我尝试使用reader.seek(0)重置csv.reader()迭代器时,我收到一条错误消息说“\u csv.reader对象没有属性seek”。使用csv模块seek方法不起作用吗?我想答案中代码中的注释说明它实际上不起作用……啊,我明白了,我需要使用File.seek(0)而不是reader.seek(0)您的方法在修复时起作用。谢谢
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)