现要求使用两种以上方法将filie.txt文件中的域名截取出来,统计重复域名出现的次数,然后按次数进行降序排列
时间: 2024-05-13 14:14:06 浏览: 17
好的,我理解了你的要求。以下是两种可能的方法:
方法一:使用正则表达式
可以使用正则表达式来匹配文件中的所有域名,然后使用Python的Counter模块来统计每个域名出现的次数,并按照次数进行排序。
下面是一个示例代码:
```python
import re
from collections import Counter
# 读取文件内容
with open('file.txt', 'r') as f:
content = f.read()
# 使用正则表达式匹配所有域名
pattern = r'https?://([\w.-]+\.[a-zA-Z]{2,})'
matches = re.findall(pattern, content)
# 统计每个域名出现的次数
counter = Counter(matches)
# 按照次数进行降序排列
sorted_domains = sorted(counter.items(), key=lambda x: x[1], reverse=True)
# 输出结果
for domain, count in sorted_domains:
print(f'{domain}: {count}')
```
方法二:使用第三方库tldextract
tldextract是一个Python库,可以方便地从URL中提取域名、子域名和顶级域名。可以使用该库来解析文件中的所有URL,并统计每个域名出现的次数。
下面是一个示例代码:
```python
import tldextract
from collections import Counter
# 读取文件内容
with open('file.txt', 'r') as f:
content = f.read()
# 解析所有URL并提取域名
domains = []
for url in content.split():
ext = tldextract.extract(url)
domain = ext.domain + '.' + ext.suffix
domains.append(domain)
# 统计每个域名出现的次数
counter = Counter(domains)
# 按照次数进行降序排列
sorted_domains = sorted(counter.items(), key=lambda x: x[1], reverse=True)
# 输出结果
for domain, count in sorted_domains:
print(f'{domain}: {count}')
```
以上两种方法都可以达到你的要求。如果有什么问题或需要进一步帮助,请随时提问。