读取同一行中多个项目的项目

时间:2016-06-16 15:25:02

标签: python file-io rows

我正在尝试让我的程序读取一个infile并将其绘制在图表上。当infile每行只包含一个项目时,它可以工作,但在这个新文件中,同一行中有多个项目:

  

第1行:-4.6653184e-01 -3.9003953e-01 -1.3689525e + 00 -2.9784036e-01 -1.2366933e + 00 -1.4433164e + 00 -1.7245383e + 00 -2.2787106e + 00 -9.8088629e- 01 -1.9053069e + 00 -1.7806724e + 00 -3.1259933e + 00 -2.1796645e + 00 -1.8323782e + 00 -1.9089487e + 00 -3.6322765e + 00

     

第2行:-8.9710621e-01 -6.2431759e-01 -1.4762999e + 00 -2.2668609e-01 -1.6593426e + 00 -1.5644687e + 00 -2.4312715e + 00 -2.8894224e + 00 -1.7810424e + 00 -2.2357098e + 00 -2.8545336e + 00 -3.7422563e + 00 -3.0884226e + 00 -2.9146711e + 00 -3.3407812e + 00 -5.2601065e + 00

我之前能够用

做到这一点
  

lines = infile.readlines()

在for循环中,但现在我不知道从哪里开始。我对python很新,我很感激帮助。

另外,请注意,大约有35,000行,我不能只进入文本文件并在每个条目后“输入”。谢谢!

3 个答案:

答案 0 :(得分:1)

这取决于你想做什么。从您已粘贴的行中,如果您想要将所有值选为单个数据集,则可以替换您拥有的内容:

lines = []
[lines.extend(_.split()) for _ in fd.readlines()]
print lines

这将为数组的每个位置提供一个值:

['-4.6653184e-01', '-3.9003953e-01', '-1.3689525e+00', '-2.9784036e-01', '-1.2366933e+00', '-1.4433164e+00', '-1.7245383e+00', '-2.2787106e+00', '-9.8088629e-01', '-1.9053069e+00', '-1.7806724e+00', '-3.1259933e+00', '-2.1796645e+00', '-1.8323782e+00', '-1.9089487e+00', '-3.6322765e+00', '-8.9710621e-01', '-6.2431759e-01', '-1.4762999e+00', '-2.2668609e-01', '-1.6593426e+00', '-1.5644687e+00', '-2.4312715e+00', '-2.8894224e+00', '-1.7810424e+00', '-2.2357098e+00', '-2.8545336e+00', '-3.7422563e+00', '-3.0884226e+00', '-2.9146711e+00', '-3.3407812e+00', '-5.2601065e+00']

如果您想创建一个数据矩阵,其中每列是单独的数据集,那么您将readlines替换为:

lines = [_.split() for _ in fd.readlines()

将生成(在您的示例中)两行和N列的矩阵,例如:

[['-4.6653184e-01', '-3.9003953e-01', '-1.3689525e+00', '-2.9784036e-01', '-1.2366933e+00', '-1.4433164e+00', '-1.7245383e+00', '-2.2787106e+00', '-9.8088629e-01', '-1.9053069e+00', '-1.7806724e+00', '-3.1259933e+00', '-2.1796645e+00', '-1.8323782e+00', '-1.9089487e+00', '-3.6322765e+00'],
 ['-8.9710621e-01', '-6.2431759e-01', '-1.4762999e+00', '-2.2668609e-01', '-1.6593426e+00', '-1.5644687e+00', '-2.4312715e+00', '-2.8894224e+00', '-1.7810424e+00', '-2.2357098e+00', '-2.8545336e+00', '-3.7422563e+00', '-3.0884226e+00', '-2.9146711e+00', '-3.3407812e+00', '-5.2601065e+00']]

答案 1 :(得分:0)

那是因为MyService正在这样做;它将获取它在一行中找到的所有值,并将其作为单个项目附加到列表中。相反,在每个行中,您需要一个额外的步骤,根据分隔符分隔行中的每个数字。为此,我们可以使用.readlines()并将分隔符指定为空字符串(与单个空格相同)。

.split()

答案 2 :(得分:0)

如果所有值都用空格分隔,则只需使用

即可
for line in lines:
    items = line.split()

如果他们被别人分开,请使用line.split(separator)。这将在每次出现separator时拆分字符串(如果没有提供分隔符,它将在连续的空格后分割)并返回一个项目列表,然后您可以进一步处理这些项目。