循环遍历整个python文件
我把这段代码放在一起:循环遍历整个python文件,python,for-loop,input,Python,For Loop,Input,我把这段代码放在一起: flux =[31.,29,27.,25.] F=[] with open("results.rdx", "r") as file1: for line in enumerate(file1): f_list = [float(i) for line in file1 for i in line.split(',') if i.strip()] F = f_list[7:11] with open("results.txt", "a
flux =[31.,29,27.,25.]
F=[]
with open("results.rdx", "r") as file1:
for line in enumerate(file1):
f_list = [float(i) for line in file1 for i in line.split(',') if
i.strip()]
F = f_list[7:11]
with open("results.txt", "a+") as file2:
file2.write(str(chisqfunc(flux,F)))
file2.write("\n")
我的输入文件如下所示:
5.0, 1000.0, 100000000000000.0, 115.2712, 230.538, 345.796, 461.0408,
1.053E-09, 1.839E-09, 1.632E-10, 1.959E-12, 4.109, 3.683, 3.586, 3.650
5.0, 1000.0, 500000000000000.0, 115.2712, 230.538, 345.796, 461.0408,
4.873E-09, 8.890E-09, 8.243E-10, 9.974E-12, 4.157, 3.704, 3.582, 3.649
5.0, 1000.0, 1000000000000000.0, 115.2712, 230.538, 345.796, 461.0408,
8.883E-09, 1.705E-08, 1.668E-09, 2.039E-11, 4.212, 3.731, 3.577, 3.648
事实上还有很多行,但是把它们全部贴出来是没有意义的。该函数执行一些数组乘法等操作。我希望代码能够执行的是:读取第一行,将第7-10列的值附加到数组F[]
,调用chisqfunc
,并将其结果打印到文件results.txt
。然后转到第二行,将新值附加到F
等。
但它所做的只是从第2行开始,对第2行执行上述步骤,只打印第2行的值。
我怀疑问题出在我为声明的方式上。
非常感谢您的帮助。枚举返回值对:一个计数,后跟给定iterable的元素。您的
for
语句忽略了文件的行:line
只是从0到文件行长度的计数器
也许试试
for line in file1:
此外,如果您的输入文件有3行,而不是您显示的6行,请适当编辑帖子。否则,您的输入行甚至没有位置7:11。问题实际上是您声明循环的方式。特别是,您使用的是enumerate函数,它返回一个
(索引,行)
元组。您没有单独捕获索引,因此无法获得所需的输出
for line in file1:
F = list(map(float, map(str.strip, line.strip().split(','))))[7:11]
...
这里有一个更好的方法来实现这一点,特别是如果您使用的是一个大的数字文件:使用
numpy
In [84]: x = np.loadtxt('data.in', delimiter=',')
In [88]: F = x[:, 7:11]
In [89]: F
Out[89]:
array([[ 1.05300000e-09, 1.83900000e-09, 1.63200000e-10,
1.95900000e-12],
[ 4.87300000e-09, 8.89000000e-09, 8.24300000e-10,
9.97400000e-12],
[ 8.88300000e-09, 1.70500000e-08, 1.66800000e-09,
2.03900000e-11]])
在这里,我假设在您发布的数据中,您已经手动添加了额外的换行符,我删除了这些换行符以使其正常工作
F
包含所有行所需的数据。请确保准确复制缩进,尤其是在涉及循环时。为什么要丢弃索引7之前的所有数字?只是好奇。你的逻辑很混乱,我建议你从头开始。OP,你安装了numpy吗?@patrick抱歉,我错过了。对于你编写的代码,我仍然需要某种(For?)循环,它将调用数组F中的每个4位数组,将其用作我的chisqfunc的参数,打印结果,然后转到下一个4位数组。我想到的解决方案是使用“for I in range()”,但这只适用于具有特定行数的特定文件。我想知道是否还有更一般的方法。@George您可以将其与方法1中的循环结合起来。对于方法2,您仍然需要一个循环。也可以选择使用列表理解,但实际上并不重要。