零基础学编程039:生成群文章目录(2)
每个月的月底,“分享与成长群”要汇总所有成员的原创文章,这次我改用了水滴微信平台把数据采集到一个电子表格文件中。在《零基础学编程019:生成群文章目录》这一节里,我已经可以用读csv文本文件的办法,配合markdown语法自动生成所有文章的目录。
但这次情况发生了几点变化:
- 直接读取xlsx的电子表格会更方便
- 有些人想用笔名来署名,不显示真实姓名
- 有些文章暂时不方便对外公开,不显示超链接
- 有些人会多次提交,以最后一次的文章为准。比如下图中的第120、127行是同一人的,只保留第127行
这次程序想直接读取电子表格,省掉转换csv这一步,查了一下相关资料,python中读xls或xlsx的模块库非常多,主要可选的是xlrd和pyexcel等,最后我选定了pandas,因为pandas也是依赖xlrd来读取电子表格,并且将来还可以做更为强大的数据分析,学pandas绝对用得上。
读电子表格很方便,用read_excel()函数。
import pandas as pd
df = pd.read_excel("d:/分享与成长群/201703.xlsx")
xlsx原始文件中文章是按提交日期反序排列的,我想让先提交的文章排在前面,因此需要将数据集按“序号”从小到大排序。
df = df.sort("序号")
删除重复数据,我使用了谷歌,找到了drop_duplicates()函数,一行代码搞定。意思是:如果“姓名”这一列相同,表示是重复记录,keep='last'表示只保留最后出现一条记录。
df = df.drop_duplicates('姓名', keep='last')
这个pandas采用了与R语言类似的DataFrame设计,功能非常强大,可以根据设定的条件快速地选出所需的行和列。因为我已经学过R语言,看了一下pandas的快速入门,就找到了这条语句:
df = df.loc[:, ["姓名", "文章标题", "文章超链接", "是否公开文章的链接?", "笔名"]]
原表格中还包括openid、填写时间、IP地址、备注等列,对于我的文章汇总没有用处,而真正有用的就是"姓名"、"文章标题"、"文章超链接"、"是否公开文章的链接?"、"笔名"这五列。
再下来就是逐行循环处理了,pandas应该有更理想的处理办法,但我现在还没学到。
str = ""
for line in df.values :
name = line[0]
title = line[1]
url = line[2]
public = line[3]
penName = line[4]
if(pd.notnull(penName)) :
name = penName
str += "1. " + name + ": "
if(public == '不公开') :
str += title + "n";
else :
str += "[" + title + "](" + url + ")n"
生成的文本是Markdown格式(点这里了解Markdown),还可以更懒一些,把生成的文本直接复制到剪贴板中,从stackoverflow上抄来代码:
from tkinter import Tk
r = Tk()
r.withdraw()
r.clipboard_clear()
r.clipboard_append(str)
r.destroy()
现在只需要到简书上粘贴,并发布就OK了。
小结:
- 软件需求永远在变,程序也要不断迭代
- pandas的read_excel()可直接读取xls和xlsx的电子表格
- DataFrame很强大,可以选行或选列,用.loc[ ]
- sort()排序
- drop_duplicates()去掉重复的行
--- END ---
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 探究 Android 签名机制和原理
- “有迹可循”的灰盒测试分析
- 想用 Gitee 做图床工具,失败了~~
- Nginx系列:配置跳转的常用方式
- Python骚操作:一行代码实现探索性数据分析
- 吊打 Tomcat ,Undertow 性能很炸!!
- 关于在android平台使用nanohttpd实现的http服务在WIFI环境下响应明显太慢的问题
- Vue.js组件库Element中的Select选择器、Cascader级联选择器、Switch开关和Slider滑块
- 年收200万+的Facebook前端工程师(E5)都要求些啥能力?
- 重学数据结构(二、栈)
- 基于深度学习的人员跟踪
- 为了给女朋友独特的七夕惊喜,我学会了人像美肤算法!
- 12种降低开发者工作效率的方法
- 想掌握Android面试官必问的 Binder 机制?那别想绕开 Binder 驱动源码分析!
- TCP协议的3次握手与4次挥手过程详解