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

如何在Python数组中读取格式化文件,python,arrays,input,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  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的数组。通常我会使用
行。拆分
,但如果两个数字之间的空格数不固定,这就不起作用了

with open("data.txt", "r") as data:
    [line.split() for line in data]
我在Python2.7和Python3.5中进行了测试。应该行得通


我在Python2.7和Python3.5中进行了测试。它应该可以工作

split应该可以在Python2和Python3中工作:

>>> str = '  0.00000  62.12404   0.00000'
>>> print str.split()
['0.00000', '62.12404', '0.00000']
您也可以尝试使用正则表达式:

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

split应该在python 2和python 3中使用:

>>> str = '  0.00000  62.12404   0.00000'
>>> print str.split()
['0.00000', '62.12404', '0.00000']
您也可以尝试使用正则表达式:

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

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']

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']
优雅的方式: 您可以使用
pandas.read\u csv
方法()读取文件。 使用经过广泛测试、记录和使用的现有模块应始终是完成任何任务的第一选择

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

丑陋的方式(重塑车轮): str类中的
split
方法可以处理几个连续的空格

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

优雅的方式: 您可以使用
pandas.read\u csv
方法()读取文件。 使用经过广泛测试、记录和使用的现有模块应始终是完成任何任务的第一选择

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

丑陋的方式(重塑车轮): str类中的
split
方法可以处理几个连续的空格

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


您可以将每一行剥离,用一个空格替换多个空格,然后使用拆分。尝试将其作为带分隔符空格的CSV读取。您使用的python版本是什么?在3.6输入中,中间有多个空格,比如
'23545345'.split()
返回
['23','545','345']
@Szymon,我使用的是3.4,但是如果我只是像这样使用
split()
,数组=np.zero((len(line),3))表示范围内的I(len(line)):数组[I,:]=(line[I].split())
I just get ValueError:无法将大小为0的序列复制到尺寸为3的数组轴,因为文件末尾可能有一个空行(或多个空行)。过滤掉这些就可以了。你可以去掉每一行,用一个空格替换多个空格,然后使用split。试着用CSV和分隔符space来阅读这篇文章。你使用的python版本是什么?在3.6输入中,中间有多个空格,比如
'23545345'.split()
返回
['23','545','345']
@Szymon,我使用的是3.4,但是如果我只是像这样使用
split()
,数组=np.zero((len(line),3))表示范围内的I(len(line)):数组[I,:]=(line[I].split())
I just get ValueError:无法将大小为0的序列复制到尺寸为3的数组轴,因为文件末尾可能有一个空行(或多个空行)。过滤掉这些就行了,这不适合我。当遍历这些行并使用
数组[i,:]=(行[i].split())
时,我将得到“ValueError:无法将大小为0的序列复制到维度为3的数组轴”作为错误。行是通过以下方式生成的:
lines=text\u file.read().split('\n')
和array是一个带有domensions len(行)的数组,3检查@lukas herman的解决方案,这是一种干净的方法。您还可以检查python中的意图列表以了解它!我发现了我的错误,我重复了太多的一步,结果我给数组的最后一个字段分配了一个空对象。你的解决方案很好用。谢谢这对我不起作用。当遍历这些行并使用
数组[i,:]=(行[i].split())
时,我将得到“ValueError:无法将大小为0的序列复制到维度为3的数组轴”作为错误。行是通过以下方式生成的:
lines=text\u file.read().split('\n')
和array是一个带有domensions len(行)的数组,3检查@lukas herman的解决方案,这是一种干净的方法。您还可以检查python中的意图列表以了解它!我发现了我的错误,我重复了太多的一步,结果我给数组的最后一个字段分配了一个空对象。你的解决方案很好用。谢谢