如何在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中的意图列表以了解它!我发现了我的错误,我重复了太多的一步,结果我给数组的最后一个字段分配了一个空对象。你的解决方案很好用。谢谢