2013-04-04 172 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) 
相關問題