大佬们好,有一个小小的文件查重删除的问题,
问题描述:
有A B两个文件,A文件是词,大概二百多万个,B文件是很多段文字。
假如A文件中是
苹果
香蕉
梨
西瓜
·······
B文件中是:小明昨天去上学路上捡了个西瓜,阿斯也带上吧的哈不可杀生。
怎样对比两个文本,然后直接删除B文件中重复的这个词,让B文件变成:
小明昨天去上学路上捡了个,阿斯也带上吧的哈不可杀生。
希望各路大神不吝赐教。先行谢过!
小弟初学者什么都不懂呢。
苹果
香蕉
梨
西瓜
小明昨天去上学路上捡了个西瓜,阿斯也带上吧的哈不可杀生。
香蕉是他最喜欢的水果。
梨的水分跟多。
夏天吃西瓜最爽了。
# 读取A文件中的内容
file_a = open('A.txt', 'r', encoding="UTF-8")
list_a = [] # 存放要删除的内容
line = file_a.readline() # 读取每一行
while line:
line = line.replace("\n", "")
list_a.append(line) # 保存每行内容
line = file_a.readline()
file_a.close()
# 读取B文件中的内容
file_b = open('B.txt', 'r', encoding="UTF-8")
list_b = [] # 存放要查重删除的内容
line = file_b.readline() # 读取每一行
while line:
i = 0
for i in range(len(list_a)):
line = line.replace(list_a[i], "") # 删除内容
list_b.append(line) # 保存改后的一行
line = file_b.readline() # 读取下一行
file_b.close()
# 修改后的内容写入B文件
file_b = open('B.txt', 'w', encoding="UTF-8")
i = 0
for i in range(len(list_b)):
file_b.writelines(list_b[i]) # 写入修改后的内容
file_b.close()
小明昨天去上学路上捡了个,阿斯也带上吧的哈不可杀生。
是他最喜欢的水果。
的水分跟多。
夏天吃最爽了。
1、我这里使用txt文件,你需要改成自己所需的文件格式。
2、我用于测试的文件较小,当文件大到一定程度,程序可能出错。
3、注意文件的编码方式,不同的编码方式可能会出错。
总之,此程序只是初步程序,仅做参考。对于你具体的要求还需看书慢慢修改。
//我说下我的思路吧
A文件有二百多万个字,把这二百多万个字均分成若干个文件,例如分成200个文件,然后用多线程来读这些文件,
效率肯定要比单线程读A文件二百多万个字要高很多,然后每个线程去和B 文件查重,最后把这些重复放在Set里面
解题思路:
1 文件A建立索引
1.1 读取文件A统计每行字数,获取词最大长度,最小长度,并按词的字数排序;
1.2 按词的首字、次字…排序;
1.3 保存排序后的文件(可选)。
2 读取文件B的每一行,打开文件C
2.1 按不大于每一行长度的字长,用二分法查找匹配的的单词并删除;
2.2 比较至词最小长度(一般是一个字);
2.3 此行输出到结果文件C。