编写程序对URL列表进行计数与排序

版权申诉
0 下载量 180 浏览量 更新于2024-10-26 收藏 1KB RAR 举报
资源摘要信息:"URL处理程序设计" 在处理URL集合的程序设计任务中,主要涉及到的IT知识点包括但不限于以下几个方面: 1. 数据结构:在对URL进行计数和排序时,需要一个合适的数据结构来存储URL和对应的出现次数。常见的数据结构包括数组、链表、树、哈希表等。在本案例中,哈希表是一个理想的选择,因为它能够有效地支持快速查找和插入操作。 2. 程序设计语言:根据给定的文件名称(URL.CPP),可以推断出使用的编程语言很可能是C++。C++是一种高效、灵活的编程语言,尤其适合处理需要高性能算法的场景。 3. 算法:对于URL计数的需求,需要实现一个算法来遍历所有的URL,并使用数据结构(例如哈希表)记录每个URL的出现次数。排序算法则被用于将记录按照出现次数进行排序。常见的排序算法包括快速排序、归并排序、堆排序等。 4. 哈希表:哈希表是一种使用哈希函数组织数据,以加快数据插入和检索速度的数据结构。哈希表的平均查找时间复杂度接近O(1),这对于统计大量URL的出现次数非常有帮助。实现哈希表时,需要考虑哈希函数的设计、解决哈希冲突的策略(例如链地址法、开放寻址法等)。 5. 字符串处理:URL是字符串的一种,因此字符串处理也是一个必要的知识点。需要熟悉如何在编程语言中处理字符串,包括字符串的比较、复制、连接等操作。 6. 文件I/O:程序需要从文件quiz_url.list中读取URL数据,这就涉及到文件输入输出(I/O)操作。在C++中,这通常涉及到fstream或ifstream、ofstream类的使用。 7. 标准模板库(STL):如果在C++程序中实现,可以利用STL中的容器和算法来简化开发过程。例如,使用map(通常实现为红黑树)来存储URL和出现次数,然后使用sort函数对结果进行排序。 根据描述,该程序设计任务的目标是编写一个程序,实现以下步骤: - 读取文件quiz_url.list,该文件包含一系列的URL。 - 使用合适的数据结构记录每个URL出现的次数。 - 对记录的数据进行排序,使URL按照出现次数从小到大排列。 - 输出每个URL及其对应的出现次数。 具体实现时,可能包括以下几个关键步骤: - 创建一个哈希表(如std::unordered_map)来存储URL字符串作为键,及其出现次数作为值。 - 打开并逐行读取文件quiz_url.list中的内容,对于每一行,检查哈希表中是否已经存在该URL键值: - 如果存在,将对应的计数加一。 - 如果不存在,将该URL加入哈希表,并将其计数设置为1。 - 使用排序算法对哈希表中的条目按照计数值进行排序。这可以通过将哈希表的元素复制到一个列表中,然后对列表应用排序算法来完成。或者在C++中,可以使用map或unordered_map,因为它们已经按照键排序,只需将它们转换为列表形式,并提取键值对即可。 - 遍历排序后的列表,输出每个URL及其出现次数。 这个任务不仅考察了编程能力,还涉及到了数据结构的选择和使用、算法的实现以及文件操作等多个方面的知识。在实际开发中,还需要考虑错误处理,比如文件读取过程中可能出现的异常,以及性能优化等问题。

import urllib.request import queue import threading import sys def bytes2human(n): """ >>> bytes2human(10000) 9K >>> bytes2human(100001221) 95M """ symbols = ('K', 'M', 'G', 'T', 'P', 'E', 'Z', 'Y') prefix = {} for i, s in enumerate(symbols): prefix[s] = 1 << (i + 1) * 10 for s in reversed(symbols): if n >= prefix[s]: value = int(float(n) / prefix[s]) return '%s%s' % (value, s) return '%sB' % n def gethtml(url, bak): try: urlbak = url + bak #print(urlbak) req = urllib.request.urlopen(urlbak, timeout=10) if req.code == 200: meta = req.info() file_size = int(meta.getheaders("Content-Length")[0]) m = bytes2human(file_size) content_type = meta.getheaders('Content-Type')[0].split(';')[0] if file_size == 0: return False if 'html' in content_type: return False else: print('%s ---- %s ---- %s ' % (urlbak, m, content_type)) return '%s ---- %s ---- %s ' % (urlbak, m, content_type) else: return False except: return False def writefile(fileName, c): f = open(fileName, "a") f.write(c + "\n") f.close() q = queue.Queue() def scanner(url): for i in bekadd(url): c = gethtml(url, i) if c != False: writefile("bak.txt", c) def worker(): while not q.empty(): url = q.get() scanner(url) q.task_done() def bekadd(url): listbak = ['/1.zip', '/1.rar', '/web.rar', '/web.zip', '/www.rar', '/www.zip', '/wwwroot.rar', '/wwwroot.zip', '/backup.rar', '/backup.zip', '/database.rar', '/database.zip', '/databak.rar', '/databak.zip', '/databackup.rar', '/databackup.zip', '/databack.zip', '/sql.rar', '/sql.zip'] wwwurl = url[url.find("http://") + 7:].rstrip("/ 这是什么代码

2023-06-12 上传