如何在Python数组中读取格式化文件

时间:2017-06-18 19:59:46

标签: python arrays input

我需要读取格式如下的文件中的数据:

  0.00000  62.12404   0.00000
  1.95695  62.12288   0.00000
  3.91389  62.11939   0.00000
  5.87084  62.11357   0.00000
  7.82779  62.10543   0.00000
  9.78474  62.09496   0.00000
 11.74168  62.08218   0.00000
 13.69863  62.06707   0.00000

(生成数据的脚本将格式指定为“%9.5f”)。行数不固定,我希望最后有3xN数组或3个长度为N的数组。通常情况下,我会使用lines.split,但如果数字之间的空格数不固定,则无法正常工作。

4 个答案:

答案 0 :(得分:3)

优雅的方式:

您可以使用pandas.read_csv方法(link to the documentation page)阅读该文件。 使用已经过广泛测试,记录和使用的现有模块应始终是考虑完成任何任务的第一个选项。

注意您可以使用sep='\s+'

处理多个连续的空格

丑陋的方式(重新发明轮子):

str类的

split方法可以处理几个连续的空格。

  

如果未指定sep或为None,则应用不同的拆分算法:连续空格的运行被视为单个分隔符,如果字符串具有前导或尾随,则结果将在开头或结尾处不包含空字符串空白。因此,将空字符串或仅由空格组成的字符串拆分为无分隔符将返回[]。

Reference

答案 1 :(得分:1)

with open("data.txt", "r") as data:
    [line.split() for line in data]

我在python 2.7和python 3.5中测试过。它应该工作

答案 2 :(得分:1)

split应该在python 2和3中工作:

>>> str = '  0.00000  62.12404   0.00000'
>>> print str.split()
['0.00000', '62.12404', '0.00000']

您也可以尝试使用正则表达式:

print re.split('\s{1,}', str.strip())

答案 3 :(得分:0)

data.txt包含您的数据

file_object  = open("data.txt", "r")

mylist = list()

while True:
    a = file_object.readline().split()
    if a is None or len(a) == 0 or a is EOFError:
        break
    else:
       mylist.append(a)

for a in mylist:
    print(a)

此代码给出了

下面的结果
['0.00000', '62.12404', '0.00000']
['1.95695', '62.12288', '0.00000']
['3.91389', '62.11939', '0.00000']
['5.87084', '62.11357', '0.00000']
['7.82779', '62.10543', '0.00000']
['9.78474', '62.09496', '0.00000']
['11.74168', '62.08218', '0.00000']
['13.69863', '62.06707', '0.00000']