|
感谢您。按照您给的正则昨天写出来大概,今天又在调bug。终于把数据获取的工作完成了。
#coding:utf-8
import re
# 目的txt,以gbk编码
f=open('D:\\1.txt', 'r')
# 实际使用txt,以utf-8编码
f2=open('D:\\2.txt', 'w')
# 实际使用txt,以utf-8编码
# 在这里要注意decode方式,我试了GBK GB2312 GB18030,发现GB18030的范围最大,有些字符集
# GBK GB2312无法解析,但是GB18030能解析
f2.write(f.read().decode('GB18030').encode('utf-8'))
# 最后生成书名号《》里的txt
f3=open('D:\\3.txt', 'w')
for line in open('D:\\2.txt') :
list = re.findall('《(.*?)》',line)
for i in list:
f3.write(i)
f3.write("\n")
f3.close()
其中碰到的最大的坑还是字符集转换问题,比如我下载的中国小说史略.txt,之前按行循环有些行无法输出,发现是编码方式不对。win默认文本文档编码的是GB2312,但是txt文档每一行可能会有有奇奇怪怪的编码方式(通过chardet package发现的这个问题,因为这个问题找了一上午),试了三种编码,最后还是GB18030所包含范围最广。
衷心感谢!@whydo1
不过现在还有一个很古怪的问题,就是每一个txt文档在执行循环的时候,最后面几行无法被获取到。
比如说1000行的txt,可能只会循环检测操作的前面980行。谁知道为什么么?
测试代码如下:
#coding:utf-8
import re
f=open('D:\\1.txt', 'r')
f2=open('D:\\2.txt', 'w')
f2.write(f.read().decode('GB18030').encode('utf-8'))
f3=open('D:\\3.txt', 'w')
for line in open('D:\\2.txt') :
print(line)
其中,用的python版本是2.7。 谁能帮忙瞅瞅嘛? |
|