简单快速的上手python

前言

python是一门可以快速上手的语言,原因是它语法简单,api容易使用自由灵活

当我们需要安装任何的三方库时,只需要执行 pip install XX

之后在代码里面import xxx就可以使用python啦。

并且python的代码自由灵活,使用缩进区分作用域,提供了许多灵活的方式解决问题。

在其他高级语言中,如果我们想要解析一段json,一定会想到先封装好一个实体类,但在python中可以不必这么做。我们可以用更灵活的方式,不额外定义任何数据结构去解决问题。

如果不是初次接触编程语言,只需要简单的了解语法,就可以直接开始编写python的代码,如果写程序中遇到的不熟悉的框架内容,再去了解相关的框架如何实现即可

python的开发环境

使用vscode,安装python插件就可以快速的开始python的编译开发

python的基本语法简述

1.变量 通过在变量名称后接:声明类型

a:str

2.条件语句,类似于下面的手敲代码,python的条件判断也是使用缩进来区分作用域

  if a< 100:

        print("a<100")

   elif a>50:

         print("a>50")

    else: 

         pritnt(”超出范围“)

如果我们需要在一个条件中放另一个条件

只需要用下面的结构就行了

        if a<100:

                if a>50:

                else:

如果我们需要一个否定的条件只需要写

        if not a<100:

3.for循环语句,如果data是一个list

 for i in data:

如果需要拿到list的索引:

for index,item in enumerate(data):

4.常用数据结构

map={}

map['A'] = 100

list= []

list.append(map)

开始开发

只需要了解上面的一些简单的语法,就可以开始开发实际的功能,下面是两个实际的开发例子,我会简述开发的过程

1.json格式的转换代码开发

原始数据json是一段json字符串,他包含中国所有城市地区的信息,要做的事情是从这个字符串中拿到所有省会城市以及直辖市的名称并且给他们添加编号,保存成一个新的json

这里需要用到json这个三方库,因此首先在命令行执行

pip install simplejson

json的原始数据是这样的结构,

关键信息如下

[{"name":"北京市",city:["name":"直辖市"]},{"name":"河北省",city:[{"name":"石家庄市"},{}..]}]

如果是直辖市,就直接获取名字,如果是省/区/州,需要拿到二级的city的第一个城市的名称

下面是具体的数据的部分内容

[{"name": "北京市","code": "110000","city": [{"name": "市辖区","code": "110100","area": [{"name": "东城区","code": "110101"},{"name": "西城区","code": "110102"},{"name": "朝阳区","code": "110105"},{"name": "丰台区","code": "110106"},{"name": "石景山区","code": "110107"},{"name": "海淀区","code": "110108"},{"name": "门头沟区","code": "110109"},{"name": "房山区","code": "110111"},{"name": "通州区","code": "110112"},{"name": "顺义区","code": "110113"},{"name": "昌平区","code": "110114"},{"name": "大兴区","code": "110115"},{"name": "怀柔区","code": "110116"},{"name": "平谷区","code": "110117"},{"name": "密云区","code": "110118"},{"name": "延庆区","code": "110119"}]}]},{"name": "天津市","code": "120000","city": [{"name": "市辖区","code": "120100","area": [{"name": "和平区","code": "120101"},{"name": "河东区","code": "120102"},{"name": "河西区","code": "120103"},{"name": "南开区","code": "120104"},{"name": "河北区","code": "120105"},{"name": "红桥区","code": "120106"},{"name": "东丽区","code": "120110"},{"name": "西青区","code": "120111"},{"name": "津南区","code": "120112"},{"name": "北辰区","code": "120113"},{"name": "武清区","code": "120114"},{"name": "宝坻区","code": "120115"},{"name": "滨海新区","code": "120116"},{"name": "宁河区","code": "120117"},{"name": "静海区","code": "120118"},{"name": "蓟州区","code": "120119"}]}]},{"name": "河北省","code": "130000","city": [{"name": "石家庄市","code": "130100","area": [{"name": "市辖区","code": "130101"},{"name": "长安区","code": "130102"},{"name": "桥西区","code": "130104"},{"name": "新华区","code": "130105"},{"name": "井陉矿区","code": "130107"},{"name": "裕华区","code": "130108"},{"name": "藁城区","code": "130109"},{"name": "鹿泉区","code": "130110"},{"name": "栾城区","code": "130111"},{"name": "井陉县","code": "130121"},{"name": "正定县","code": "130123"},{"name": "行唐县","code": "130125"},{"name": "灵寿县","code": "130126"},{"name": "高邑县","code": "130127"},{"name": "深泽县","code": "130128"},{"name": "赞皇县","code": "130129"},{"name": "无极县","code": "130130"},{"name": "平山县","code": "130131"},{"name": "元氏县","code": "130132"},{"name": "赵县","code": "130133"},{"name": "晋州市","code": "130183"},{"name": "新乐市","code": "130184"}]},{"name": "唐山市","code": "130200","area": [{"name": "市辖区","code": "130201"},{"name": "路南区","code": "130202"},{"name": "路北区","code": "130203"},{"name": "古冶区","code": "130204"},{"name": "开平区","code": "130205"},{"name": "丰南区","code": "130207"},{"name": "丰润区","code": "130208"},{"name": "曹妃甸区","code": "130209"},{"name": "滦县","code": "130223"},{"name": "滦南县","code": "130224"},{"name": "乐亭县","code": "130225"},{"name": "迁西县","code": "130227"},{"name": "玉田县","code": "130229"},{"name": "遵化市","code": "130281"},{"name": "迁安市","code": "130283"}]},{"name": "秦皇岛市","code": "130300","area": [{"name": "市辖区","code": "130301"},{"name": "海港区","code": "130302"},{"name": "山海关区","code": "130303"},{"name": "北戴河区","code": "130304"},{"name": "抚宁区","code": "130306"},{"name": "青龙满族自治县","code": "130321"},{"name": "昌黎县","code": "130322"},{"name": "卢龙县","code": "130324"}]},

定义一个json解析相关内容的python文件,我制定了几个参数 path是json文件的路径,ofname:是输出文件的名称,save用来控制是输出到本地

这个的with open(path,encoding="utf-8")是使用utf-8编码读取文件,

with是python的关键字,他的作用如下( 百度内容):

with关键字主要用于以下场景:

  1. 文件操作‌:在处理文件时,使用with可以自动管理文件的打开和关闭,即使在发生异常时也能确保文件正确关闭‌12。
  2. 异常处理‌:with语句封装了try…except…finally的编码范式,简化了异常处理流程‌23。
  3. 资源管理‌:适用于任何实现了上下文管理协议的对象,如数据库连接、网络连接等‌12。

而open是python的标准api他用于打开文件

所以上诉语句是打开本地文件的意思。然后for循环是把以及的name先取出,判断是否是直辖市,入宫是直接存储到 [{}] list嵌套map的数据结构中。(index,并没有用到,因为需要和非直辖市的省会(二级数据)一起添加编码,所以用了单独的count来当作序号)。最后一句判断如果save的值是True。就输出到本地。

编码到本地的代码intent=4是表示增加缩进,ensure_ascii=False ,是指不以ascii码保存,不指定,默认会保存成ascii码。 由于是utf-8编解码没什么问题也不会乱码,但就是json文件无法直接查看文字内容会以unicode编码的格式显示 /u...

import simplejson as json
def parseJson(path:str,ofname:str,save:bool=False):with open(path,encoding="utf-8") as json_file:data = json.load(json_file,encoding="utf-8")count = 0list =[]for index,item in enumerate(data):name:str=item['name']if(name.endswith("市")):print(count,item['name'])map={}map['num']=countmap['name']=item['name']list.append(map)count=count+1elif 'city' in item:# for city in item['city']:#     print(index,count,city['name'])#     count=count+1print(count,item['city'][0]['name'])map={}map['num']=countmap['name']=item['city'][0]['name']list.append(map)count=count+1if save:       encodeJson(list,ofname)def parseCity(path:str):with open(path,encoding="utf-8") as json_file:data=json.load(json_file,encoding="utf-8")for item in data:print(item['num'],item['name'])def printJson(path:str):with open(path,encoding="utf-8") as json_file:data = json.load(json_file,encoding="utf-8")print(data)def encodeJson(list:list,filename:str):with open(filename, 'w', encoding='utf-8') as file:json.dump(list, file,encoding="utf-8", ensure_ascii=False, indent=4)

然后我们在另一个python文件中使用这个封装好的json处理小工具

import parsejson
parsejson.parseJson("cityjson.json",ofname="json-test.json",save=True)
parsejson.printJson("json-test.json")
parsejson.parseCity("json-test.json")

输出结果如下:

2.解析网络数据

这里是一个简单的尝试,将任天堂官网的图片下载到本地,需要用到的库 request,os,re

requests是用于网络请求的,re是正则表达式,os是用于文件管理

这个 funGetHtmlPage是从指定网址读取网页并下载到本地,如果本地已经有这个网页文件,就直接从本地文件读取

主要的应用就是os库,os.mkdia就是创建目录,os.path.join就是给path增加一层目录或者文件

os.curdir是os当前指向的目录,img_dir = os.path.join("D:/python/", dir),指定为 D:/python/目录下的子目录的意思

获取网页内容写起来非常简单,就下面两行就拿到了response

   rep=req.get(path)

            print(rep.text)

import requests as req
import os
import re
import utildef funGetHtmlPage(dir:str,path:str,name:str,filter:str):if path.startswith(filter):img_dir = os.path.join("D:/python/", dir)html_path= os.path.join(img_dir,name)if not os.path.isfile(html_path):rep=req.get(path)print(rep.text)filestr=rep.textif not os.path.isdir(img_dir):os.mkdir(img_dir)with open(html_path,"w",encoding="utf-8") as f:f.write(rep.text)print("从网页读取:"+name)else:with open(html_path,"r",encoding="utf-8") as f:content=f.read()filestr=content# print(content)f.closeprint("从文件读取:"+name)return filestrelse:return "error"

下面的代码是解析出网页的文件中的图片地址并且将图片下载到本地,主要用到的就是正则表达式的知识,r''前面的小R是使用字符串的原始格式,如果不加会抛出异常

ex=r'<div\s+class="ncmn-thumb"\s+style=".*?"\s*></div>'
tempResultListImg=re.findall(ex,mainPageStr,re.S)
start = "https"
end = "jpg"for urlStr in tempResultListImg:temp:str=urlStrmatch=util.find_strings_between(start=start,end=end,text=urlStr)if(match[0]==True):path="https"+match[1]+"jpg"print(path)img_dir = os.path.join(os.curdir, 'cover_images')#traval_images是文件夹名称if not os.path.isdir(img_dir):os.mkdir(img_dir)# img_path= ["https://www.baidu.com/img/PCtm_d9c8750bed0b3c7d089fa7d55720d6cf.png",#         "https://images.ctfassets.net/o5v89n4kg6h4/4VUyO3UPXuAXLsNsgvfwkY/31d69035c603d796b2c0e509c33f56bd/topBanner_l_demo_ver.png"]# for path in img_path:#     # print(path)img_name = 'cover' + path.split('/')[-1] #图片名称print(img_name)filepath = os.path.join(img_dir, img_name)if not os.path.isfile(filepath):resp = req.get(path)with open(filepath, 'wb') as f:for chunk in resp.iter_content(1024):#限速写入图片f.write(chunk)

   这个是我封装的一个小工具,就是通过正则表达式匹配两个字符中间的内容

import re
def find_strings_between(text, start, end):pattern = rf"{start}(.*?){end}"matches = re.findall(pattern, text, re.S)if len(matches) > 0 :return (True,matches[0])else:return (False,"")

        

结语

python是一门简单易用易上手的开发语言,但如果查看api的源代码,会发现逻辑会复杂很多。和大多数高级语言一样,api封装了大部分的逻辑,可以快速的开发功能。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/483068.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【算法刷题指南】优先级队列

&#x1f308;个人主页&#xff1a; 南桥几晴秋 &#x1f308;C专栏&#xff1a; 南桥谈C &#x1f308;C语言专栏&#xff1a; C语言学习系列 &#x1f308;Linux学习专栏&#xff1a; 南桥谈Linux &#x1f308;数据结构学习专栏&#xff1a; 数据结构杂谈 &#x1f308;数据…

[241129] Docker Desktop 4.36 发布:企业级管理功能、WSL 2 增强 | Smile v4.0.0 发布

目录 Docker Desktop 4.36 发布&#xff1a;企业级管理功能、WSL 2 和 ECI 增强Smile v4.0.0 发布&#xff01;Java 机器学习库迎来重大升级 Docker Desktop 4.36 发布&#xff1a;企业级管理功能、WSL 2 和 ECI 增强 Docker Desktop 4.36 带来了强大的更新&#xff0c;简化了…

vue3+typescript自定义input组件

官方文档&#xff1a;https://cn.vuejs.org/guide/components/events#%E5%AE%9A%E4%B9%89%E8%87%AA%E5%AE%9A%E4%B9%89%E4%BA%8B%E4%BB%B6 触发与监听事件​ 在组件的模板表达式中&#xff0c;可以直接使用 $emit 方法触发自定义事件 (例如&#xff1a;在 v-on 的处理函数中)…

HarmonyOS4+NEXT星河版入门与项目实战(23)------实现手机游戏摇杆功能

文章目录 1、案例效果2、案例实现1、代码实现2、代码解释4、总结1、案例效果 2、案例实现 1、代码实现 代码如下(示例): import router from @ohos.router import {ResizeDirection } from @ohos.UiTest import curves

Qt的定时器应用案例 || Qt的图片添加显示

目录 1.ui界面 2.头文件 3.cpp源文件 4.main文件 5.关于ui_mytimerevent.h的代码编译错误 6.图片的添加展示方式 7.结果展示 8.参考文章 1.ui界面 2.头文件 #ifndef MYTIMEREVENT_H #define MYTIMEREVENT_H#include <QMainWindow> #include <QTime> //#in…

【大数据学习 | Spark-SQL】关于RDD、DataFrame、Dataset对象

1. 概念&#xff1a; RDD&#xff1a; 弹性分布式数据集&#xff1b; DataFrame&#xff1a; DataFrame是一种以RDD为基础的分布式数据集&#xff0c;类似于传统数据库中的二维表格。带有schema元信息&#xff0c;即DataFrame所表示的二维表数据集的每一列都带有名称和类型…

分布式集群下如何做到唯一序列号

优质博文&#xff1a;IT-BLOG-CN 分布式架构下&#xff0c;生成唯一序列号是设计系统常常会遇到的一个问题。例如&#xff0c;数据库使用分库分表的时候&#xff0c;当分成若干个sharding表后&#xff0c;如何能够快速拿到一个唯一序列号&#xff0c;是经常遇到的问题。实现思…

53 基于单片机的8路抢答器加记分

目录 一、主要功能 二、硬件资源 三、程序编程 四、实现现象 一、主要功能 首先有三个按键 分别为开始 暂停 复位&#xff0c;然后八个选手按键&#xff0c;开机显示四条杠&#xff0c;然后按一号选手按键&#xff0c;数码管显示&#xff13;&#xff10;&#xff0c;这…

深度学习基础03_BP算法(下)过拟合和欠拟合

目录 一、BP算法(下) 0、反向传播代码回顾 写法一&#xff1a; 写法二(更常用)&#xff1a; 1、BP中的梯度下降 1.数学描述 2.传统下降方式 3.优化梯度下降方式 指数加权平均 Momentum AdaGrad RMSProp Adam(常用) 总结 二、过拟合和欠拟合 1、概念 1.过拟合 …

WPF+MVVM案例实战与特效(三十)- 封装一个系统日志显示控件

文章目录 1、运行效果2、日志控件封装1、文件创建2、DisplayLogPanel.xaml 代码3、DisplayLogPanel.cs 代码4、数据模型5、枚举类型3、自定义控件使用1、LogPanelWindow.xaml2、LogPanelViewModel.cs4、总结1、运行效果 2、日志控件封装 1、文件创建 打开 Wpf_Examples ,在 …

Ubuntu 20.04 Server版连接Wifi

前言 有时候没有网线口插网线或者摆放电脑位置不够时&#xff0c;需要用Wifi联网。以下记录Wifi联网过程。 环境&#xff1a;Ubuntu 20.04 Server版&#xff0c;无UI界面 以下操作均为root用户&#xff0c;如果是普通用户&#xff0c;请切换到root用户&#xff0c;或者在需要权…

计算机网络:IP协议详细讲解

目录 前言 一、IP网段划分 二、IP报头 三、解决IP地址不足-->NAT技术 前言 在之前&#xff0c;我们学习了传输层中的TCP和UDP&#xff0c;重点是TCP协议&#xff0c;他帮我们解决具体到主机的哪个应用&#xff08;端口&#xff09;、传输的可靠&#xff08;序列号、校验和…

基于大数据python 电商数据分析及推荐可视化系统(源码+LW+部署讲解+数据库+ppt)

&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01; 很对人不知道选题怎么选 不清楚自己适合做哪块内容 都可以免费来问我 避免后期給自己答辩找麻烦 增加难度&#xff08;部分学校只有一次答辩机会 没弄好就延迟…

三种方式(oss、本地、minio)图片的上传下载

一、OSS 1、前期准备 1.1 注册阿里云账号&#xff0c;开启对象存储oss功能&#xff0c;创建一个bucket&#xff08;百度教程多的是&#xff0c;跟着创建一个就行&#xff0c;创建时注意存储类型是标准存储&#xff0c;读写权限是公共读&#xff09; 有的在创建桶时读写属性是…

Z2400032基于Java+Mysql+SSM的校园在线点餐系统的设计与实现 代码 论文

在线点餐系统 1.项目描述2. 技术栈3. 项目结构后端前端 4. 功能模块5. 项目实现步骤注意事项 6.界面展示7.源码获取 1.项目描述 本项目旨在开发一个校园在线点餐系统&#xff0c;通过前后端分离的方式&#xff0c;为在校学生提供便捷的餐厅点餐服务&#xff0c;同时方便餐厅和…

【前端】理解 JavaScript 中 typeof 操作符的独特行为

博客主页&#xff1a; [小ᶻ☡꙳ᵃⁱᵍᶜ꙳] 本文专栏: 前端 文章目录 &#x1f4af;前言&#x1f4af;typeof 操作符的基本使用&#x1f4af;为什么 typeof 数组是 "object"&#xff1f;&#x1f4af;为什么 typeof {} 返回 "object"&#xff1f;&…

Github提交Pull Request教程 Git基础扫盲(零基础易懂)

1 PR是什么&#xff1f; PR&#xff0c;全称Pull Request&#xff08;拉取请求&#xff09;&#xff0c;是一种非常重要的协作机制&#xff0c;它是 Git 和 GitHub 等代码托管平台中常见的功能&#xff0c;被广泛用于参与社区贡献&#xff0c;从而促进项目的发展。 PR的整个过…

C/C++ 数据结构与算法【线性表】 顺序表+链表详细解析【日常学习,考研必备】带图+详细代码

1&#xff09;线性表的定义 线性表&#xff08;List&#xff09;&#xff1a;零个或多个数据元素的有限序列。 线性表的数据集合为{a1,a2,…,an}&#xff0c;假设每个元素的类型均为DataType。其中&#xff0c;除第一个元素a1外&#xff0c;每一个元素有且只有一个直接前驱元素…

浏览器的数据六种存储方法比较 :LocalStorage vs. IndexedDB vs. Cookies vs. OPFS vs. WASM-SQLite

在构建该 Web 应用程序&#xff0c;并且希望将数据存储在用户浏览器中。也许您只需要存储一些小标志&#xff0c;或者甚至需要一个成熟的数据库。 我们构建的 Web 应用程序类型发生了显着变化。在网络发展的早期&#xff0c;我们提供静态 html 文件。然后我们提供动态渲染的 h…

【C++boost::asio网络编程】有关异步读写api的笔记

异步读写api 异步写操作async_write_someasync_send 异步读操作async_read_someasync_receive 定义一个Session类&#xff0c;主要是为了服务端专门为客户端服务创建的管理类 class Session { public:Session(std::shared_ptr<asio::ip::tcp::socket> socket);void Conn…