请问 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()
5748 次点击
所在节点    Python
44 条回复
knightdf
2017-09-14 00:23:01 +08:00
第一次读到的内容直接编码下不就行了?为啥要读第二次?
a87150
2017-09-14 00:23:36 +08:00
你怎么什么屁事都要发个贴
minami
2017-09-14 00:33:45 +08:00
你写程序是不是从来不看别人怎么写的?
sensui7
2017-09-14 00:35:10 +08:00
@knightdf 我需要处理字符串, 但是直接打开不知道编码, 会报错.
我只能先用二进制打开检测编码, 然后再用那个编码打开, 这就是麻烦的地方
minami
2017-09-14 00:38:33 +08:00
jiang42
2017-09-14 00:55:47 +08:00
你是不是从来不用搜索引擎的?

真心推荐你好好看一看 How To Ask Questions The Smart Way

特别是 Section Before You Ask
Pastsong
2017-09-14 01:02:02 +08:00
对不起,先 Block 了
sensui7
2017-09-14 01:07:34 +08:00
不用回答了, 我全部 block 了, 惹不起, 惹不起, 反正以后也不会发帖了. 随便吧. 反正有 SO 就够了.
sensui7
2017-09-14 01:28:32 +08:00
@a87150 Yeah, 屁事, 屁话 到处都是, 诸如申请信用卡会打电话核实吗之类的, 你的回帖在我眼里也是屁话, 下面全部都是屁话, 你不想看到我, 你可以把我 block, 但是你们不用了, 我把你们 block 了, 一次性且永久的.
huntzhan
2017-09-14 01:37:41 +08:00
OP 快去写一个封装 chardet 的 package 去打楼上的脸(笑)
ltux
2017-09-14 02:59:25 +08:00
@sensui7 程序就是用来干这个事儿的,你说麻烦?????
fzinfz
2017-09-14 07:09:27 +08:00
只有我觉得 lz 问的是个好问题吗
lz 需要的应该是

try:
无脑用 utf-8 打开文件
except:
pass
xiaket
2017-09-14 07:19:19 +08:00
with 打开文件后不需要 close 了. 你以为你懂了 python.
whwq2012
2017-09-14 07:28:08 +08:00
python 的使用逻辑是如果遇到难处理的需求就直接找库,所以你不应该抱怨 python 语法麻烦。
misaka20038numbe
2017-09-14 08:19:56 +08:00
题主肯定不熟悉这个社区。从我呆这么久的情况来看,这个社区并不是一个以解决问题为主的社区,这里的人大部分都是在打发自己无聊的时间而已,所以得到这样的回复完全没有必要在意。
至于那些 block 之后还要说出来的,可能是认为 block 对对方影响很大,对方很在意自己被 block 吧。
mimzy
2017-09-14 08:34:25 +08:00
5 楼和 10 楼已经解答了你的问题 https://github.com/chardet/chardet

如果你的意思是希望 open() 的时候不报错,可以添加 errors='ignore' 参数。https://docs.python.org/3/library/functions.html#open

@misaka20038numbe #15 从我呆这么久的情况来看,得到什么样的回复取决于提问题的方式。吐槽难以得到答案也无法解决问题。
introom
2017-09-14 08:38:09 +08:00
问题是谁都可以回帖,不过除了极少数厉害的,其他都太弱了人,然而他们以及又不知道。
XFLx2
2017-09-14 08:40:42 +08:00
即使题主提问题的方式不对,我也很讨厌像 2L 那样的回复。为了喷人而回复,从来不对自己的恶意负责。
bbsteel
2017-09-14 08:49:56 +08:00
lz 直接用 js 不好吗?
minami
2017-09-14 09:02:40 +08:00
呵呵,估计我也被 lz block 了,惹不起惹不起

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

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

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

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

© 2021 V2EX