昨天在帮同学解析一批从网络上爬取的文件时,遇到一个奇葩的问题,文件本身的编码是gbk,Eclipse编辑环境的默认编码是utf8,使用常规的open方法批量打开文件时,某些文件里存在一些不可被gbk识别的特殊字符导致读取错误,而这些特殊字符又是存在于utf8编码中的。经不断尝试,发现一个非常好的解决的方法:使用Python自带的codecs。codecs就是为编码转码而生的,关于此功能的很多其它详情请移步 https://docs.python.org/3.2/library/codecs.html

# -*- coding: utf8 -*-
#下面代码要实现的效果是将gbk编码的文件批量转存为utf8编码的文件
import os;
import codecs;
from bs4 import BeautifulSoup; #以gb18030编码读文件的函数
def ReadFile(filePath,encoding="gb18030"): #注意这里的编码格式
with codecs.open(filePath,"r",encoding) as f:
return f.read() #以utf8编码又一次写文件的函数
def WriteFile(filePath,u,encoding="utf-8"):
with codecs.open(filePath,"w",encoding) as f:
f.write(u) fileList=os.listdir("E:/content/"); #获取原文件列表
for eachFile in fileList: #遍历文件名称
temp=ReadFile("E:/content/"+eachFile); #读文件
WriteFile('E:/content_0629/'+eachFile, temp, "utf8"); #将读取的内容转存为utf8编码的文件
print('finished.')

另外,文件完毕转存之后。在使用BeautifulSoup进行解析时,想过滤掉一些噪声信息,完整代码例如以下:

# -*- coding: utf8 -*-
import os;
from bs4 import BeautifulSoup;
n=0; fileList=os.listdir("E:/content_0629");
for eachFile in fileList:
n=n+1; #设置文件序号 rawText= open(r"E:/content_0629/"+eachFile,'r',encoding='utf8');#读文件
bs4Text=BeautifulSoup(rawText);#调用BeautifulSoup进行解析 title=bs4Text.find('h2'); #h2标签中放的是文章正文标题
if(title==None): #推断标题标签是否存在。假设不存在则忽略当前文件
continue;
else:
title=title.get_text(); #获取标题内容文本
title=title.replace(" ","");#替换掉当中的全角空格
title=title.replace(" ","");#替换掉当中的半角空格 mainContent=bs4Text.find('div',{'class':'content'}); #依据标签名和标签属性值获取正文内容标签
if(mainContent==None):#推断此标签是否存在。假设不存在则忽略当前文件
continue;
else:
mainContent=mainContent.get_text();
mainContent=mainContent.replace(" ","");
mainContent=mainContent.replace(" ","");
mainContent=mainContent.replace("\t","");
mainContent='\n'.join(mainContent.split()) #将多个连续的空行替换为一个空行 #将解析后的文本保存到文件里。仍以utf8编码
fwriter=open('E:/result_0629/resutl_'+str(n)+".txt",'w',encoding='utf8');
fwriter.write(title+"\n"+mainContent);
fwriter.close(); print('finished.')

Python中可避免读写乱码的一个强慷慨法的更多相关文章

  1. 【python系统学习17】python中的文件读写

    python中的文件读写 文件读写,是Python代码调用电脑文件的主要功能,能被用于读取和写入文本.音频片段.Excel文档.邮件以及任何保存在电脑上的东西. 可使用python批量的操作本地文件, ...

  2. python中的文件读写(open()函数、with open('file_directory','r') as f:、read()函数等)

    python中也有文件读写,通过调用内置的读写函数.可以完成文件的打开/关闭.读.写入.追加等功能. open()函数 open()函数为python中的打开文件函数,使用方式为: f = open( ...

  3. python中操作excel数据 封装成一个类

    本文用python中openpyxl库,封装成excel数据的读写方法 from openpyxl import load_workbook from openpyxl.worksheet.works ...

  4. 『无为则无心』Python基础 — 41、Python中文件的读写操作(一)

    目录 1.文件操作步骤 2.文件的读写操作 (1)文件的打开 (2)打开文件模式 (3)获取一个文件对象 (4)关于文件路径 1.文件操作步骤 当我们要读取或者写入文件时,我们需要打开文件,在操作完毕 ...

  5. python中如何不区分大小写的判断一个元素是否在一个列表中

    python中判断某一个元素是否在一个列表中,可以使用关键字in 和 not in. 示例如下: 如果需要输出相应的信息,可以搭配使用if语句,这里不赘述. --------------------- ...

  6. python中如果函数后面有多于一个括号是怎么回事?

    一般而言,调用一个函数是加一个括号.如果看见括号后还有一个括号,说明第一个函数返回了一个函数,如果后面还有括号,说明前面那个也返回了一个函数.以此类推. 比如fun()() def fun(): pr ...

  7. Python中subprocess 模块 创建并运行一个进程

     python的subprocess模块,看到官方声明里说要尽力避免使用shell=True这个参数,于是测试了一下: from subprocess import call import shlex ...

  8. Python中文件的读写操作的几种方法

    对文件的操作,步骤为:打开一个文件-->读取/写入内容-->保存文件 文件读写的3中模式 # 1.w 写模式,它是不能读的,如果用w模式打开一个已经存在的文件,会清空以前的文件内容,重新写 ...

  9. Python中文件的读写操作

    文件操作基本流程: 1. 介绍 计算机系统是由计算机硬件,操作系统,和应用程序三部分组成. 内存 存放不持久 硬盘 可以使数据持久化 文件操作  数据持久化的一种 全栈开发  框架类 2. 文件的操作 ...

随机推荐

  1. React开发实时聊天招聘工具 -第二章

    2-1 介绍React开发环境 npm install -g create-react-app xxx npm run eject   来配置webpack 2-2 ES6常用语法 其他 还有一些特性 ...

  2. 关于Echarts表格插件的使用

    <template> <div :style="{height:height,width:width}"></div> </templat ...

  3. 实现人脸识别性别之路---opencv

    import cv2from make_imge import get_file_namefrom train_ph import Modelimport os IMAGE_SIZE = 128if ...

  4. SPI总线工作模式

    一.SPI总线工作模式 SPI总线有四种工作模式,是由时钟极性选择(CPOL)和时钟相位选择(CPHA)决定的. CPOL = 0 ,SPI总线空闲为低电平,CPOL = 1, SPI总线空闲为高电平 ...

  5. type---显示指定命令的类型

    type命令用来显示指定命令的类型,判断给出的指令是内部指令还是外部指令. 命令类型: alias:别名. keyword:关键字,Shell保留字. function:函数,Shell函数. bui ...

  6. HDU 5063 Operation the Sequence(暴力 数学)

    题目链接:pid=5063" target="_blank">http://acm.hdu.edu.cn/showproblem.php?pid=5063 Prob ...

  7. 在Google Drive上建立免费静态站点

    现今建立一个属于自己的站点已经是一件非常普遍和简单的事情了. 你能够选择买空间,买域名.你也能够使用免费空间.免费域名.你能够选择动态的php wordpress,joomla或者是静态的站点(如使用 ...

  8. Harry Potter and the Goblet of Fire

    书名:Harry Potter and the Goblet of Fire  作者:J.K. Rowling 篇幅: 752页 蓝思值:880L 用时:    17天 工具:  有道词典 [透析成果 ...

  9. transfer learning(matlab 实现)

    一句话总结 transfer learning 的核心即是对一个已训练模型微调,使其适应新的应用,如下图示: 为 matlab 接口所训练完成的经典深度神经网络下载地址:Index of /matco ...

  10. 22. Node.Js Buffer类(缓冲区)-(二)

    转自:https://blog.csdn.net/u011127019/article/details/52512242