有没有办法在 python 中嵌套两个文件输入?

发布于 2024-12-09 04:25:49 字数 363 浏览 0 评论 0原文

对于 fileX 中的每一行,我需要扫描 fileY 的所有行。

我尝试了这个:

for line in fileinput.input('fileX'):
    do.fun.stuff(line)
          for element in fileinput.input('fileY'):
              process(element,line)

但是我得到:

RuntimeError: input()已经激活

我想我必须指定fileinput的第二个实例与第一个实例不同。

For each line in fileX I need to scan all lines of fileY.

I tried this:

for line in fileinput.input('fileX'):
    do.fun.stuff(line)
          for element in fileinput.input('fileY'):
              process(element,line)

But I get:

RuntimeError: input() already active

I guess I have to specify that the second instance of fileinput is different from the first one.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

红玫瑰 2024-12-16 04:25:49

这不起作用,因为 fileinput.input() 创建一个全局实例,因此您不能以您尝试的方式调用它两次。

为什么不简单地:

for line in open('fileX'):
    do.fun.stuff(line)
    for element in open('fileY'):
        process(element,line)

This doesn't work since fileinput.input() creates a global instance, so you can't call it twice in the manner that you're trying to.

Why not simply:

for line in open('fileX'):
    do.fun.stuff(line)
    for element in open('fileY'):
        process(element,line)
沉睡月亮 2024-12-16 04:25:49

以下是对 @CatPlusPlus 建议的解决方案的明确答案:

import fileinput
fileX = fileinput.FileInput(files='fileX')
fileY = fileinput.FileInput(files='fileY')
for line in fileX:
    do.fun.stuff(line)
          for element in fileY:
              process(element,line)

Here is the explicit answer to the solution suggested by @CatPlusPlus:

import fileinput
fileX = fileinput.FileInput(files='fileX')
fileY = fileinput.FileInput(files='fileY')
for line in fileX:
    do.fun.stuff(line)
          for element in fileY:
              process(element,line)
时间你老了 2024-12-16 04:25:49

fileinput.input 使用 fileinput.FileInput 的全局共享实例。直接使用该类,创建两个实例,它应该可以工作。

fileinput.input uses a global shared instance of fileinput.FileInput. Use that class directly, creating two instances, and it should work.

千纸鹤带着心事 2024-12-16 04:25:49

使用 fileinput,您可以轻松地将多个文件作为一个单元进行迭代,但它似乎在这里没有给您带来任何好处。分别迭代文件的内容。一种不错的方法是使用 itertools.product:

import itertools
with open('fileX', 'r') as f1:
    with open('fileY', 'r') as f2:
        for (line, element) in itertools.product(f1, f2):
            process(element, line)

Using fileinput, you can iterate over multiple files easily as a unit, but it doesn't seem to gain you anything here. Iterate over the contents of the files separately. One nice approach is using itertools.product:

import itertools
with open('fileX', 'r') as f1:
    with open('fileY', 'r') as f2:
        for (line, element) in itertools.product(f1, f2):
            process(element, line)
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文