首页 > 解决方案 > 如何通过Python列表中的文件迭代命令(循环)

问题描述

我是 Python 新手。我正在尝试编写一个简短的脚本。我想运行一个循环,在该循环中我必须读取许多文件并为每个文件运行一个命令。特别是,我想通过每个文件的两行进行计算并返回一个输出,其中包含一个引用的名称相关文件。

我能够将文件加载到列表中(“工作”)。我尝试编写第二个单循环来计算我必须对列表中的一个文件进行计算,并且它运行正常。问题是我无法遍历所有文件并从相关文件中获取每个“整数”值。

让我展示一下我尝试做的事情:

import numpy as np

#I'm loading the files that contain the values whith which I want to do my calculation in a loop

work = {}
for i in range(0,100):
    work[i] = np.loadtxt('work{}.txt'.format(i), float).T

#Now I'm trying to write a double loop in which I want to iterate the second loop (the calculation) over the files (that don't have the same length) in the list

integr = 0

for k in work:
    for i in range(1, len(k[1,:])):
                  integr = integr + k[1,i]*(k[0,i] - k[0,i-1])

#I would like to print every 'integr' which come from the calculation over each file

print(integr)

当我尝试运行它时,我收到此消息错误:

Traceback (most recent call last):
  File "lavoro.py", line 11, in <module>
    for i in range(1, len(k[1,:])):
TypeError: 'int' object has no attribute '__getitem__'

先感谢您。

标签: python

解决方案


我有点猜测,但如果我理解正确,你想work成为一个列表而不是字典。或者,也许您不想要它,但根据上下文,您当然可以使用列表而不是字典。
这是创建work列表的方法:

work = []
for i in range(0,100):
    work.append(np.loadtxt('work{}.txt'.format(i), float).T)

或者使用上述循环的等效列表推导(通常列表推导更快):

work = [np.loadtxt('work{}.txt'.format(i), float).T for i in range(100)]

现在您可以遍历work列表进行计算(我假设它们是正确的,我无法检查):

for k in work:
    integr = 0
    for i in range(1, len(k[1,:])):
        integr = integr + k[1,i]*(k[0,i] - k[0,i-1])

请注意,我integr = 0在循环内部移动,因此对于每个文件,它都重新初始化为 0,否则每个内部循环都将添加到先前内部循环的结果中。
但是,如果那是有意的行为,请移出integr = 0循环作为您的原始代码。


推荐阅读