我有一个文本文件,其中包含我需要制作快捷方式的网址。该文件包含我不需要的其他信息。 例如: 事件编号 - 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是一个更好的工具。会是这样的吗? 我是编程的新手,并对此表示感谢。
答案 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)