用于从文本文件中提取数据的Python脚本

时间:2014-09-16 10:04:11

标签: python-2.7

我有一个文本文件,其中包含一些网站列表链接,如

的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模块但是不知道如何为它编写代码

有人可以帮我制作这个剧本。 :(

3 个答案:

答案 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)