2014-02-13 763 views
3

基本上我需要創建一個程序,它將添加從逗號分隔的文本文件中讀取的數字。即Python - 從文本文件中讀取逗號分隔的值,然後將結果輸出到文本文件

file.txt的

1,2,3

4,5,6

7,8,9

到目前爲止我有簡單的代碼

x = 1 
y = 2 
z = 3 

sum=x+y+z 

print(sum) 

我不知道如何將文本文件中的每個數字分配給x,y,z。

我想要的是它會遍歷文本文件中的每一行,這將是一個簡單的循環。

但是我也不知道如何將結果輸出到另一個文本文件。 即answers.txt

非常感謝。

+2

所以你似乎在尋找的代碼,會讀取CSV和計算總和? – devnull

回答

-1
with open("file2.txt","w") as f: 
    print >> f,"\n".join(map(lambda x:str(sum(int(y) for y in x.split(","))),open("file1.txt"))) 
+0

這既不代碼也不回答高爾夫。 Downvoted,因爲我不認爲你的答案有幫助,特別是不適合新的程序員。 – l4mpi

+0

Meh問幾乎沒有努力的代碼,我會打高爾夫...它看起來像他花了更多的時間寫他的問題比他的代碼... –

0

您可以在更少的行做到這一點,但我希望你能找到這個解決方案可讀的,容易理解:

out = file('answers.txt', 'w') 
for line in file('file.txt', 'r'): 
    s = 0 
    for num in line.strip().split(','): 
     s += int(num) 
    out.write("%d\n" % s) 
0

對於這個任務,你可能想不使用文件在你的程序直接工作,但使用標準輸入(Python 2中的input()raw_input())和標準輸出(僅print())。

然後你你的腳本調用期間指定輸入和輸出文件名:

python script.py <file.txt> answer.txt 

有了這個計劃,你可以有一個這樣的程序(Python 2.7版):

while (True): 
    try: 
     x, y, z = [int(val) for val in raw_input().split(',')] 
     print (x + y + z) 
    except EOFError: 
     pass 
0

想知道的文件只有逗號分隔值,爲什麼不把文件另存爲「.csv」格式。如果可以的話,那麼:

您可以隨時使用CSV閱讀器閱讀的文檔下提任何CSV文件:http://docs.python.org/2/library/csv.html

快速例如您的方案:

with open('test.csv','rb') as csvfile: 
    csvreader = csv.reader(csvfile) 
    output_fil = open('output.txt', 'ab') 
    for row in csvreader: 
     result = 0 
     for elem in row: 
      result = result + int(elem) 
     print result 
     output_fil.writelines(str(result)) 

哪裏文本。CSV將包含輸入,如:

1,2,3 
4,5,6 
... 

和output.txt中應包含:

6 
15 
.. 
6

歡迎的StackOverflow!

你有正確的想法,讓我們開始打開一些文件。

with open("text.txt", "r") as filestream: 
    with open("answers.txt", "w") as filestreamtwo: 

在這裏,我們打開了兩個文件流「text.txt」和「answers.txt」。

由於我們使用「with」,這些文件流會在下面的空白代碼完成運行後自動關閉。

現在,讓我們一行一行地瀏覽文件「text.txt」。

for line in filestream: 

這將運行一個for循環並結束在文件的末尾。

接下來,我們需要將輸入文本更改爲我們可以使用的東西,比如數組!

currentline = line.split(",") 

現在,「currentline」包含第一行「text.txt」中列出的所有整數。

讓我們總結這些整數。我們不得不將int函數包裹在「currentline」數組中的每個元素周圍。否則,而不是添加整數,我們將連接字符串!

然後,我們添加回車符「\ n」,以便使「answers.txt」更清晰地理解。

filestreamtwo.write(total) 

現在,我們正在寫入文件「answers.txt」......就是這樣!你完成了!

下面的代碼再次:​​

with open("test.txt", "r") as filestream: 
    with open("answers.txt", "w") as filestreamtwo: 
     for line in filestream: 
      currentline = line.split(",") 
      total = str(int(currentline[0]) + int(currentline[1]) + int(currentline [2])) + "\n" 
      filestreamtwo.write(total) 
+0

嗨,爲什麼這個答案是錯的? – EducateMe

+0

由於您的代碼不合適而被降級。忽略這樣一個事實,即有一個'csv'模塊可以完成大部分的工作,你使用'while'來遍歷一個文件而不是'for line in file',你不使用'with'語句處理文件,一般來說你似乎不太瞭解python。一般來說,這段代碼並沒有教導人們應該使用的正確的成語;感覺你更習慣於java或不同的c風格語言,並且只是在python中應用該語言的概念,並提供更好的方法。 – l4mpi

+0

嗨l4mpi, 感謝您的迴應,OP表示他們希望以.txt格式輸出文件,所以我避免使用csv。我忘記了「對於文件行」,我現在將修改我的答案。 我對「with」不熟悉,請問您如何使用「with」打開文件流的示例,因爲我在網上找到的回覆對我來說非常複雜。 我只使用python,正如你所說的,不是很好。我最初來到stackoverflow學習java,但我想我可能會更好花更多時間在/ python! – EducateMe

0
INFILE = "input.csv" 
OUTFILE = "my.txt" 

def row_sum(row, delim=","): 
    try: 
     return sum(int(i) for i in row.split(delim)) 
    except ValueError: 
     return "" 

with open(INFILE) as inf, open(OUTFILE, "w") as outf: 
    outf.write("\n".join(str(row_sum(row)) for row in inf)) 
相關問題