Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/345.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
循环遍历整个python文件_Python_For Loop_Input - Fatal编程技术网

循环遍历整个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,您仍然需要一个循环。也可以选择使用列表理解,但实际上并不重要。