我有一个文本文件,其中包含一些网站列表链接,如
的test.txt:
http://www.site1.com/
http://site232546ee.com/
https://www.site3eiue213.org/
http://site4.biz/
我想创建一个简单的python脚本,它只能提取长度为8个字符的站点名称...没有超过8个字符的名称....输出应该是这样的:
output.txt的:
site1
site2325
site3eiu
site4
我写了一些代码:
txt1 = open("test.txt").read()
txt2 = txt1.split("http://www.")
f = open('output.txt', 'w')
for us in txt2:
f.write(us)
print './done'
但我不知道如何在一行中拆分()多个命令...我也尝试使用import re模块但是不知道如何为它编写代码
有人可以帮我制作这个剧本。 :(
答案 0 :(得分:0)
您可以使用以下正则表达式来实现此目的。
import re
no = 8
regesx = "\\bhttp://www.|\\bhttp://|\\bhttps://www."
text = "http://site232546ee.com/"
match = re.search(regesx, text)
start = match.end(0)
end = start+no
string1 = text[start:end]
end = string1.find('.')
if end > 0:
final = string1[0:end]
else:
final = string1
print(final)
答案 1 :(得分:0)
您说过要提取8个字符的站点名称,但是output.txt示例显示了一些域名。如果您想过滤出八个字符或更少字符的域名,这是一种解决方案。
第1步:获取所有域名。
import tldextract
import pandas as pd
text_s=''
list_u=('http://www.site1.com/','http://site232546ee.com/','https://www.site3eiue213.org/','http://site4.biz/')
#http:\//www.(\w+).*\/?
for l in list_u:
extracted = tldextract.extract(l)
text_s+= extracted.domain + ' '
print (text_s) #gives a string of domain names delimited by whitespace
第2步:过滤少于8个字符的域名。
word= text_s.split()
lent= [len(x) for x in text_s.split()]
word_len_list = pd.DataFrame(
{'words': word,
'char_length': lent,
})
word_len_list[(word_len_list.char_length <= 8)]
输出看起来像这样:
words char_length
0 site1 5
3 site4 5
免责声明:我是Python的新手。请忽略我可能编写的任何不必要和/或愚蠢的步骤
答案 2 :(得分:-1)
在使用它之前,您是否尝试过打印txt2
?您将看到它没有做(我希望)您希望它做什么,因为文本中只有一个"http://www."
可用。尝试在换行符\n
处拆分。这样你就得到了所有网址的清单。
然后,对于每个网址,你会想要剥离正面和背面,你可以使用正则表达式,但这可能会很难,这取决于你想要剥离的东西。请参阅here。
当您找到适合您的正则表达式时,只需检查域的长度,并使用if语句将这些域写入满足条件的文件(if len(domain) <= 8: f.write(domain)
)