2015-05-23 20 views
-1

我有一些整數,我想將其放到.txt文件中。我的方法如下:int1 = 4565,int2 = 3int3 = 169我應該如何將整數寫入文本文件,然後在Python中使用它們?

savedata = open("SaveData.txt","w") 
savedata.write("{}\n{}\n{}".format(int1,int2,int3)) 
savedata.close() 
exit() 

.txt文件產生的樣子:

4565 
3 
169 

當讀取該文件,這是我所:

LoadData = open("SaveData.txt","r+") 
new1 = LoadData.readlines(1) 
format1= ("".join(new1)) 
new_int1 = int(format1) 
new2 = LoadData.readlines(2) 
format2 = ("".join(new2)) 
new_int2= int(format2) 
new3 = LoadData.readlines(3) 
format3 = ("".join(new3)) 
new_int3= int(format3) 

對不起,我明白上面可能是非常低效的和凌亂。我上面試過的是使用"".join()來擺脫[\n]。由於將它們寫入文本文件使它們成爲字符串,我使用int(format3)將它們變回整數。然而,這是錯誤我得到:

ValueError: invalid literal for int() with base 10: '3\n169' 

我的問題是,我該如何得到45653169爲打印到文本文件成爲new_int1 = 4565new_int2 = 3new_int3 = 169

我試圖在使用int(format3)之前使用rstrip("\n"),但我無法解決此問題。

回答

0

嘗試使用元組拆包:

with open(filename) as f: 
    int1, int2, int3 = (int(val) for val in f.read().split()) 

爲拆分的默認行爲是分裂的任何空白,包括換行符。

或者你可以迭代文件對象本身,而不是剝離換行符。

with open(filename) as f: 
    int1, int2, int3 = (int(l.strip()) for l in f) 
+1

感謝您的幫助!只是想知道,打開(文件)作爲f:是什麼意思? – Yac

+2

@Yac,'with'語句實際上是在Python中訪問文件的首選方式。文件是代碼應該小心處理的資源 - 每當我們打開一個文件時,關閉它也是一種很好的形式。當我們離開塊時,'with'語句自動關閉文件(即縮進回到之前的狀態)。 'with'語句可以與稱爲'上下文管理器'的對象一起使用,其中的''文件'就是其中之一。你可以在這裏瞭解更多:https://docs.python.org/2/reference/compound_stmts.html#the-with-statement – jwilner

+0

謝謝你的解釋,因爲我正在用'.close() 。我會閱讀文檔。 – Yac

1

.readlines(x)x參數意味着許多線如何閱讀,而不是該線。這意味着new2 = LoadData.readlines(2)結束了閱讀第2行和第3行。只需一次一行,就可以按照您的預期工作。通過切換到.readline(),您也可以跳過不必要的.join()

+0

感謝您的迴應。我最初嘗試使用.readline(),但不斷包含.readline(1) - 認爲它是相對於行號。我現在明白錯誤。再次感謝。 – Yac

0

當你讀你應該得到

'4565\n3\n169' 

最簡單的方法這種格式到一個數組應該是整個文件

values = map(int, filter(None, f.read().split('\n'))) 
1

我只想寫的東西就像一個JSON文件可以識別整數。根據您提供給我們的三個整數示例,JSON文件的結構將得到簡化。JSON documentationPython JSON documentation

import json 

int1 = 4565 
int2 = 3 
int3 = 169 

line = [] 
for num in [int1, int2, int3]: 
    line.append(num) 

print(json.dumps(line)) 

json_fnw = open('numbers.json', 'w') 
json.dump(line, json_fnw) 
json_fnw.close 

然後,當你想提取值後:

json_fnr = open('numbers.json', 'r') 
json_data = json.load(json_fnr) 
json_fnr.close 

print(json_data) 

一個更復雜的數據結構的另一種方法是這樣創造JSON: {「整數」 :使用此代碼[4565,3,169]}

main_dict = {} 
line = [] 
for num in [int1, int2, int3]: 
    line.append(num) 
main_dict['integers'] = line 

json_fnw = open('numbers.json', 'w') 
json.dump(main_dict, json_fnw) 
json_fnw.close 

其中數據將被抽取這樣的:

json_fnr = open('numbers.json', 'r') 
json_data = json.load(json_fnr) 
json_fnr.close 

for num in json_data['integers']: 
    print(num) 
相關問題