用python清洗文本文件

txt清洗

有一些txt文件被网站插入了一些网址信息,严重影响阅读体验。所以希望通过python对这些文本文件进行清洗。

1 字符串操作

对此,首先需要熟悉一些python基本的字符串操作。

在python中,字符串用引号('或")来表示,并可通过类似数组的方式进行索引,对此我们先创建一个字符串

>>> test = "txt文件csdn.com清csd.com洗csdn.com"
>>> test[:2]
'tx'
>>>

我们要做的就是删除字符串中所有的"csdn.com"。

python中提供了字符串替代函数replace,即只需将"csdn.com"替换为空字符串即可。

>>> test.replace("csdn.com","")
'txt文件清洗'

当然,有的时候我们并不知道txt中都插入了什么网站的信息,所以可以使用正则表达式来删除所有的网址信息。

python的正则表达式re模块提供了sub方法可以实现这一功能

>>> import re
>>> test = "txt文件csdn.com清csd.com洗csdn.com"
>>> new = re.sub(r'[a-zA-Z0-9]+.com','',test)
>>> new
'txt文件清洗'

上述正则表达式中,[]表示出现在[]中的某个元素,[a-zA-Z0-9]表示从a到z,从A到Z,从0到9的所有字符,即大小写字母以及数字。+表示出现大于一次的任意次数。总的来说,就是当.com之前出现任意字母和数字时,将这些字母数字连同.com一起删除。

2 txt的创建和读取

在pyhton中,文件读取操作通过open来实现。

>>> test = "txt文件csdn.com清csd.com洗csdn.com"
## 创建txt文件
>>> fName = "test.txt" #此为文件名
>>> file = open(fName,"w")
>>> file.write(test)#写入文件内容
30
>>> file.close() ##自此便建立了

## 读取txt文件
>>> file = open(fName,'r')
>>> txt = file.read()
>>> txt
'txt文件csdn.com清csd.com洗csdn.com'

函数open的输入参数,除了有文件名之外,还有模式。当模式为'r'时,表示我们对文件内容进行读取;当模式为'w'时,表示写入文件。

此外,还有下列不同的模式。

  • 标记说明
flagmode备注
r只读模式
w只写模式可创建,会覆盖
a追加模式只写,且从尾部开始
r+读写模式可读可写不可创建
w+读写模式可读可写可创建
a+读写模式可读可写可创建,从尾部写
rb二进制读模式
wb二进制写模式
ab二进制追加模式
rb+二进制读写模式
wb+二进制读写模式
ab+二进制读写模式

试一下追加模式

>>> fName = "test.txt"
>>> test = "txt文件csdn.com清csd.com洗csdn.com"
>>> file = open(fName,'a')
>>> file.write('\n'+test)   #'\n'为换行
31
>>> file.close()

此时打开test.txt,发现文件中的内容变为

txt文件csdn.com清csd.com洗csdn.com

txt文件csdn.com清csd.com洗csdn.com

file.read()会将文件中的所有字符同时读取出来,如果我们希望只读取一行,可以通过readline()函数。

>>> fName = "test.txt"
>>> file = open(fName,'r')
>>> txt = file.readline()
>>> txt
'txt文件csdn.com清csd.com洗csdn.com'

3 文件读取以及实现

在python中,导入os模块,通过listdir遍历目录下所有文件,其输入参数为将要遍历的目录,如果为空,则表示当前目录。

>>> import os
>>> dirs = os.listdir()
>>> dirs
['01亚马孙探险.txt', '02南海奇遇.txt', '03海底寻宝.txt', '04勇探火山口.txt', '05恶战杀人鲸.txt', '06非洲历险.txt', '07巧捕白象.txt', '08猎场剿匪.txt', '09追踪食人狮.txt', '10智擒大猩猩.txt', '11神秘海底城.txt', '12闯入食人国.txt', '13智斗猛兽.txt', '14北极探险.txt']

读取之后,发现我们此前的判断失误了,

>>> file = open(dirs[0],'r')
>>> txt = file.readline()
>>> txt
'本书由阿巴达TxT下载网(www.abada.cn)发书人 once918 搜集整理上传\n'

这种冗余信息完全不是一个正则表达式可以实现的,所以还是用老旧的方法吧,考虑到这种信息不一定出现在单独一行,所以我们删除的信息不包含换行符。

>>> for fName in dirs:
...     file = open(fName,'r')  #读取文件
...     test = file.read().replace(txt[:-1],'')
...     file = open(fName,'w')
...     file.write(test)
...     file.close()

然后,文件夹下所有的txt就完成了清洗。

  • 封装成函数
import re

def txtPure(dList,folder=0):
    dirs = os.listdir() if not folder else os.listdir(folder)
    for fName in dirs:
        file = open(fName,'r')
        test = file.read()
        for txt in dList:
            test = test.replace(txt,'')
        file = open(fName,'w')
  • 3
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

微小冷

请我喝杯咖啡

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值