昨天在帮同学解析一批从网络上爬取的文件时,遇到一个奇葩的问题,文件本身的编码是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基础用法二(组件渲染)

    react基础用法二(组件渲染) 如图所示组件可以是函数 格式:function 方法名(){ return <标签>内容</标签>} 渲染格式: <方法名 />  ...

  2. 关于idea开发工具常用的快捷键

    自动补全缺失的import    alt+enter 自动优化import ctrl+alt+o 自动补全返回代码:IDEA的ctrl+alt+v ,eclipse的CTRL+F1 main    p ...

  3. CSUOJ 1637 Yet Satisfiability Again!

    1637: Yet Satisfiability Again! Time Limit: 5 Sec  Memory Limit: 128 MB Description Alice recently s ...

  4. CSUOJ 1603 Scheduling the final examination

    1603: Scheduling the final examination Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 49  Solved: 1 ...

  5. IntelliJ IDEA 详细图解最常用的配置 ,适合刚刚用的新人。(转)

    IntelliJ IDEA使用教程 (总目录篇) 刚刚使用IntelliJ IDEA 编辑器的时候,会有很多设置,会方便以后的开发,磨刀不误砍柴工. 比如:设置文件字体大小,代码自动完成提示,版本管理 ...

  6. vue.js 第一课:实例化vue

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  7. OpenCASCADE7.3.0 is available for download

    OpenCASCADE7.3.0 is available for download OPEN CASCADE is pleased to announce a new public release ...

  8. js中常用的对象—String的属性和方法

    今天说一下,js中常用的内置对象——String对象它有以下几个常用的属性:lengthprototype 有以下几个常用的方法:parseInt()转换为数字parseFloat()转换为数字,支持 ...

  9. 闲的无聊写了个很(wu)有(liao)意(dao)思(bao)的程序

    下午机房断网了 闲的无聊,写了个小游戏 忘了sleep在哪个库里了.. 自带变色效果哦 #include<iostream> #include<cstdio> #include ...

  10. asp.net core系列 39 Razor 介绍与详细示例

    原文:asp.net core系列 39 Razor 介绍与详细示例 一. Razor介绍 在使用ASP.NET Core Web开发时, ASP.NET Core MVC 提供了一个新特性Razor ...