2015-11-23 113 views
0

我正在嘗試讀取.txt文件並在一行中輸出結果。 .txt文件具有寫入它的隨機整數。我的代碼寫入這些數字,但不寫在同一行上。我也試圖找出這些整數的總和並打印出來。我不知道我的代碼有多接近,但我現在被卡住了。任何幫助,將不勝感激。查找變量的總和

def main(): 
    # Open a file for reading. 
    infile = open('numbers.txt', 'r') 
    file_contents = infile.read() 
    infile.close() 
    total = (sum,file_contents) 
    print(file_contents,'\n',end='') 
    print(total) 

main() 

這裏是寫的numbers.txt文件如果沒有運氣幫助

import random 

def main(): 
    nums = open('numbers.txt','w') #Opens and assigns numbers.txt 
    #Generates integer random integer between 4 and 7 
    file_size = random.randint(4, 7) 
    #Takes the file_size integer and generates that amount 
    #of random integers between 5 and 19. 
    for num in range(file_size): 
     random_num = random.randrange(5,20,2) 
     if random_num % 2 ==1: 
      nums.write(str(random_num)+'\n') 
    nums.close() 
    print('Data has been written.') 

main() 

我已經更新了代碼,還是不幸的代碼。

def main(): 
    # Open a file for reading. 

    infile = open('numbers.txt', 'r') 



    file_contents = infile.read() 

    total += sum(int(file_contents.strip())) 





    infile.close() 

    print(file_contents) 
    print(total) 






main() 
+1

爲什麼你希望一切都在一行上,當你的print語句是'打印(file_contents, '\ n',端= '')'? – MattDMo

+0

他們是每行一個號碼還是結構? –

+0

這些數字應該全部出現在一行上。 – CUSE

回答

0
import sys 
sum = 0 
for lineno, line in enumerate(open("numbers.txt","r")): 
    try: 
     sum += int(line.strip()) 
     sys.stdout.write(str(sum)+" ") 
    except ValueError: 
     print ("error in line %d"%lineno) 
sys.stdout.flush() 
print("sum=",sum) 

更新例子,因此,它也將輸出數字

+0

您應該避免使用'file_object.read()'讀取整個文件,因爲它會將整個文件加載到內存中。你應該使用生成器和迭代器等。文本文件對象是可迭代的。 – nagylzs

+0

你還沒有完全回答這個問題 - 有兩個問題,總結整數並將它們打印在一行上,你只總結了它們 – PyNEwbie

0
total = sum(map(int,file_contents.split())) 

解釋

分裂() - 分割文件的內容以及每一個空格(包括'\n'

map( int,...) - 將以前結果的每個元素轉換爲int

sum() - 獲取可迭代的返回和。其內置函數

+0

是的,如果文件沒有太多的行,這是有效的。儘管您不應該在生產環境中使用它。如果不需要,不應該將整個文件保存在內存中。在這種情況下,它不是必需的。 – nagylzs

+0

'file_contents = infile.read()'。他已經犯了錯誤 –

-1

numbers.txt寫存儲在string格式,所以當你從這個文件中讀取它們,你會得到他們回來爲string的數字,這意味着你需要將它們轉換回到int但你首先需要去掉任何空白字符,因爲在這個結尾處用\n保存它們。

我想補充另一件事,根據Python文檔與文件I/O操作打交道時:

它與文件打交道 對象時使用關鍵字用好的做法。這具有如下優點:在 其套件結束後,即使在路上引發異常,該文件也能正確關閉。這是 也比寫等價的try-finally塊要短得多,

所以,代碼可以如下:

def main(): 
total = 0 
# Open a file for reading. 
with open('numbers.txt', 'r') as infile: 
    line = infile.readline() 
    while (line): 
     total += int(line.strip()) 
     line = infile.readline() 
print(total) 

main() 
+0

A甚至沒有一個單一的評論?? ... com'n!...如果我錯了,然後糾正我...只是! –

+0

我給了你一個投票,我仍然試圖編碼它。你給了我一些見解,但我還沒有弄明白。非常感激。 – CUSE

+0

@Anthony,我更新了代碼以糾正錯誤,因爲它提供了錯誤,我可以提供任何幫助? –