请问 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()
5763 次点击
所在节点    Python
44 条回复
jtsai
2017-09-14 09:24:00 +08:00
请问个问题也能引来这么多恶意。目瞪狗呆😳,楼主不哭,俺挺你。
arzterk
2017-09-14 09:33:09 +08:00
哈哈哈,心疼楼主;以后直接搜索了再来发帖免得被喷
weakish
2017-09-14 10:17:49 +08:00
@jtsai 但是这问题确实槽点太多,不知道从哪里吐起了。
CryMeatel
2017-09-14 10:26:46 +08:00
…… LZ 完全是闲的无聊,用复杂于语言常规写法几倍的方式写出个问题,然后来吐槽下……

百度先把,别折腾自己了……
CryMeatel
2017-09-14 10:28:23 +08:00
这样回复比较正式:

完全不用这么麻烦,建议先百度学习下基础。
jtsai
2017-09-14 10:48:07 +08:00
@weakish 有一定的道理
crab
2017-09-14 10:53:42 +08:00
@jtsai 主要原因不是这个帖子,而是前面那个对比贴。在不熟悉 Python 的情况下,去吐槽。
NaVient
2017-09-14 10:55:11 +08:00
@jtsai 建议你去看看楼主的上一篇帖子,你就知道为什么楼主会被这么多人吐槽了
weakish
2017-09-14 11:15:14 +08:00
@CryMeatel 其实有些不用搜索就能意识到问题,比如 with 后再 close, 那这 with 设计出来是干什么用的?其实我很好奇这代码是从哪里学来的。

@crab @NaVient 上一个帖子我倒觉得还好,虽然除了缩进以外我一个都觉得文不对题,但至少展示了某个习惯写 JavaScript 的人刚接触 Python 可能感到困惑的地方,如果要写类似 Python for JavaScript Programmer 之类的东西还有一定的参考价值。
Wicked
2017-09-14 12:34:35 +08:00
我也想吐槽,python 处理字符串已经是神一般的容易了,你用 C++试试…
对于楼主的问题,最简单的方法就是逐个编码 try catch,直到一种能成功
sensui7
2017-09-14 12:39:46 +08:00
关于 python
这两天的 python 的经历是这样的, 我之前用 node 写了一个处理字幕脚本, 要发给别人, node 依赖环境对于别人来说过于麻烦, 也许不麻烦, 但是我的习惯是让对方下载回来双击就能运行, 他不需要知道任何其他东西.
考虑过 electron, 我实在是嫌弃太大, 脚本一共没几行, 干嘛打包进去那么大的一个环境.
所以我就用了 python, 在网上看了一些语法, 就写了, 之前有人问我看的什么教材, 我压根就没看教材, 就是语法罗列.

关于楼上
你说的 with, 我以为就是忽略一些错误, 确实不知道可以自动关闭文件.

关于这两个帖子
我为啥在 v2 发, 因为我只是想听听一些个人化的观点, 现在我对这些观点都已经了解了. 是屁话(literally).

我的看法
我当然明白这是一个社区, 会得到各种各样的回复, 那些觉得我的吐槽没有道理没有意思没有水平的, 我觉得完全正常, 本来就是互取所需, 我也是从各种回复中寻找自己感兴趣的.

但没想到此贴得到回复是这样的直接, 我是不是也要进那些我不感兴趣的帖子回复, 这屁事也来发帖?

下一步
还有, 我在另一个人的帖子里说: 十分讨厌抄袭我头像, 对方回复, "哈哈, 来咬我啊". 呵呵, 你们玩, 我撤了.
HGladIator
2017-09-14 13:47:31 +08:00
问题没什么,上一篇没看,就是这个抄袭头像,我笑了
NathanHu
2017-09-14 14:00:00 +08:00
一般对于用着不爽的工具,我都是选择换一个……
NathanHu
2017-09-14 14:01:58 +08:00
@fzinfz 或许是个好问题,但楼主有很明显的引战倾向(看他回复),好无聊……
fy
2017-09-14 16:14:11 +08:00
这也太自我为中心了吧?惹不起惹不起
jatesun
2017-09-14 16:42:12 +08:00
你会 python ?大吃一惊。。。
Biwood
2017-09-14 16:47:04 +08:00
楼主这个头像跟昨天那个楼主很像,最近发的主题也很像,都是语言特性相关,都有引战倾向,可能被误认为同一个人了
另外,如果要提问就老老实实提问,随意吐槽某个语言很容易让人反感,毕竟这里的程序员都有各自的立场...
NaVient
2017-09-14 17:30:18 +08:00
@Biwood 就是同一个人,题目可以好好写为 Python 处理字符编码的问题. 楼主的题目是什么?Python 处理文本都这样麻烦吗?点进来一看这代码,我也是醉了.难道楼主这个不是引战?再看看他前一个帖子...
yucongo
2017-09-15 00:57:00 +08:00
建议用 cchardet, 号称比 chardet 快 30000 倍,但一般快 10 倍、20 倍还是有的
kohos
2017-09-15 14:35:50 +08:00
@sensui7 node 命令行环境打包简单得不得了,下载个 32 位 node.exe ,写个运行的 bat,然后把依赖 node_modules 也打进包里,对方直接可以运行。除非你要弄 GUI 才搞 electron

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

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

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

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

© 2021 V2EX