请问 Python 处理文本文件都要这样麻烦吗

2017-09-14 00:15:11 +08:00
 sensui7

我需要处理一些不同且未知编码的文件, 下面代码先用二进制打开检测编码, 然后再二次打开, 大家是怎么弄的? 以前用 node 的时候无脑用 utf-8 打开文件, 从没遇到错误(误, 是不报错, 但是文本也没有处理...)

  bf = open(f, 'rb')
  code = chardet.detect(bf.read())['encoding']
  print(f + ' : ' + code)
  bf.close()
  with open(f, 'r', encoding=code) as source:
    texts = extractText(source.readlines())
  source.close()  
  with open(splitext(f)[0] + '_texts.txt', 'w', encoding='utf-8') as dist:
    dist.write('\n\n'.join('\n'.join(x) for x in texts))
  dist.close()
5783 次点击
所在节点    Python
44 条回复
weakish
2017-09-17 11:10:14 +08:00
@sensui7 打包 python 的话,Pyinstaller 和 py2exe 很方便。另外,其实写这些工具类的东西,Go 也蛮合适的(可以跨平台编译,最后的可执行文件里静态链接了库)。

with 的话,你猜得不够准。接触新语言,有时候靠猜比看文档要快,但你得猜准。猜不准的话效率就低了。不过猜的能力也是要练的。培养了猜的能力,是有助于下一个概念或者下一门语言的学习的。长远来看未必亏。

我这里提供一点猜 with 的思路:绝大部分情况下总是要关闭一个文件的,多打一行字倒还不算什么,关键是怕忘记关掉了,所以讲道理,类似 with 这样的东西设计的时候,不太可能不考虑这个常见的痛点的。

不过我有点事后诸葛亮。我当初学 with 不是靠猜的,而是靠看文档。但是呢,我后来学另外一些语言,看到类似 with 的结构,就能很快领会这个设计的用意。
weakish
2017-09-17 11:31:33 +08:00
@sensui7 另外,网上一些直接的回复,你不要太在意。

其实很多人是被《提问的智慧》一类的文章洗脑了。

《提问的智慧》主要讲如何提出一个好问题,讲得很好,但是它忽略了一个重要的问题:

人与人之间的交流,有的时候还是要讲一点礼貌的,特别是陌生人之间。网上打 RTFM 很容易, 但现实中你如果对一个不太熟悉的人说 Read the fucking manual, 如果你只是在玩梗那还好,如果你真的是这样想的,那其实是不怎么礼貌的。这会形成一种抑制交流的氛围,对协作(不仅是部门讲协作,网络的讨论其实也是一种协作)是不利的。

想象一下,你刚升级某个软件,同事随口问一句「这个版本有什么新功能?」,你回答「你他妈不会自己去看发布日志吗?」如果一个团队里都是这样交流的话,你觉得这个团队的氛围好吗?

而且,《提问的智慧》是有前提的,就是说开发者已经为开发自由软件花了大量时间了,你一个用户如果读手册能解决问题,那最好还是不要去挤占开发者的时间。

但是用户相互之间,还是少用 RTFM 为妙。别人问了一个初级问题,你没时间完全可以不回答,有时间可以回答,或者简短地说「我记得手册的 XXX section 里有写」、「 google YYY 」没有必要特意回答一句「你他妈不会 google 吗?」
cgwh
2017-09-18 18:21:49 +08:00
@weakish 说得中肯
fiht
2017-09-19 21:34:32 +08:00
大家辛苦一天了
想来论坛吹吹牛逼
然后看到楼主这么脏 /乱 /差(初级)的代码
还把锅甩给蟒蛇
就很生气

-------------
发现一个人
用着和我们一样的小轿车
却要推着走
一边推还要
这小轿车开起来真麻烦

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/390527

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX