代码之家  ›  专栏  ›  技术社区  ›  George

循环遍历整个文件python

  •  -2
  • George  · 技术社区  · 7 年前

    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 for .

    2 回复  |  直到 7 年前
        1
  •  2
  •   cs95 abhishek58g    7 年前

    事实上,问题是您声明循环的方式。特别是,您正在使用枚举函数,该函数返回一个 (index, line) 元组。您没有单独捕获索引,因此无法获得所需的输出。

    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 包含所有行所需的数据。

        2
  •  -1
  •   Prune    7 年前

    enumerate for 语句忽略文件的行: line 只是从0到文件行长度的计数器。

    for line in file1:
    

    此外,如果您的输入文件有3行而不是您显示的6行,请适当编辑帖子。否则,您的输入行甚至没有位置7:11。