2021-05-21至2024-03-17笔记,收集并展示浏览阅读点赞收藏等数据。
(本笔记适合初通Python,对其基本数据类型字符串str、列表list、元组tuple、字典dict初步了解,认识Linux获取Html文本指令crul、会使正则模块re的coder翻阅)
-
Python 官网:https://www.python.org/
-
Free:大咖免费“圣经”教程《 python 完全自学教程》,不仅仅是基础那么简单……
地址:https://lqpybook.readthedocs.io/
自学并不是什么神秘的东西,一个人一辈子自学的时间总是比在学校学习的时间长,没有老师的时候总是比有老师的时候多。
—— 华罗庚
- My CSDN主页、My HOT博、My Python 学习个人备忘录
- 好文力荐、 老齐教室
2021-05-21至2024-03-17笔记,收集并展示浏览阅读点赞收藏等数据。
(笔记模板由python脚本于2024年03月17日 01:11:18创建,本篇笔记适合初通Python,对其基本数据类型字符串str、列表list、元组tuple、字典dict初步了解,认识Linux获取Html文本指令crul、会使正则模块re的coder翻阅)
-
Python 官网:https://www.python.org/
-
Free:大咖免费“圣经”教程《 python 完全自学教程》,不仅仅是基础那么简单……
地址:https://lqpybook.readthedocs.io/
自学并不是什么神秘的东西,一个人一辈子自学的时间总是比在学校学习的时间长,没有老师的时候总是比有老师的时候多。
—— 华罗庚
- My CSDN主页、My HOT博、My Python 学习个人备忘录
- 好文力荐、 老齐教室
本文质量分:
本文地址: https://blog.csdn.net/m0_57158496/article/details/136768180
CSDN质量分查询入口:http://www.csdn.net/qc
- ◆ 学习笔记索引(all)
- 1、题目描述
- 2、算法解析
- 3、完整源码(Python)
◆ 学习笔记索引(all)
1、题目描述
题目描述截屏图片
链图片
【题目来源于 CSDN 问答社区提问“问题标题”】
2、算法解析
解析
- 001
2021年「博客之星」评选开始投票开启——我想要您投一票
浏览阅读:1.5k
地址:https://blog.csdn.net/m0_57158496/article/details/122190820
评论:3
摘要:我的CSDN主页My Python 学习个人备忘录我的博文推荐2021年「博客之星」评选开始投票开启——我想要您投一票。
- 002
罗马数字判定器( bug 修正)
浏览阅读:1.0k
地址:https://blog.csdn.net/m0_57158496/article/details/122755675
摘要:罗马数字判定器_怎么检查’是不是罗马字母。
(本篇笔记于2022-01-30 21:22:51首次发布,最后修改于2022-02-03 13:39:50)
- 003
“判断两个长度不同(数位不等)的整数能否顺序拼接成最大的一个整数”算法诞生记——算法学习笔记
浏览阅读:959
地址:https://blog.csdn.net/m0_57158496/article/details/127538891
摘要:【点击此处跳转笔记正文】Python 官网:https://www.python.org/Free:大咖免费“圣经”教程《 python 完全自学教程》,不仅仅是基础那么简单……My CSDN主页、My HOT博、My Python 学习个人备忘录好文力荐、老齐教室 自学并不是什么神秘的东西,一个人一辈子自学的时间总是比在学校学习的时间长,没有老师的时候总是比有老师的时候多。
(本篇笔记于2022-10-26 19:36:24首次发布,最后修改于2022-10-27 18:11:52)
- 004
Python 代码打造小 AI ,罗列博文笔记总索引列表,自动生成“我的博文笔记总索引”博文 HTML5 源码文本
浏览阅读:462
地址:https://blog.csdn.net/m0_57158496/article/details/130272839
评论:1
摘要:Python 代码打造小 AI ,获取笔记信息,自动阅读量降序编排索引列表,生成 HTML5 源码文本。
(本篇笔记于2023-04-21 23:10:00首次发布,最后修改于2023-04-30 09:39:33)
-
005
python字典的记录,怎么少了?
浏览阅读:426
地址:https://blog.csdn.net/m0_57158496/article/details/120231530
摘要:python字典的记录少了! 当我在模拟生成信息管理数据时,经常莫明其妙的少些,记录越多,现象越糟糕! 原来,是key唯一性造成的:后面对已在字典的key赋值,key原来的值就被覆盖。
-
006
猜数字赢金币
浏览阅读:357
地址:https://blog.csdn.net/m0_57158496/article/details/134771393
点赞:3 收藏:3
摘要:充值金币后开始游戏,猜中奖励10金币退出,不中扣除1金币继续。
(本篇笔记于2023-12-03 23:55:28首次发布,最后修改于2023-12-06 07:26:04)
- 007
三个写法统计整数前导0个数
浏览阅读:316
地址:https://blog.csdn.net/m0_57158496/article/details/134763482
摘要:从键盘输入一个整数(可能有前导0),编程统计其前导0个数,其法有三。
(本篇笔记于2023-12-03 13:18:24首次发布,最后修改于2023-12-03 13:22:50)
- 008
股票代码合法验证:python字符串str应用
浏览阅读:134
地址:https://blog.csdn.net/m0_57158496/article/details/134791929
摘要:从键盘输入六位股票代码字符串,判定合法并输出板块分类,否则输出“NO”。
(本篇笔记于2023-12-04 19:49:17首次发布,最后修改于2023-12-06 07:24:31)
3、完整源码(Python)
(源码较长,点此跳过源码)
#!/sur/bin/nve python
# coding: utf-8
from time import localtime
from os import system
from re import findall
from random import samplemyDataPath = '/sdcard/Documents/csdn/' # 数据路径。
myUrlRoot = 'https://blog.csdn.net/m0_57158496/article/details/' # 笔记id前缀。timeStamp = lambda: ''.join([f"{i:0>2}" for i in localtime()[2:6]]) # 时间戳(日时分秒)。strDate = lambda x=localtime(): ' '.join([f"{x[0]}年{x[1]:0>2}月{x[2]:0>2}日", ':'.join([f'{i:0>2}' for i in localtime()[3:6]])]) # 字符串格式化当前日期时间(中文年月日,英文时分秒)。def tipRuning():''' “程序正在运算……”提示函数 '''from time import timek = int(str(time())[-2:])%26print(' '*40, end='\r')print(f"{' '*k}{'程序正在运算……'}", end='\r')def getIds():''' 获取博文id总列表 '''textId = []for year in range(2021, localtime()[0]+1): # 多个文本循环读取博文笔记id。with open(f"{myDataPath}csdn_{year}_publishFootprint.txt") as f:textId += f.read().split('\n')[2:] # 去除文本前两行字段字符串。ids = [(i.split('\\')[2], i.split('\\')[-2]) for i in textId]print(f"\n{f' 已收集到{len(ids)}条博文笔记id ':.^33}\n")return idsdef getReaded(Id):''' 获取博文阅读量等数据 '''filename = f"{myDataPath}temp/tempHtmlText.txt"system(f"curl -s {myUrlRoot}{Id} > {filename}") # 获取页面文本并存入文本文件。with open(filename) as f:textHtml = f.read().split('<li class="tool-item tool-item-bar">')[0] # 读取页面超文本,并截取数据文本,加快数据提取速度。author = findall(r' var nickName = "(.+)";', textHtml) # 摘取作者。if not author: # 提取博文笔记作者不为空,选取第一个。input(f"\n“{myUrlRoot}{Id}”\n{'地址可能有误!':~^35}")returnelse:author = author[0]articleTitle = findall(r'var articleTitle = "(.+)";', textHtml)[0] # 摘取文章标题。articleReaded = findall(r'<meta name="description" content="(.*)">', textHtml)[0]for i in list('!……——')+['U3000', ' ']:articleReaded.replace(i, '。') # 替换句末符号为“。”。articleReaded, abstract = articleReaded.split('。')[:2] # 摘取含有阅读量、点赞和收藏、文章摘要的文本。 for i in []: # 我的博文无效摘要。if i in abstract:abstract = '' # 摘要如果含无效字符,令摘要为空。break articleReaded = findall(r'[\d\.kw]+', articleReaded) # 摘取阅读量、点赞和收藏数据。readedLong = len(articleReaded) # len函数获取数据长度。 match readedLong: # 数据赋值。case 0:input(f"\n“{myUrlRoot}{Id}”\n{'地址可能有误!':~^35}")return case 2:readed = articleReaded[0]thumbsUp = articleReaded[-1]collect = 0case 1:readed = articleReaded[0]thumbsUp, collect = 0, 0case 2:readed = articleReaded[0]thumbsUp = articleReaded[-1]collect = 0case 3:readed = articleReaded[0]thumbsUp = articleReaded[1]collect = articleReaded[-1]readed = int(float(readed[:-1])*1000) if readed[-1] == 'k' else int(float(readed[:-1])*10000) if readed[-1] == 'w' else int(readed) # 三元操作语句嵌套还原阅读量为整型。comments = int(findall(r'<span class="count">\n\s*([\d\.kw]*)\n\s*</span>\n\s*</a>\n\s*<div class="tool-hover-tip"><span class="text space">评论</span></div>', textHtml)[0])firstEditTime = ''.join(findall(r'<div class="up-time"><span>于 ([\d\s\-:]+) 首次发布</span></div>', textHtml))reeditTime = ''.join(findall(r'<span class="time">已于 ([\s\d\-:]+) 修改</span>', textHtml))fields = '浏览阅读', '标题', 'ID', '作者', '点赞', '收藏', '评论', '摘要', '首次发布', '最后编辑'datas = readed, articleTitle, Id, author, thumbsUp, collect, comments, abstract, firstEditTime, reeditTimereturn zip(fields, datas)def readSort():''' 阅读量排序列表 '''from time import time start = time()ids = getIds()yes = input(f"\n{'':>12}程序调试?(Y)_").strip().upper()ids = sample(ids, k=8) if yes == 'Y' else ids # 随机取样8个id,调试代码。readeds = []print() # 打印空行。for i in ids: # 数据清洗。tipRuning() # 正在提取阅读量排序操作提示打印。articleInfo = {k: v for k,v in getReaded(f"{i[0]}") if v and v != '0'} # 剔除空值数据项,生成博文笔记浏览阅读等信息字典。articleInfoif not articleInfo.get('摘要') and i[1] != articleInfo['标题']:articleInfo['摘要'] = i[1]if articleInfo: # 提取数据不为空,收集数据。readeds += [articleInfo]readeds.sort(reverse=True, key=lambda x: x['浏览阅读']) # 按浏览阅读排降序。#print('\n\n'.join(map(str, readeds))) # 数据字典直接终端屏幕打印。S = time() - start # 计算提取博文笔记阅读量排序操作用时。S = f"{S//60:.0f}分{S%60:.2f}秒" if S > 60 else f"{S%60:.2f}秒" # 格式化用时用时数据。return readeds, f"本次共计收集{len(readeds)}篇博文笔记信息,总阅读量{sum([i.get('浏览阅读') for i in readeds])/10000:.2f}w。数据采集于{strDate()},用时{S}。"def strDict(articleInfo: dict) -> str:''' 格式化文章阅读量信息 '''d = articleInfo #* *数据字典别名,缩短代码行。readed = d.get('浏览阅读')if readed >= 10000:color = 'gold'size = 5elif 8000 <= readed < 10000:color = 'purple'size = 4elif 6000 <= readed < 8000:color = 'scarlet'size = 4elif 5000 <= readed < 6000:color = 'red'size = 3elif 4000 <= readed < 5000:color = 'orange'size = 3elif 2000 <= readed < 4000:color = 'green'size = 3elif 1000 <= readed < 2000:color = 'cyan'size = 3elif 500 <= readed < 1000:color = 'blue'size = 3elif 100 <= readed < 500:color = 'black'size = 2else:color = 'gray'size = 2readed = f"{readed/10000}w" if readed >= 10000 else f"{readed/1000}k" if 1000 <= readed < 10000 else readed # 格式化千万浏览阅读量数值。url = f"{myUrlRoot}{d.get('ID')}"thumbsUp = d.get('点赞', '')thumbsUp = f"点赞:{thumbsUp} " if thumbsUp else ''collect = d.get('收藏', '')collect = f"收藏:{collect} " if collect else ''comment = d.get('评论', '')comment = f"评论:{comment}" if comment else ''thumbsUps = f"\n<br>{''.join([thumbsUp, collect, comment])}" if thumbsUp or collect or comment else '' abstract = f"\n<br>摘要:{d.get('摘要')}。" if d.get('摘要') else ''editTime = f"\n<br>(本篇笔记于{d.get('首次发布')}首次发布,最后修改于{d.get('最后编辑')})" if d.get('首次发布') else ''return f"<a href='{url}' target=_blank>{d.get('标题')}</a>\n<br>浏览阅读:<font color='{color}' size={size}>{readed}</font>\n地址:<a href='{url}' target=_blank>{url}</a>\n{thumbsUps}<font color='gray' size=2>{abstract}\n{editTime}</font>\n "writeTitle = lambda x: f.write(f"\n\n<br>\n\n### <font color='gray' size=2><font color=#4F999F>◆</font> 阅读量小于<font color=#4F999F> {x} </font>的博文笔记<a href=#catalog>(回目录)</a></font>\n\n<ol reversed=reversed>")def writeHot(readeds: list, filename: str, n: int) -> None:''' 写“我的热博” '''hots = [i for i in readeds if i.get('浏览阅读') >= n] # 解析“热博”数据。n = n if n < 1000 else f"{n/1000:.2f}k" if n < 10000 else f"{n/10000:.2f}w" # 格式化int。with open(filename, 'w') as f:f.write(f"\n<div id='mybolg'></div>\n\n我的<mark><i><font color=#4F999F>HOT</font></i></mark>博:\n<br><font color='gray' size=2>  {readeds[1]}阅读量不小于<b>{n}</b>的有{len(hots)}篇。</font>")for i in hots:f.write(f"\n<li>{strDict(i)}</li>")f.write(f"\n\n</ul>\n</table>\n\n<hr>\n\n<center><font size=3 color='gray'>推荐条件</font><i><mark><font color=#4F999F size=4>阅读量突破<b>{n}</b></font></mark></i></center>\n\n<center><font color='gray' size=2>(<a href='https://blog.csdn.net/m0_57158496/article/details/129728550' target='_blank'>更多热博</a>,请点击蓝色文字跳转翻阅)</font></center>\n")def writer(readeds, sortedName):''' 将排序后的浏览阅读数据写入HTML5文本 '''reader = '初通Python,对其基本数据类型字符串str、列表list、元组tuple、字典dict初步了解,认识Linux获取Html文本指令crul、会使正则模块re'title = '学习笔记索引(all)'t = localtime() # 获取当前时间九位数组。title1 = f"2021-05-21至{'-'.join([f'{i:0>2}' for i in t[:3]])}笔记"title2 = '收集并展示浏览阅读点赞收藏等数据'headModel = f"{title1},{title2}。\n<div id='top'></div>\n<hr>\n\n<font color='gray' size=2>(笔记模板由python脚本于{strDate()}创建,本篇笔记适合<font color=#4F999F>{reader}</font>的coder翻阅)\n\n{open(f'{myDataPath}csdn_blogHead.txt').read()}\n\n<hr><hr>\n<center><font color='gray' size=2></font>{title1}</center>\n<center><b><font color=#4F999F size=5>{title}</font></b></center>\n<center><font color='gray' size=2>({title2})</font></center>\n\n<hr><hr>\n\n本文质量分:<center><font color=#4F999F size=5>【 <b>$96$</b> 】</font></center>\n本文地址:<a href='https://blog.csdn.net/m0_57158496/article/details/136768180'>https://blog.csdn.net/m0_57158496/article/details/136768180</a>\n\nCSDN质量分查询入口:<a href='http://www.csdn.net/qc'>http://www.csdn.net/qc</a></center>"goContents = "\n\n<br><hr>\n<center><a href='#contents'>回页目录</a></center>\n<hr><br>"bodyFirst = "\n\n<hr>\n\n<div id='contents'></div>\n\n<center><font color=#4F999F size=5><b>目 录</b></font></center>\n\n@[TOC]( )\n\n<hr>\n\n# ◆ " + title + "\n\n<br>\n\n## 1、题目描述\n\n<br>\n\n- `题目描述截屏图片`\n\n链图片\n\n<br>\n\n【<font color='gray' size=2>题目来源于<a href='https://ask.csdn.net/questions/' target=_blank> CSDN 问答社区</a>提问“<a href='askUrl' target=_blank>问题标题</a>”</font>】" + goContents + "\n\n## 2、算法解析\n\n<br>\n\n  解析\n\n<br>"bodyEnd = goContents + f"\n\n## 3、完整源码(Python)\n\n<font color='gray' size=2>(源码较长,<a href=\#codes_end>点此</a>跳过源码)</font>\n\n~~~python\n\n{open(f'{myDataPath}csdn_myBlogReadedSort.py').read()}\n\n\n\n~~~\n\n<div id='codes_end'></div>"lastBlogTitle, address, lastBlogSummary = open(f'{myDataPath}csdn_{localtime()[0]}_publishFootprint.txt').read().split('\n')[2:3][0].split('\\')[1:4] # 解析上篇博文标题、地址、内容摘要。lastBlogUrl = f"{myUrlRoot}{address}"tailModel = f"\n\n<br><hr>\n<center><a href='#top'>回页首</a></center>\n<hr><br>\n\n<font color='red'>\n上一篇: \n<a href='{lastBlogUrl}' target='_blank'>{lastBlogTitle}</a><font color='gray'><sub>({lastBlogSummary})</sub></font><br>\n下一篇: \n</font>\n\n<br><hr>\n\n{open(f'{myDataPath}csdn_blogTail.txt').read()}\n"with open(sortedName, 'w') as f:f.write(f"{title1},{title2}。\n<hr>\n\n<sub><font color=#4F999F size=2>  (本笔记适合{reader}的coder翻阅)</font></sub>\n\n{open(f'{myDataPath}csdn_blogHead.txt').read()}\n\n{headModel}{bodyFirst}")for k,i in enumerate(readeds):f.write(f"\n\n- {k+1:0>3}\n{strDict(i)}")f.write(f"{bodyEnd}{tailModel}")def main():''' 我的csdn博文被阅读量排序主函数,完成hotBlog和readedSort的文本输出。 '''print(f"\n{strDate():~^39}\n")readeds = readSort()hotName = f"/sdcard/Documents/csdn/temp/csdn_{timeStamp()}_myHotBlog.txt"sortedName = f"/sdcard/Documents/csdn/temp/csdn_{timeStamp()}_myBlogSorted.txt"print(readeds[1]) # 打印本次提取博文笔记阅读量排序情况。readeds = readeds[0] # 阅读量排序数据赋值。try:writeHot(readeds, hotName, int(input('\nHotBlog基数:')))print(f"\n{f' 我的热博文本{hotName}已保存。 ':~^22}\n")system(f"ls -l {hotName}")writer(readeds, sortedName)print(f"\n{f' 我的博文笔记排序文本{sortedName}已保存。 ':~^22}\n")system(f"ls -l {sortedName}")except Exception as error:print(f"\n错误类型:\n{error}\n")print(f"\n{strDate():~^39}\n")if __name__ == '__main__':main() # 主程序调用。
上一篇: 再写“罗马数字转整”(输入有效的罗马数字字符串,返回对应的十进制整数(字符大小写均可))
下一篇:
截屏图片
(此文涉及ChatPT,曾被csdn多次下架,前几日又因新发笔记被误杀而落马。躺“未过审”还不如回收站,回收站还不如永久不见。😪值此年底清扫,果断移除。留此截图,以识“曾经”。2023-12-31)
精品文章:
- 好文力荐:齐伟书稿 《python 完全自学教程》 Free连载(已完稿并集结成书,还有PDF版本百度网盘永久分享,点击跳转免费🆓下载。)
- OPP三大特性:封装中的property
- 通过内置对象理解python'
- 正则表达式
- python中“*”的作用
- Python 完全自学手册
- 海象运算符
- Python中的 `!=`与`is not`不同
- 学习编程的正确方法
来源:老齐教室
◆ Python 入门指南【Python 3.6.3】
好文力荐:
- 全栈领域优质创作者——[寒佬](还是国内某高校学生)博文“非技术文—关于英语和如何正确的提问”,“英语”和“会提问”是编程学习的两大利器。
- 【8大编程语言的适用领域】先别着急选语言学编程,先看它们能干嘛
- 靠谱程序员的好习惯
- 大佬帅地的优质好文“函数功能、结束条件、函数等价式”三大要素让您认清递归
CSDN实用技巧博文:
- 8个好用到爆的Python实用技巧
- python忽略警告
- Python代码编写规范
- Python的docstring规范(说明文档的规范写法)