文章目录

  • txt清洗
  • 1 字符串操作
  • 2 txt的创建和读取
  • 3 文件读取以及实现


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'时,表示写入文件。

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

  • 标记说明

flag

mode

备注

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')