当前位置: 首页 > 面试题库 >

一次读取第2行

阎宝
2023-03-14
问题内容

是否有比从Python中的文件一次读取第二行更好的方法呢?

with open(fn) as f:
    for line in f:
        try:
            line2 = f.next()
        except StopIteration:
            line2 = ''
        print line, line2 # or something more interesting

我在2.5.4中。较新版本有何不同?

编辑:删除的答案指出:在py3k中,您需要执行next(f)而不是f.next()。更不用说打印更改


问题答案:

import itertools

with open(fn) as f:
  for line, line2 in itertools.izip_longest(f, f, fillvalue=''):
    print line, line2

las,izip_longest需要Python
2.6或更高版本;2.5仅具有izip,如果f有奇数行,它将截断最后一行。当然,提供与生成器相同的html" target="_blank">功能非常容易。

这是一个更一般的“一次N个”迭代器包装程序:

def natatime(itr, fillvalue=None, n=2):
  return itertools.izip_longest(*(iter(itr),)*n, fillvalue=fillvalue)

itertools 通常是最好的方法,但是,如果您坚持要自己实施,那么:

def natatime_no_itertools(itr, fillvalue=None, n=2):
  x = iter(itr)
  for item in x:
    yield (item,) + tuple(next(x, fillvalue) for _ in xrange(n-1))

在2.5中,我认为最好的方法实际上不是生成器,而是另一种基于itertools的解决方案:

def natatime_25(itr, fillvalue=None, n=2):
  x = itertools.chain(iter(itr), (fillvalue,) * (n-1))
  return itertools.izip(*(x,)*n)

(因为2.5没有内置的next,而且缺少izip_longest)。



 类似资料:
  • 我正在尝试使用react-native-NFC-Manager在我的react-本机应用程序中添加NFC功能,它工作正常。但问题是我第一次无法读取/写入NFC卡。第一次,我需要使用NFC工具应用程序编写一个新标签,将“NdeFormatable”转换为“Ndef”,否则我无法读取/写入NFC卡 我用这段代码写数据: 这个问题有什么解决办法吗?

  • 我尝试使用上下文菜单从listview中删除数据,得到了java.lang.IllegalStateException:Could not read row 0,col 2 from CursorWindow。在从游标访问数据之前,请确保游标已正确初始化。 第一行错误AssignmentRecord.SetAssid(Cursor.GetString(2)); 第二个错误是List records

  • 问题内容: 我正在尝试一次读取一行大文件。我在Quora上发现了一个与该主题有关的问题,但我缺少一些联系以使整个组件组合在一起。 我想弄清楚的一点是,如何一次从文件而不是如本示例中的STDIN读取一行。 我试过了: 但它不起作用。我知道,在紧急情况下,我可能会转而使用PHP之类的东西,但是我想弄清楚这一点。 我不认为其他答案会起作用,因为该文件比我在其上运行的具有内存的服务器大得多。 问题答案:

  • 如果用户通过cmd输入以下数字:< code>2 -13 4 12 -1 113 19,则输出应为: 但我得到的是这个: 即该对中的第二个数字再次重复自己作为下一对中的第一个数字。代码有什么问题?

  • 我是Spring Batch的新手。我的要求是我有一个阅读器,它通过Web服务调用/数据库调用获取记录,目前我正在将这些记录写入一个表。现在我需要处理相同的记录(阅读器读取的记录)并写入另一个表。这里要注意的一点是,第二次写入中存储的第二个项目是不同类型的第一次写入。 我需要像下面这样 对于上述相同的工作,我需要事务管理。此外,在步骤2中:-如果可能,我应该使用步骤1中已经读取的数据。