2013-04-04 130 views
0

我对python真的很陌生,现在我在学生项目上工作时遇到了一些问题。基本上我尝试从列中格式化的文本文件中读取数据。我将数据存储在列表中,对数据进行排序和处理,然后再将它们写入文件。我的问题是将书写的数据排列在适当的列中。我发现了一些方法,如如何正确地将列表的输出格式化为文本文件?

“%I,%F,%E” %(1000,1000,1000)

,但我不知道有多少列会有。所以我想知道是否有办法将所有列设置为固定宽度。

这是输入数据的样子:

2  232.248E-09   74.6825    2.5   5.00008   499.482 
5    10.   74.6825    2.5  -16.4304   -12.3 

这是我如何将数据存储在表的列表:

filename = getInput('MyPath', workdir) 
    lines = [] 
    f = open(filename, 'r') 
    while 1: 
     line = f.readline() 
     if line == '': 
      break 
     splitted = line.split() 
     lines.append(splitted)    
    f.close() 

要写入我第一次把所有该行的数据列表中的元素列表成一个字符串,元素之间有一个空闲的固定空间。但是,我需要一个固定的总空间,包括元素。但是我也不知道文件中的列数。

for k in xrange(len(lines)): 
    stringlist="" 
    for i in lines[k]: 
     stringlist = stringlist+str(i)+'  ' 
    lines[k] = stringlist+'\n' 

    f = open(workdir2, 'w') 
    for i in range(len(lines)): 
     f.write(lines[i]) 
    f.close() 

此代码基本上工作,但可悲的是输出格式不正确。

非常感谢您提前在这个问题上的任何帮助!

回答

0

你是绝对正确开始能够格式宽度为你使用上面的字符串格式化。但正如您正确指出的那样,棘手的一点是为可变大小的输出列表做这件事。相反,你可以使用join()函数:

output = ['a', 'b', 'c', 'd', 'e',] 

# format each column (len(a)) with a width of 10 spaces 
width = [10]*len(a) 

# write it out, using the join() function 
with open('output_example', 'w') as f: 
    f.write(''.join('%*s' % i for i in zip(width, output))) 

会写出来:

'   a   b   c   d   e' 

正如你所看到的,格式阵列width的长度由输出的长度来确定, len(a)。这非常灵活,您可以即时生成它。

希望这会有所帮助!

+1

非常感谢您的快速回答!在你的帮助下,我设法写了一个小功能,它现在正是我所需要的: def WriteOutput(matrix): workdir2 = os.getcwd()+'/ abaqusc。rpt' #将宽度为10个空格的每列(len(a))格式化为宽度为 width = [20] * len(matrix [0]) with open(workdir2,'w')as f: for j in xrange(len(matrix)): f.write(''。join('%* s'%i for zip in(width,matrix [j]))+'\ n') – 2013-04-04 11:34:30

0

字符串格式化可能是要走的路:虽然你可能需要先创建从这些数字的字符串,然后格式化正如我上面显示

>>> print("%10s%9s" % ("test1", "test2")) 
    test1 test2 

我不能完全理解你的写作代码,但尝试做这个工作,在某种程度上这样的:

from itertools import enumerate 

with open(workdir2, 'w') as datei: 
    for key, item in enumerate(zeilen): 
     line = "%4i %6.6" % key, item 
     datei.write(item) 
相关问题