titanic_0004 :文字輸出
2022/07/02
說明:
本文示範如何將 Python 的文字輸出 [1] 從螢幕 [2] - [4] 轉向到文字檔 [5] - [9]。
-----
https://pixabay.com/zh/photos/umbrella-only-sad-depression-2603980/
-----
Q1:如何另存 pandas dataframe 的 info() 到指定的文字檔?
A1:參考代碼一。
「1. 首先另存 sys.stdout 備用。
2. 開檔,並將 sys.stdout 指向所開的檔案。
3. 如此原來輸出到 sys.stdout(螢幕)的 info() 便會改成輸出到檔案。
4. 關檔。
5. 將原本備份的 sys.stdout 回存。」[5]。
寫程式前,先確定底下六個事項:
一、df.info()
「DataFrame.info(verbose=None, buf=None, max_cols=None, memory_usage=None, show_counts=None, null_counts=None)」[2]。鐵達尼號的訓練集 train.csv 有重要的資訊,當讀入到 dataframe 後,「buf=None」,「默認情況下,輸出打印到 sys.stdout」[2]。
二、print()
「print(object(s), sep=separator, end=end, file=file, flush=flush)」[3]。df.info() 的預設輸出跟 print() 一樣,都是 sys.stdout [3]。
三、sys.stdout
「sys.stdin、sys.stdout、sys.stderr。」[4]。系統的標準輸入、標準輸出、與標準錯誤輸出,通常是鍵盤、螢幕、螢幕。
四、sys.__stdout__
「sys.__stdin__、sys.__stdout__、sys.__stderr__。」[4]。預設值。
五、備份參考 sys.stdout
「我會嘗試這種解決方法(根本不使用 sys.__stdout__,因為您的環境可能使 sys.stdout、 sys.__stdout__ 兩者都不同 ):」[5]。
六、讀取並印出「t0004_1.txt」
記得關檔 [7]。
-----
代碼一
import pandas as pd import sys # read train.csv f_p = '/content/drive/My Drive/colab/data/titanic/' # file path df = pd.read_csv(f_p+'train.csv') # test 1 print('\ntest1') df.info() # test 2 print('\ntest2') df.info() # test 3 print('\ntest3') old_stdout = sys.stdout sys.stdout = open(f_p+'t0004_1.txt', 'w') # print('hey') df.info() sys.stdout.close() sys.stdout = old_stdout # test 4 print('\ntest4') df.info() # test 5 print('\ntest5') f = open(f_p+'t0004_1.txt', 'r') # f.read() print(f.read()) f.close()
-----
Fig. 1. 「test1」 to 「test4」.
圖一:
可看到 test1 與 test2 的訊息後,緊接的是 info()。而 test3 的訊息後面,info() 的內容並未顯示在螢幕上。test4 之後繼續顯示 info()。
-----
Fig. 2. 「test4」and 「test5」.
圖二:
test4 之後,又可正常顯示 info() 到螢幕。test5 的訊息印出後,如果我們不下「print(f.read())」、「f.close()」,而是使用註解裡的「f.read()」,則可以看到存入 t0004_1.txt 裡的是包含許多換行字元 \n 的長字串。
-----
Fig. 3. 「t0004_1.txt」.
圖三:
用 print() 或者用記事本開啟,t0004_1.txt 的長字串都可正常顯示換行的效果。
-----
References
# df.info()
[1] 鐵達尼號的悲劇:預測船難生還者的特徵工程筆記(搭配 FLAML 自動化建模)以及對 Kaggle 競賽的一些觀察 | by Alan Wang | Medium
# df.info() buf sys.stdout
[2] pandas.DataFrame.info — pandas 1.4.3 documentation
https://pandas.pydata.org/docs/reference/api/pandas.DataFrame.info.html
# file sys.stdout
[3] Python print() Function
https://www.w3schools.com/python/ref_func_print.asp
# sys.stdout __stdout__
[4] sys — System-specific parameters and functions — Python 3.10.5 documentation
https://docs.python.org/3/library/sys.html
# stdout source code
[5] python - sys.stdout not reassigning to sys.__stdout__ - Stack Overflow
https://stackoverflow.com/questions/12719328/sys-stdout-not-reassigning-to-sys-stdout
# open()
[6] Python File Open
https://www.w3schools.com/python/python_file_handling.asp
# read() close()
[7] Python File Open
https://www.w3schools.com/python/python_file_open.asp
# write()
[8] Python File Write
https://www.w3schools.com/python/python_file_write.asp
# os.remove() os.rmdir() os.path.exists()
[9] Python Delete File
https://www.w3schools.com/python/python_file_remove.asp
-----
鐵達尼號 Python 實作(目錄)
https://mandhistory.blogspot.com/2022/06/titanic.html
-----
沒有留言:
張貼留言
注意:只有此網誌的成員可以留言。