【一九年七月第二周】周末总结:Matplotlib、定向爬虫、单链表、网络安全、

本周主要有:

  • Python:Matplotlib绘图、
  • Python的定向爬虫的编写实现、
  • C语言的单链表数据结构的实现、
  • 一个网络安全学科竞赛的参与、
  • Vue(npm,cnpm,webpack,vue-cli)的配置安装
  • 一些小点

1.Python:Matplotlib绘图

  • 因为课程设计原因用到了Matplotlib这个极度舒适的第三方库,关于这个库的时候没有遇到什么阻碍,主要的基于tinker实现了文件上传,在通过Python:Pandas 对于上传的(csv)文件进行读取,进而成图。
  • 又因为前期没有考虑到文件上传功能,也没很用心的去做,到后面功能虽然实现了,但是代码很乱。繁衍了事了。不该。
# -*- coding: utf-8 -*-
# @Time    : 2019/7/11 10:34
# @Author  : 奥利波德
# @FileName: getPath.py
# @Software: PyCharm
# @Blog    :https://blog.csdn.net/qq_44265507

import tkinter as tk
from tkinter import filedialog
import pandas
import numpy as np
import matplotlib.pyplot as plt


file_list = []

def show_windows():
    root = tk.Tk()
    root.title("getPath")
    frm = tk.Frame(root)
    frm.grid(padx='20', pady='30')
    btn = tk.Button(frm, text='上传文件', command=upload_files)
    btn1 = tk.Button(frm, text='展示图像', command=showFigure_Var)
    btn.grid(row=0, column=0, ipadx='3', ipady='3', padx='10', pady='20')
    btn1.grid(row=1, column=1, ipadx='3', ipady='5', padx='10', pady='30')
    global text1
    text1 = tk.Text(frm, width='55', height='15')
    text1.grid(row=0, column=1)

    root.mainloop()


def upload_files():
    selectFiles = tk.filedialog.askopenfilenames(
        title='可选择1个或多个文件')  # askopenfilename 1次上传1个;askopenfilenames 1次上传多个

    for selectFile in selectFiles:
        text1.insert(tk.END, selectFile + '\n')  # 更新text中内容
        global file_list
        file_list.append(selectFile)
        text1.update()


def read():
    paths = file_list
    y = [[], [], []]
    for a in range(len(paths)):
        file1 = pandas.read_csv(paths[a])
        for i in range(file1.shape[1]):
            for j in range(file1.shape[0]):
                y[a].append(file1[str(i)][j])
    return y


def showFigure_Var():
    windows = tk.Tk()
    # windows.attributes("-alpha", 0.8)
    windows.title('Plt Tk Np      (By Cjc~)')
    windows.geometry('600x400')
    windows.geometry('+10+20')
    # windows.wm_attributes('-topmost', 1)

    butt1 = tk.Button(windows, text='show me first figure', command=show_first)
    butt1.place(x=100, y=20)
    butt2 = tk.Button(windows, text='show me Second figure', command=show_second).place(x=100, y=60)
    butt3 = tk.Button(windows, text='show me Third figure', command=show_third).place(x=100, y=100)
    windows.mainloop()

def plt_show(flag):

    # 获取x,y
    if flag == 1:
        y = read()[0]
    elif flag == 2:
        y = read()[1]
    elif flag == 3:
        y = read()[2]
    else:
        print("in flag error")
    x_len = len(y)
    x = np.arange(0, x_len)

    # 生成figure
    plt.plot(x, y)

    # 坐标轴标记
    plt.xlabel('I am X')
    plt.ylabel('I am Y')

    # 设置刻度值
    # new_ticks = np.linspace(0, 250, 11)
    # new_ticks_y = np.linspace(-25, 5, 7)
    # plt.yticks(new_ticks_y)
    # plt.xticks(new_ticks)

    # 设置隐藏X,Y轴
    ax = plt.gca()
    ax.spines['right'].set_color('none')
    ax.spines['top'].set_color('none')

    # 设置脊梁对应X,Y轴
    ax.xaxis.set_ticks_position('bottom')
    ax.yaxis.set_ticks_position('left')

    # 设置X,Y轴交汇点
    # if flag == 1:
    #     ax.spines['bottom'].set_position(('data', 25))
    #     ax.spines['left'].set_position(('data', 0))
    # else:
    #     ax.spines['bottom'].set_position(('data', 0))
    #     ax.spines['left'].set_position(('data', 0))

    # show
    plt.show()


def show_all():
    print("eee")


def show_first():
    plt_show(1)


def show_second():
    plt_show(2)


def show_third():
    plt_show(3)


if __name__ == '__main__':

    show_windows()

2.Python定向爬虫(一条伪装头部淘宝信息爬虫

  • 之前一直对Python爬虫有点兴趣,好像是在上周六晚上偶然刷B站的时候刚好刷到了北京理工大学的嵩山老师的Python网络爬虫的课程。就点进去了看了看,极度舒适,就当天晚上看到了一点多了。。。。然后第二天就跟着用request、bs4库写了一个小爬虫。体验极好,之后就有了淘宝信息爬虫,为了伪装cookies,花了很大的力气。值得。
  • 爬虫,是一个很好的工具,希望可以用好它。奥对了,这几天看到一个有个Python的公众号,将爬下来的信息,用一个叫词云的库生成词云。。。感觉极好,下周机会尝试一下。!
  • 感觉东西大多都有互通的趋势。乱学点,万一那天用到了呢,破铜烂铁的没准哪天就炼成一把绝世宝剑了呢。哈哈。
  • 还有一个正则表达式的库 re ,极其有用,用于匹配特定的字符串!!!

3.基于C语言的数据结构之单链表的实现

  • 之前一直都有感觉数据结构很重要的,因为之后也是要去看算法的。又自己本来数据结构这门课程就学的比较差。所以打算重新手打一遍。过一下!
  • emm,因为之前装的Vs没用过,所以打算用用。
  • 后面因为没接到、没买到想要的数据结构的书。就做到单链表就鸽了。
  • 补一个新实践过的小技能,因为书没买到,没接到。就去看pdf的版本了。然后想起淘宝打印店,就尝试去打印一下。九百多页两本书。三十几块钱。还会进行封订。今天收到快递了。体验极好。极度推荐大家去试试。不缺钱请自动忽略这条消息。
  • LinkList.c

#include<stdio.h>
//定义顺序表的最大长度
#define MAXSIZE 20
typedef int ElemType;

//定义一个结构体变量 即顺序表
typedef struct {
		ElemType data[MAXSIZE];
		int length;
	}SqList;

// 表示函数状态代码
typedef int Status;	

//传入一个列表 获取第i个元素的值给 e
Status GetElem(SqList L, int i, ElemType *e) 
	{
		/*
			1.列表为空、i小于1即不存在、i取值超过数组长度
			2.即成功返回1 否 返回0
		*/
		if (L.length == 0 || i<1 || i>L.length)
			return 0;
		*e = L.data[i - 1];
		return 1;
	}


//插入元素
Status Listinsert(SqList *L, int i, ElemType e)
	{
		/*
			cjc:
				传入一个列表、要插入的位置,要插入的值
				1.判断插入是否合理有效
				2.判断是不是最末尾的结点,如果是直接尾随;
				3.判断插入后会不会溢出
				4.判断列表是否为空
				5.。。。
		*/
		/*
			t:
				1.如果插入位置不合理,抛出异常
				2.如果线性表长度大于等于数组长度,则抛出异常或动态增加容量
				3.从最后一个元素开始向前遍历到第i个位置,分别将它们都向后移动一个位置
				4.将要插入元素填入位置i处
				5.表长加1
		*/
		int k;
		
		if (L -> length == MAXSIZE)
		{
			return 0;
		}

		if (i < 1 || i - 1 > L -> length)
		{
			return 0;
		}

		if (i <= L -> length)
		{
			for (k = L->length-1;k>=i-1;k--)
			{
				L->data[k - 1] = L->data[k];
			}
			
		}

		L->data[i - 1] = e;
		L->length++;
		return 1;
	}


Status ListDelete(SqList *L, int i, ElemType *e)
{
	/*
		1.如果删除位置不合理,则抛出异常
		2.取出删除元素
		3.从删除元素位置开始遍历到最后一个元素位置,分别将它们都向前移动一个位置
		4.表长减1
	*/
	if (i<1||i>L->length||L->length==0)
	{
		return 0;
	}
	*e = L->data[i - 1];
	if (i<L->length)
	{
		for (i; i < L->length; i++)
		{
			L->data[i - 1] = L->data[i];
		}
	}
	L->length--;
	return 1;
}
  • SqList.c

#include<stdio.h>
#include<stdlib.h>
#define MAXSIZE 20
typedef int ElemType;
typedef struct Node
{
	ElemType data;
	struct Node *next;
}Node;
typedef struct Node *LinkList;

int GetElem(LinkList L, int i, ElemType *e)
{
	/**
		1.p不为空,要得到第i个数,即从第一个数开始查询到第i个数
		2.当表为空时,或者出界时报错
		3.赋值
	**/
	int k=1;
	LinkList p = L->next;
	while (p&&k<i)
	{
		p = p->next;
		k++;
	}
	if (!p||k>i)
	{
		return 0;
	}
	*e = p->data;
	return 0;
}

int ListInsert(LinkList *L, int i, ElemType *e) 
{
	LinkList n,p = *L;
	int k = 1;
	if (i<1)
	{
		return 0;
	};
	while (p&&k<i)
	{
		p = p->next;
		k++;
	};
	if (!p||k>i)
	{
		return 0;
	};
	n = (LinkList)malloc(sizeof(Node));
	n->data = *e;
	n->next = p->next;
	p->next = n;
	return 1;
}


int ListDelete(LinkList *L, int i, ElemType *e)
{
	int k = 1;
	LinkList q,p = *L;
	while (p->next&&k<i)
	{
		p = p->next;
		k++;
	}
	if (!(p->next)||k>i-1)
	{
		return 0;
	}
	q = p->next;
	//q->next = p->next->next;
	//*e = p->next->data;
	p->next = q->next;
	*e = q->data;
	free(q);
	return 1;
	

}
  • 今天拿到自己想要的数据结构的书了《大话数据结构》,很不错的书,推荐。Coding Data Structures again.

4.网络安全的一个比赛

  • 之前没有了解过我们自己网工的专业方向,对自己专业的课没有去研究。就是正常的完成功课的态度。通过这次的赛前准备,我对安全方面也想涉猎一下。我们的专业也没有那么糟,或许糟糕的是我们吧。哈哈。
    在这里插入图片描述

5.Vue(Node.js,npm,cnpm,webpack,vue-cli)的配置安装

  • 一直想自己做一手漂亮的网页的,这次在公司的项目也是前端用的Vue,大佬说极好。哈哈,我就过来追风了。面向B站学习Vue。
  • 操作数据、数据绑定、事件绑定、避免操作DOM
  • 然后安装Vue项目的部署环境。问题较多,但都是小问题,主要存在的问题就是npm的下载源,之后遇到什么问题基本换下载源为淘宝镜像。基本就差不多了。剩下的百度都有解答。同Python的pip。
    在这里插入图片描述
  • Welcome to Your Vue在这里插入图片描述
  • 下一步就是整合Python的Django框架了。奥,对了,这周也大概了解了一PythonWeb(Django),也是通过北理工嵩天老师的课程学到了,了解到了Django的MTV开发模式、以及它的路由模式,响应处理等等。下一周应该搞定Django的模板语言。

6.其他

  • Python pip 避免下载超时问题、建议大家使用以下的下载源

豆瓣:https://pypi.doubanio.com/simple/
阿里:http://mirrors.aliyun.com/pypi/simple/
清华:https://pypi.tuna.tsinghua.edu.cn/simple/

例如我要下载第三方库词云wordcloud,就可以这样CMD,极快!

pip install -i https://pypi.tuna.tsinghua.edu.cn/simple/ wordcloud

在这里插入图片描述

  • 不要再以己度人了。每个人都有选择的自由,开心是最重要的。
  • 相信自己,勇于挑战。两手抓、两手都要硬。哈哈哈。

总结

	还算充实、不算浪费、勉强进步、再接再厉

下周计划

1.Data Sturctures

2.Vue、Django整合

3.微信小程序API实现响应后台函数

4.背单词吧、CET4

5.。。。。。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值