2012-06-22 96 views
2

传统上,阅读充满了一个Python阵列中的文件,我用下面的语法使用python读取.arrays txt文件?

x, y, z = loadtxt("myfile.txt", unpack=True) 

它非常适用于单阵列的文件。

现在,我有一个更复杂的文件:

1.5 3.5 2.5 1.6 
4 
3 
1 2 3 4 5 
6 7 8 9 10 
11 12 13 14 15 
16 17 18 19 20 
1 2 
3 4 
5 6 

我想要做的是以后的事:

1.5 3.5 2.5 1.6 - >我想将它们放在三个变量+ 1的阵列标量

4 - > A = 4,我的第一阵列的行数

3 - > B = 3,麻木我的第二阵列

我与A = 4行第一阵列,我想在5个变量(如命令loadtxt(“”加载,解压=真)

1 2 3 4 5 
6 7 8 9 10 
11 12 13 14 15 
16 17 18 19 20 

我的第一阵列的行ER与B = 3条线,我想在2个变量(如命令loadtxt加载(“”,解包= TRUE)

1 2 
3 4 
5 6 

有什么技术做这样的事情蟒蛇?

非常感谢。

+2

这是非常琐碎的解析任务。你有什么尝试? –

+0

我不太了解python,所以我不知道如何解析具有几个数组大小的文件。 – Vincent

+0

我不明白第一行。另外,你如何区分nx1数组和数组长度? – Benjamin

回答

6

您在指定自己的文件格式,这不是很有用。我会如JSON建议使用现有的格式:

的myfile.txt:

{ 
    "a" : [ 
     [1, 2, 3, 4, 5], 
     [6, 7, 8, 9, 10], 
     [11, 12, 13, 14, 15], 
     [16, 17, 18, 19, 20] 
    ], 
    "b" : [ 
    ... 
    ] 
} 

read.py

import json 
myfile = open("myfile.txt") 
myVars = json.load(myfile) 
myfile.close() 
myVars['a'] 
3

你可以在Python打开一个文件,像这样:

f = open("myfile.txt") 

现在你可以通过所有的线条和每行可以用空格分开它:

for line in f.readlines(): 
    linearray = line.split(' ') 
    arraylength = len(linearray) 
    print("Array length: "+str(arraylength)) 

剩下的就是由你决定。

+0

只要文件中的行保证每个数字之间只有一个空格,我就喜欢这种方法。例如'len(“1-2-3”)。split(' - ')'= 3,而len(“1--2--3”)。split(' - ')'= 5。可能希望先将您从文件中读取的行间隔一格。 编辑: 我尝试在我的评论中使用空格,但它没有正确格式化。虽然,与破折号相同的想法。 – Valdogg21

+3

你不需要使用'.split('')',只需'.split()' –

+2

(1)'open(“myfile.txt”)作为f:'是一个更好的习惯; (2)'f:'中的行与'调用'一样好。readlines()'并且具有更好的内存属性; (3)'linearray = line.split()'将处理多个空格和制表符。 – DSM