2016-05-12 217 views
0

我遇到打印到txt文件的問題。該文件包含以字節存儲的信息。無論我嘗試什麼,我只能得到要在shell中打印的輸出。這就是我所擁有的 - 任何幫助都是值得歡迎的。用Python寫入txt文件

def main(): 
    with open("in.txt", "rb") as f: 
     byte = f.read(1) 
     while byte != "": 
      print ord(byte), 
      byte = f.read(1) 


with open('out.txt','w') as f: 
    if __name__ == '__main__': 
     f.write(main()) 
     close.f() 
+1

你的'main'函數沒有返回值 –

回答

2

這是對各種功能和方法的根本誤解。您正在將文件main()的返回值寫入文件,期望mainprint()調用轉到該文件。它不這樣工作。

def main(): 
    with open("in.txt", "rb") as f, open('out.txt','w') as output: 
     byte = f.read(1) 
     while byte != "": 
      output.write(str(ord(byte))) 
      byte = f.read(1) 

if __name__ == '__main__': 
    main() 

使用file.write()寫入字符串(或字節,如果您使用的輸出類型,你目前都沒有)到一個文件中。爲了讓您的代碼正常工作,main()將不得不返回一個完整的字符串和您想要寫入的內容。

+0

非常感謝 - 顯然我還在學習。我非常感謝你的解釋。這似乎解決了這個問題。 – Maggie

1

您從main()中調用print ord(byte)。這會打印到控制檯。

您還打電話給f.write(main()),它似乎假設main()要去返回一個值,但它不是。

它看起來像你打算做的是用一個語句替換print ord(byte),該語句將你想要的輸出附加到一個字符串,然後return這個字符串來自你的main()函數。

+0

非常感謝! – Maggie

1

您需要從函數main返回字符串。您目前正在打印它並不返回任何內容。這將組裝字符串並將其返回

def main(): 
    with open("in.txt", "rb") as f: 
     ret = "" 
     byte = f.read(1) 
     while byte != "": 
      ret = ret + byte 
      byte = f.read(1) 
    return ret 


with open('out.txt','w') as f: 
    if __name__ == '__main__': 
     f.write(main()) 
     close.f() 
+0

感謝您的反饋,我可以使用所有的幫助,我可以得到:) – Maggie