[问题] 输出到文件的格式能分别设定吗

楼主: 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