Python - 从文本文件中删除单词或匹配的字符串

时间:2017-06-08 17:34:04

标签: python

我正在尝试从文本文件中删除一个单词,并找到一个似乎正在运行的代码。

但是,它与确切的单词不匹配,而是删除所有匹配的字母。

fin = open("input.txt")
fout = open("output.txt", "w+")
delete_list = input('delete : ')
for line in fin:
    for word in delete_list:
        line = line.replace(word, '')
    fout.write(line)
fin.close()
fout.close()
print ('done')

input.txt中

http://www.google.co.ma
google.com.mm
https://google.mn
www.google.com.mt

尝试删除http://(仅)的结果如下 -

output.txt的

www.google.co.ma
google.com.mm
sgoogle.mn
www.google.com.m

2 个答案:

答案 0 :(得分:1)

让我们来看看这里发生了什么:

  1. 您调用input,它返回一个字符串“http://”。您可以将其分配给变量delete_list
  2. 使用delete_list循环遍历for。但请注意:delete_list是一个字符串,而不是列表。当您使用for循环遍历字符串时,它会循环遍历字符串的字母
  3. 您将浏览每个字母并将其从该行中删除。
  4. 你可以做三件事来解决这个问题:

    1. 更改delete_list的作业以分配到单个元素列表:delete_list = [input("word to delete: ")]

    2. 重命名delete_list以更准确地反映其真实价值,例如word_to_delete,然后不使用for循环 - 直接执行line.replace(word_to_delete, '')

    3. 使用循环从用户那里获取单词的列表

    4. 希望能够解决问题!

答案 1 :(得分:1)

我刚刚开始编码,所以不知道这个解决方案有多难看,但是重新模块看起来很好。

from re import sub
with open('test.txt') as f:
    file = f.read().split('\n')
for i in range(len(file)):
    file[i] = sub(r'http[s]?://', '', file[i])
#print(file)
with open('test1.txt', 'w') as f1:
    f1.writelines(["%s\n" % item  for item in file])

或者如果您不想使用重新模块,则可以使用 if 语句

with open('test.txt') as f:
    file = f.read().split('\n')
for i in range(len(file)):
    if file[i].startswith('https://'):
        link = file[i]
        file[i] = link[8:]
    elif file[i].startswith('http://'):
        link = file[i]
        file[i] = link[7:]
#print(file)
with open('test1.txt', 'w') as f1:
    f1.writelines(["%s\n" % item  for item in file])