为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

慕姐8265434 2021-07-09 17:51:33
我有一些代码如下:def read_lines(csv_reader, row_list):    for row_number, row in enumerate(csv_reader):        if row_number in row_list:            yield row_number, rowwith 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 为空。我试图排除故障,但似乎无法弄清楚如何在不关闭文件并重新打开它的情况下使其工作(我试图避免)。
查看完整描述

1 回答

?
牛魔王的故事

TA贡献1830条经验 获得超3个赞

您正在重复使用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)


查看完整回答
反对 回复 2021-07-13
  • 1 回答
  • 0 关注
  • 178 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号