从文本文件中删除文本

时间:2015-05-18 22:40:24

标签: python sed

我有一个文本文件,其中包含我需要制作快捷方式的网址。该文件包含我不需要的其他信息。 例如: 事件编号 - xyz

More text here
And here

ALL https://.....

Atendees URLs 

1 -tab- https://.....
2 -tab- https://...
etc.

现在我删除多余的文本和空行,并保留仅包含URL的行(加上\ n \ t)。然后我在python中使用此代码将URL放入列表中。

def fileOpen(self):

        self.skytap = []
        with open(self.file_1, 'r') as f:   
            for line in f:
                self.skytap.append(line.strip('\t\r\n'))

我想知道在Python中是否有一种方法可以删除所有文本,编号等,并保持https:// ........ URL仅按照它们在文件中的顺序和当然把它们放在列表中,这样我就可以制作快捷方式了(我已经完成了快捷方式的制作) 我在网上看过一些问题,有些人认为sed是一个更好的工具。会是这样的吗? 我是编程的新手,并对此表示感谢。

3 个答案:

答案 0 :(得分:1)

您使用sed对此进行了标记,但您要查找的工具是grep

grep -o 'https\?://[^ ]\+' file.txt

它提取序列http加上后续的非空格字符。

答案 1 :(得分:1)

您可以使用fileinput.input找到包含https:// re行的文件来更改文件:

import  fileinput
import  re

r = re.compile(r"https://.*")
urls = []
for line in fileinput.input("match.txt",inplace=True):
     s = r.search(line)
     if s:
        print(line,end="")
        urls.append(s.group())

如果您使用的是python 2,请在代码顶部添加from __future__ import print_function

如果要在文件中的https之前删除子字符串,请将print(line,end="")替换为print(s.group(),end="")

或者正如@Jon所指出的那样,导入sys并使用sys.stdout.write

import  fileinput
import  re
import sys

r = re.compile(r"https://.*")
urls = []
for line in fileinput.input("match.txt",inplace=True):
     s = r.search(line)
     if s:
        sys.stdout.write(line)
        urls.append(s.group())

答案 2 :(得分:0)

也许我可以帮到你:你如何搜索这个正则表达式:https?://[A-Za-z0-9-._~:/?#[\]@!$&\',*+,;=]* 它会搜索所有有效的URL字符

事实上,这是一个应该完成工作的程序(未经测试):

import re

string="""
More text here
And here

ALL https://.....

Atendees URLs 

1 -tab- https://.....
2 -tab- https://...
etc.
"""

links = re.compile(r'https?://[A-Za-z0-9-._~:/?#[\]@!$&\',*+,;=]*').findall(string)