Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.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_Arrays_File - Fatal编程技术网

在python中打开多个文件并以数组形式存储数据

在python中打开多个文件并以数组形式存储数据,python,arrays,file,Python,Arrays,File,目前,我有这段代码来打开单个文件,跳过文件中的前七行,然后将文件中的数据存储到数组中。但是我有多个文件,我希望以类似的方式读取并将文件中的数据存储到数组中。现在,我只是针对不同的文件重复上面的代码。如何一次读取所有文件并将数据存储在数组中 数据文件看起来像这样 import numpy as np import matplotlib.pyplot as plt import csv file = 'random_file' with open(file + '.txt') as datafil

目前,我有这段代码来打开单个文件,跳过文件中的前七行,然后将文件中的数据存储到数组中。但是我有多个文件,我希望以类似的方式读取并将文件中的数据存储到数组中。现在,我只是针对不同的文件重复上面的代码。如何一次读取所有文件并将数据存储在数组中

数据文件看起来像这样

import numpy as np
import matplotlib.pyplot as plt
import csv

file = 'random_file'
with open(file + '.txt') as datafile:
    for line in range(7):
        next(datafile)
    for line in datafile:
        lines = datafile.readlines()
        x0_1  = [float(line.split()[0]) for line in lines]
        y1_1  = [float(line.split()[1]) for line in lines]
        Z_1   = [float(line.split()[2]) for line in lines]
        u_1   = [float(line.split()[3]) for line in lines]
        v_1   = [float(line.split()[4]) for line in lines]
        V0_1  = [float(line.split()[5]) for line in lines]
        V1_1  = [float(line.split()[6]) for line in lines]
        Yf_1  = [float(line.split()[7]) for line in lines]
        Yo_1  = [float(line.split()[8]) for line in lines]
        T_1   = [float(line.split()[9]) for line in lines]
        Yp0_1 = [float(line.split()[10]) for line in lines]
        Yp1_1 = [float(line.split()[11]) for line in lines]
        D_1   = [float(line.split()[12]) for line in lines]
        rho_1 = [float(line.split()[13]) for line in lines]
#Do something with the data

您可以创建一个包含所有文件名的数组,并遍历这些文件名。只要文件以相同的方式存储数据,并且您希望在其中读取相同的内容

大概是这样的:

files=['file1','file2','file3']
对于文件中的文件:
打开(文件+'.txt')作为数据文件:
#跳过前七行,阅读文件的其余部分

应该是注释,因为它不是直接答案,但无法在注释中格式化代码

注意:你的代码实际上跳过了8行,效率非常低。问题在于:

#First seven lines ignore #

  0.00000E+00  5.00000E-04  9.28613E-01  6.58135E-02  4.05154E-01  6.58135E-02  4.05154E-01  9.24508E-01  2.01228E-16  4.44076E+02  1.12880E-02  9.23567E-03  2.46667E-05  4.53488E-01
  0.00000E+00  1.50000E-03  8.14544E-01  9.64630E-02  3.82685E-01  9.64630E-02  3.82685E-01  8.03881E-01  0.00000E+00  6.74294E+02  2.93252E-02  2.39933E-02  2.46667E-05  3.15181E-01
  0.00000E+00  2.50000E-03  5.46555E-01  1.40368E-01  1.23704E-01  1.40368E-01  1.23704E-01  5.20482E-01  0.00000E+00  1.21516E+03  7.17009E-02  5.86644E-02  2.46667E-05  2.01024E-01
  0.00000E+00  3.50000E-03  1.23207E-01  1.08260E-01 -2.56808E-01  1.08260E-01 -2.56808E-01  7.27916E-02  0.00000E+00  2.06958E+03  1.38643E-01  1.13435E-01  2.46667E-05  1.54495E-01


此外,对每个无效字段重复拆分行

由于已导入csv模块,您可以执行以下操作:

for line in range(7):
    next(datafile)               # ok, 7 lines skipped
for line in datafile:            # read 8th line 
    lines = datafile.readlines() # lines only starts at the 9th line

将此代码放在函数中,并用每个要读取的文件调用它。此外,您可以使用
zip
函数“转置”表格,而不是反复为行中的行写入
[float(line.split()[0])
for line in range(7):
    next(datafile)               # ok, 7 lines skipped
x0_1, y1_1, Z_1, u_1, v_1, V0_1, V1_1, Yf_1, Yo_1, T_1, Yp0_1, Yp1_1, D_1, rho_1 = [
    [float(i) for i in row] for row in zip(*csv.reader(datafile, delimiter=' ',
                                                       skipinitialspace=True))][:14]