我需要处理一些不同且未知编码的文件, 下面代码先用二进制打开检测编码, 然后再二次打开, 大家是怎么弄的? 以前用 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()
1
knightdf 2017-09-14 00:23:01 +08:00
第一次读到的内容直接编码下不就行了?为啥要读第二次?
|
2
a87150 2017-09-14 00:23:36 +08:00 via Android 21
你怎么什么屁事都要发个贴
|
3
minami 2017-09-14 00:33:45 +08:00
你写程序是不是从来不看别人怎么写的?
|
4
sensui7 OP @knightdf 我需要处理字符串, 但是直接打开不知道编码, 会报错.
我只能先用二进制打开检测编码, 然后再用那个编码打开, 这就是麻烦的地方 |
5
minami 2017-09-14 00:38:33 +08:00
|
6
jiang42 2017-09-14 00:55:47 +08:00 via iPhone
你是不是从来不用搜索引擎的?
真心推荐你好好看一看 How To Ask Questions The Smart Way 特别是 Section Before You Ask |
7
Pastsong 2017-09-14 01:02:02 +08:00
对不起,先 Block 了
|
8
sensui7 OP 不用回答了, 我全部 block 了, 惹不起, 惹不起, 反正以后也不会发帖了. 随便吧. 反正有 SO 就够了.
|
9
sensui7 OP @a87150 Yeah, 屁事, 屁话 到处都是, 诸如申请信用卡会打电话核实吗之类的, 你的回帖在我眼里也是屁话, 下面全部都是屁话, 你不想看到我, 你可以把我 block, 但是你们不用了, 我把你们 block 了, 一次性且永久的.
|
10
huntzhan 2017-09-14 01:37:41 +08:00
OP 快去写一个封装 chardet 的 package 去打楼上的脸(笑)
|
12
fzinfz 2017-09-14 07:09:27 +08:00 via iPad
只有我觉得 lz 问的是个好问题吗
lz 需要的应该是 try: 无脑用 utf-8 打开文件 except: pass |
13
xiaket 2017-09-14 07:19:19 +08:00 4
with 打开文件后不需要 close 了. 你以为你懂了 python.
|
14
whwq2012 2017-09-14 07:28:08 +08:00
python 的使用逻辑是如果遇到难处理的需求就直接找库,所以你不应该抱怨 python 语法麻烦。
|
15
misaka20038numbe 2017-09-14 08:19:56 +08:00 4
题主肯定不熟悉这个社区。从我呆这么久的情况来看,这个社区并不是一个以解决问题为主的社区,这里的人大部分都是在打发自己无聊的时间而已,所以得到这样的回复完全没有必要在意。
至于那些 block 之后还要说出来的,可能是认为 block 对对方影响很大,对方很在意自己被 block 吧。 |
16
mimzy 2017-09-14 08:34:25 +08:00 2
5 楼和 10 楼已经解答了你的问题 https://github.com/chardet/chardet
如果你的意思是希望 open() 的时候不报错,可以添加 errors='ignore' 参数。https://docs.python.org/3/library/functions.html#open @misaka20038numbe #15 从我呆这么久的情况来看,得到什么样的回复取决于提问题的方式。吐槽难以得到答案也无法解决问题。 |
17
introom 2017-09-14 08:38:09 +08:00 via Android
问题是谁都可以回帖,不过除了极少数厉害的,其他都太弱了人,然而他们以及又不知道。
|
18
XFLx2 2017-09-14 08:40:42 +08:00 1
即使题主提问题的方式不对,我也很讨厌像 2L 那样的回复。为了喷人而回复,从来不对自己的恶意负责。
|
19
bbsteel 2017-09-14 08:49:56 +08:00 via Android 1
lz 直接用 js 不好吗?
|
20
minami 2017-09-14 09:02:40 +08:00
呵呵,估计我也被 lz block 了,惹不起惹不起
|
21
jtsai 2017-09-14 09:24:00 +08:00
请问个问题也能引来这么多恶意。目瞪狗呆😳,楼主不哭,俺挺你。
|
22
arzterk 2017-09-14 09:33:09 +08:00
哈哈哈,心疼楼主;以后直接搜索了再来发帖免得被喷
|
24
CryMeatel 2017-09-14 10:26:46 +08:00
…… LZ 完全是闲的无聊,用复杂于语言常规写法几倍的方式写出个问题,然后来吐槽下……
百度先把,别折腾自己了…… |
25
CryMeatel 2017-09-14 10:28:23 +08:00 1
这样回复比较正式:
完全不用这么麻烦,建议先百度学习下基础。 |
29
weakish 2017-09-14 11:15:14 +08:00
|
30
Wicked 2017-09-14 12:34:35 +08:00 via iPhone
我也想吐槽,python 处理字符串已经是神一般的容易了,你用 C++试试…
对于楼主的问题,最简单的方法就是逐个编码 try catch,直到一种能成功 |
31
sensui7 OP 关于 python
这两天的 python 的经历是这样的, 我之前用 node 写了一个处理字幕脚本, 要发给别人, node 依赖环境对于别人来说过于麻烦, 也许不麻烦, 但是我的习惯是让对方下载回来双击就能运行, 他不需要知道任何其他东西. 考虑过 electron, 我实在是嫌弃太大, 脚本一共没几行, 干嘛打包进去那么大的一个环境. 所以我就用了 python, 在网上看了一些语法, 就写了, 之前有人问我看的什么教材, 我压根就没看教材, 就是语法罗列. 关于楼上 你说的 with, 我以为就是忽略一些错误, 确实不知道可以自动关闭文件. 关于这两个帖子 我为啥在 v2 发, 因为我只是想听听一些个人化的观点, 现在我对这些观点都已经了解了. 是屁话(literally). 我的看法 我当然明白这是一个社区, 会得到各种各样的回复, 那些觉得我的吐槽没有道理没有意思没有水平的, 我觉得完全正常, 本来就是互取所需, 我也是从各种回复中寻找自己感兴趣的. 但没想到此贴得到回复是这样的直接, 我是不是也要进那些我不感兴趣的帖子回复, 这屁事也来发帖? 下一步 还有, 我在另一个人的帖子里说: 十分讨厌抄袭我头像, 对方回复, "哈哈, 来咬我啊". 呵呵, 你们玩, 我撤了. |
32
HGladIator 2017-09-14 13:47:31 +08:00 via iPhone
问题没什么,上一篇没看,就是这个抄袭头像,我笑了
|
33
NathanHu 2017-09-14 14:00:00 +08:00
一般对于用着不爽的工具,我都是选择换一个……
|
35
fy 2017-09-14 16:14:11 +08:00
这也太自我为中心了吧?惹不起惹不起
|
36
jatesun 2017-09-14 16:42:12 +08:00
你会 python ?大吃一惊。。。
|
37
Biwood 2017-09-14 16:47:04 +08:00
楼主这个头像跟昨天那个楼主很像,最近发的主题也很像,都是语言特性相关,都有引战倾向,可能被误认为同一个人了
另外,如果要提问就老老实实提问,随意吐槽某个语言很容易让人反感,毕竟这里的程序员都有各自的立场... |
38
NaVient 2017-09-14 17:30:18 +08:00
@Biwood 就是同一个人,题目可以好好写为 Python 处理字符编码的问题. 楼主的题目是什么?Python 处理文本都这样麻烦吗?点进来一看这代码,我也是醉了.难道楼主这个不是引战?再看看他前一个帖子...
|
39
yucongo 2017-09-15 00:57:00 +08:00
建议用 cchardet, 号称比 chardet 快 30000 倍,但一般快 10 倍、20 倍还是有的
|
40
kohos 2017-09-15 14:35:50 +08:00
@sensui7 node 命令行环境打包简单得不得了,下载个 32 位 node.exe ,写个运行的 bat,然后把依赖 node_modules 也打进包里,对方直接可以运行。除非你要弄 GUI 才搞 electron
|
41
weakish 2017-09-17 11:10:14 +08:00
@sensui7 打包 python 的话,Pyinstaller 和 py2exe 很方便。另外,其实写这些工具类的东西,Go 也蛮合适的(可以跨平台编译,最后的可执行文件里静态链接了库)。
with 的话,你猜得不够准。接触新语言,有时候靠猜比看文档要快,但你得猜准。猜不准的话效率就低了。不过猜的能力也是要练的。培养了猜的能力,是有助于下一个概念或者下一门语言的学习的。长远来看未必亏。 我这里提供一点猜 with 的思路:绝大部分情况下总是要关闭一个文件的,多打一行字倒还不算什么,关键是怕忘记关掉了,所以讲道理,类似 with 这样的东西设计的时候,不太可能不考虑这个常见的痛点的。 不过我有点事后诸葛亮。我当初学 with 不是靠猜的,而是靠看文档。但是呢,我后来学另外一些语言,看到类似 with 的结构,就能很快领会这个设计的用意。 |
42
weakish 2017-09-17 11:31:33 +08:00
@sensui7 另外,网上一些直接的回复,你不要太在意。
其实很多人是被《提问的智慧》一类的文章洗脑了。 《提问的智慧》主要讲如何提出一个好问题,讲得很好,但是它忽略了一个重要的问题: 人与人之间的交流,有的时候还是要讲一点礼貌的,特别是陌生人之间。网上打 RTFM 很容易, 但现实中你如果对一个不太熟悉的人说 Read the fucking manual, 如果你只是在玩梗那还好,如果你真的是这样想的,那其实是不怎么礼貌的。这会形成一种抑制交流的氛围,对协作(不仅是部门讲协作,网络的讨论其实也是一种协作)是不利的。 想象一下,你刚升级某个软件,同事随口问一句「这个版本有什么新功能?」,你回答「你他妈不会自己去看发布日志吗?」如果一个团队里都是这样交流的话,你觉得这个团队的氛围好吗? 而且,《提问的智慧》是有前提的,就是说开发者已经为开发自由软件花了大量时间了,你一个用户如果读手册能解决问题,那最好还是不要去挤占开发者的时间。 但是用户相互之间,还是少用 RTFM 为妙。别人问了一个初级问题,你没时间完全可以不回答,有时间可以回答,或者简短地说「我记得手册的 XXX section 里有写」、「 google YYY 」没有必要特意回答一句「你他妈不会 google 吗?」 |
44
fiht 2017-09-19 21:34:32 +08:00
大家辛苦一天了
想来论坛吹吹牛逼 然后看到楼主这么脏 /乱 /差(初级)的代码 还把锅甩给蟒蛇 就很生气 ------------- 发现一个人 用着和我们一样的小轿车 却要推着走 一边推还要 这小轿车开起来真麻烦 |