[問題] 輸出到文件的格式能分別設定嗎

作者: Lyumin (玉米)   2021-08-20 12:28:28
各位大大好,小弟剛接觸python約一個月
目前都是在yt看影片自學
上週終於學到網頁爬蟲,範例是抓PTT版面標題
於是就自己寫了一個抓取留言的小程式
也經過了很多次的修改後把內文跟作者ID之類的加上去
最近終於修改完成了
只是我發現輸出到記事本的格式挺讓人眼花的
想問看看有沒有辦法讓推文標籤ID及內容置左 時間置右這樣去做輸出
不管怎麼做好像都沒有辦法讓格式整齊點
所以上來問問看有沒有甚麼方法可以做到
程式有點長放在github裡
https://reurl.cc/qg7On3
應該有很多地方可以精簡,還在學習中請見諒
另外也有發現抓內容部分可能會因為發文者的文字習慣會有bug產生
更新
目前輸出到記事本的推文部分是這樣
推 ddavid: 置左置右這些可以去查一下Python format string的各種用法 08/20 12:45
→ Lyumin: 查到都是print的用法 用在file.write裡好像沒作用 08/20 12:50
推 lycantrope: 你有查string format align? string先format再寫入吧 08/20 13:10
我想輸出成以下這樣
推 ddavid: 置左置右這些可以去查一下Python format string的各種用法 08/20 12:45
→ Lyumin: 查到都是print的用法 用在file.write裡好像沒作用 08/20 12:50
推 lycantrope: 你有查string format align? string先format再寫入吧 08/20 13:10
程式是用while去做迴圈然後輸出 試過"{:>8}".format()還是沒辦法對齊
file.write(tag[x].text+id[x].text+msg[x].text+time[x].text)
作者: ddavid (謊言接線生)   2021-08-20 12:45:00
置左置右這些可以去查一下Python format string的各種用法
作者: Lyumin (玉米)   2021-08-20 12:50:00
查到都是print的用法 用在file.write裡好像沒作用
作者: lycantrope (阿寬)   2021-08-20 13:10:00
你有查string format align? string先format再寫入吧
作者: s0914714 (YA)   2021-08-20 13:25:00
https://reurl.cc/MAp043 Python string format
作者: ddavid (謊言接線生)   2021-08-20 13:52:00
其實你問題裡也可以附上輸出的範例然後做法是先建好format string,才把該string寫入檔案
作者: s0914714 (YA)   2021-08-20 14:03:00
先印看看字串是不是符合你預期 再寫入檔案應該就OKformat裡面要有參數 print("{:<10}123".format("你好"))可以先試試小功能再慢慢組合起來你應該是遇到中文對齊的問題
作者: ddavid (謊言接線生)   2021-08-20 16:29:00
你能實際給對齊失敗的例子嗎,搞不太清楚你的問題是哪一種不知道是你對齊設定下錯、上面說的中文還是資料特殊例外
作者: lycantrope (阿寬)   2021-08-20 16:34:00
id加上冒號空格最長就14字,靠右對齊應該是"{:<14}"吧推文本身中英混雜,要先處理全半形長度不同才補空格
作者: Lyumin (玉米)   2021-08-20 16:53:00
原來ID加冒號最長是14!我是測試15可以讓標籤到冒號對齊,只是目前推文內容跟時間還沒辦法,全打英文的最長字元是52,這部分我就不太懂怎麼去切了https://i.imgur.com/OzDl4Bm.jpg輸出時間無法對齊https://i.imgur.com/Ln3sRSg.jpg
作者: lycantrope (阿寬)   2021-08-20 17:07:00
你可以用unicodedata.east_asian_width 去計算width啦
作者: Lyumin (玉米)   2021-08-20 18:02:00
腦袋還是卡關中,推文加空格到日期是54,但日期就是沒對齊
作者: TitanEric (泰坦)   2021-08-20 19:06:00
怎麼不乾脆寫成CSV
作者: lycantrope (阿寬)   2021-08-20 19:49:00
直接弄成dataframe一切都解決,堅持用plain text太累
作者: art1 (人,原來不是人)   2021-08-20 21:19:00
問題應該出在 format 不管對英文或中文都是算一個字元寬?所以你必須先算出實際的單字元總寬度再動態調整要用來對齊的數字或是直接修改 format 原始碼讓他把中文當成雙位元的字寬https://reurl.cc/qg7K90 不知道這個解法是否能解決你的問題之前用一個自動換行的函式,也是去改原始碼才解決這問題
作者: lycantrope (阿寬)   2021-08-20 21:59:00
https://reurl.cc/mL8pyA 先count字數寬度再補空格
作者: Hsins (翔)   2021-08-21 03:20:00
批踢踢的 BBS 本身是 Big5 編碼,要算字元長度補空格的話,建議可以將中英混合的字串轉成 big5 再算長度比如 'ptt'.encode('big5') 的結果會是 3'批踢踢'.encode('big5') 的結果會是 6len('ptt'.encode('big5'))len('批踢踢'.encode('big5'))
作者: lycantrope (阿寬)   2021-08-21 17:45:00
原來可以用big5來計算,又學到一招了。
作者: Lyumin (玉米)   2021-08-23 00:30:00
咦..不是utf8編碼嗎?

Links booklink

Contact Us: admin [ a t ] ucptt.com