2010-09-12 76 views
0

你好這裏是我的程序有:幫助寫輸出到另一文件:

with open('C://avy.txt', "rtU") as f: 
    columns = f.readline().strip().split(" ") 
    numRows = 0 
    sums = [0] * len(columns) 

    for line in f: 
     # Skip empty lines 
     if not line.strip(): 
      continue 

     values = line.split(" ") 
     for i in xrange(len(values)): 
      sums[i] += int(values[i]) 
     numRows += 1 

    for index, summedRowValue in enumerate(sums): 
     print columns[index], 1.0 * summedRowValue/numRows 

我想修改它,使它的輸出寫入到一個名爲成品文件。重寫時我總是收到錯誤。有人可以幫忙嗎?

感謝

+1

爲什麼不發佈寫入輸出的代碼片段,因此我們可以幫助您解決錯誤;而不是用勺子給你一個答案。 – fseto 2010-09-12 23:53:34

回答

1

更改代碼段現在讀:

for index, summedRowValue in enumerate(sums): 
     print columns[index], 1.0 * summedRowValue/numRows 

,使其代替:

with open('Finished', 'w') as ouf: 
    for index, summedRowValue in enumerate(sums): 
     print>>ouf, columns[index], 1.0 * summedRowValue/numRows 

正如你看到的,這是非常簡單:你只需要將循環嵌套在另一個with語句中(以確保正確打開和關閉輸出文件),將裸機print更改爲print>>ouf,以指示print使用打開的文件對象ouf而不是標準輸出。

+0

哇!整潔的技巧w /'打印>>' – fseto 2010-09-13 01:12:54

+0

@fseto,我實際上認爲它有點奇怪的語法,但它產生的功能確實有幫助 - 在python 3.any或2.6/2.7與'from __future__ import print_function' ,'print(columns [index],1.0 * summedRowValue/numRows,file = ouf)'獲得相同的功能和更理性的語法;-)。 – 2010-09-13 01:31:48

0
out = open('Finished', 'w') 
for index, summedRowValue in enumerate(sums): 
    out.write('%s %f\n' % (columns[index], 1.0 * summedRowValue/numRows)) 
+0

這寫了一個單一的大行'完成' - 我想你可能在某處忘了'\ n'。這是爲什麼在我的回答中,爲什麼我推薦使用'print >>'形式,它提供了所有'print'的常用設施(字段的自動串化和空間分離,自動行結束)以及只是在不同的打開文件對象上而不是默認的(標準輸出AKA'sys.stdout')。 – 2010-09-13 00:02:49

+0

是的,我忘記了。 – jcubic 2010-09-13 00:09:30