2016-11-08 29 views
0
fp = open ('data.txt','r') 
saveto = open('backup.txt','w') 
someline = fp.readline() 
savemodfile = '' 
while someline : 
    temp_array = someline.split() 
    print('temp_array[1] {0:20} temp_array[0] {0:20}'.format(temp_array[1], temp_array[0]), '\trating:', temp_array[len(temp_array)-1])) 
    someline = fp.readline() 
    savemodfile = temp_array[1] + ' ' + temp_array[0] +',\t\trating:'+ temp_array[10] 
    saveto.write(savemodfile + '\n') 
fp.close() 
saveto.close() 

輸入文件:data.txt中有這種模式的記錄:名姓年齡地址格式化輸出到外部txt文件

我想爲Backup.txt到具有以下格式:姓氏名字地址年齡

如何將數據以不錯的格式存儲在backup.txt中?我認爲我應該使用format()方法......

我使用代碼中的打印對象向你展示了我對format()的理解。當然,我沒有得到理想的結果。

+1

剛纔你的意思是「一種不錯的格式化方式」?您可以讓每個字段都具有預定數量的字符,但缺點是較長的值可能不適合。您可以用逗號,空格或引號分隔字段,但會阻止這些字符位於字段中。除非您提供關於數據和您想要的更多細節,否則我們無法爲您提供幫助。 –

回答

0

要回答你的問題: 你的確可以使用.format()方法上的繩子模板,請參閱文檔https://docs.python.org/3.5/library/stdtypes.html#str.format

例如:

'the first parameter is {}, the second parameter is {}, the third one is {}'.format("this one", "that one", "there") 

將輸出:'the first parameter is this one, the second parameter is that one, the third one is there'

你做在您的情況下似乎沒有正確使用format()'temp_array[1] {0:20} temp_array[0] {0:20}'.format(temp_array[1], temp_array[0])會輸出類似'temp_array[1] Lastname temp_array[0] Lastname '的東西。這是因爲{0:20}會將第一個參數輸出到format(),右側用20個字符的空格填充。

此外,代碼中還有許多需要改進的地方。我想你正在學Python,所以這很正常。這裏是產生你想要的輸出功能相當的代碼,並充分利用Python的功能和語法:

with open('data.txt', 'rt') as finput, \ 
    open('backup.txt','wt') as foutput: 
    for line in finput: 
     firstname, lastname, age, address = line.strip().split() 
     foutput.write("{} {} {} {}\n".format(lastname, firstname, address, age) 
+0

拆分和剝離兩者都刪除空白(因爲它們沒有參數)。你可以解釋爲什麼你不僅僅使用拆分或只剝離?我不明白strip.split想要「捕捉」什麼。 – Mynicks

+0

'strip()'將在行的開始和/或結束處刪除不必要的空白。如果沒有這樣的空格,那麼它返回相同的字符串。它不會更改任何空格_字符串。 'split()'會將字符串剪切爲空格作爲分隔符並返回結果字符串列表。 'strip()'在你的情況下可能不是必須的,但它不會傷害:) – Guillaume

+0

另外,如何正確關閉這兩個文件? finput.close()和foutput.close()throw SyntaxError – Mynicks

0

此代碼會給你在屏幕上,並在輸出文件格式輸出

fp = open ('data.txt','r') 
saveto = open('backup.txt','w') 
someline = fp.readline() 
savemodfile = '' 
while someline : 
    temp_array = someline.split() 
    str = '{:20}{:20}{:20}{:20}'.format(temp_array[1], temp_array[0], temp_array[2], temp_array[3]) 
    print(str)  
    savemodfile = str 
    saveto.write(savemodfile + '\n') 
    someline = fp.readline()  

fp.close() 
saveto.close() 

但是,這不是一個很漂亮的代碼在處理文件,請嘗試使用以下模式:

with open('a', 'w') as a, open('b', 'w') as b: 
    do_something() 

參考:How can I open multiple files using "with open" in Python?

0
fp = open ('data.txt','r') 
saveto = open('backup.txt','w') 
someline = fp.readline() 
savemodfile = '' 
while someline : 
    temp_array = someline.split() 
    someline = fp.readline() 
    savemodfile = '{:^20} {:^20} {:^20} {:^20}'.format(temp_array[1],temp_array[0],temp_array[3],temp_array[2]) 
    saveto.write(savemodfile + '\n') 
fp.close() 
saveto.close()