文章目录
- 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')