简单快速的上手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 = 0
        list =[]
        for index,item in enumerate(data):
            name:str=item['name']
            if(name.endswith("市")):
                print(count,item['name'])
                map={}
                map['num']=count
                map['name']=item['name']
                list.append(map)
                count=count+1
            elif 'city' in item:
                # for city in item['city']:
                #     print(index,count,city['name'])
                #     count=count+1
                print(count,item['city'][0]['name'])
                map={}
                map['num']=count
                map['name']=item['city'][0]['name']
                list.append(map)
                count=count+1
        if 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 util

def 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.text
            if 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.close
            print("从文件读取:"+name)
        return filestr
    else:
        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=urlStr
    match=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封装了大部分的逻辑,可以快速的开发功能。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【NLP高频面题 - LLM架构篇】旋转位置编码RoPE相对正弦位置编码有哪些优势?

【NLP高频面题 - LLM架构篇】旋转位置编码RoPE相对正弦位置编码有哪些优势&#xff1f; 重要性&#xff1a;⭐⭐⭐ &#x1f4af; NLP Github 项目&#xff1a; NLP 项目实践&#xff1a;fasterai/nlp-project-practice 介绍&#xff1a;该仓库围绕着 NLP 任务模型的设计、训练…

论文:IoU Loss for 2D/3D Object Detection

摘要&#xff1a;在2D/3D目标检测任务中&#xff0c;IoU (Intersection-over- Union)作为一种评价指标&#xff0c;被广泛用于评价不同探测器在测试阶段的性能。然而&#xff0c;在训练阶段&#xff0c;通常采用常见的距离损失(如L1或L2)作为损失函数&#xff0c;以最小化预测值…

STM32 HAL库开发学习1.STM32CubeMX 新建工程

STM32 HAL库开发学习1.STM32CubeMX 新建工程 一、 STM32 CubeMX 下载二、CubeMX 功能介绍1. 固件包路径设置2. 新建工程 三、创建项目实例1. 新建项目2. GPIO 管脚设置3. GPIO 窗口配置4. 调试设置5. 时钟配置6. 项目管理&#xff08;1&#xff09;项目信息&#xff08;2&#…

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…

Linux中的常用基本指令(下)

Linux常用基本指令 Linux中的基本指令12.head指令13.tail指令简单解释重定向与管道(重要) 14.date指令(时间相关的指令)15.cal指令(不重要)16.find指令(灰常重要&#xff09;17.grep指令(重要)18.which指令和alias指令19.zip/unzip指令&#xff1a;20.tar指令&#xff08;重要&…

元素「宽高比」完美适配的方案

在日常生活中&#xff0c;我们常常会看到视频或照片能够随着页面尺寸变化&#xff0c;按照自身宽高比进行缩放调整。这种效果是如何实现的呢&#xff1f; 可以通过 CSS 和 JavaScript 两种方式完成&#xff0c;其中 CSS 是比较推荐的方式&#xff0c;因为它能充分利用现代浏览…

Android笔记【12】脚手架Scaffold和导航Navigation

一、前言 学习课程时&#xff0c;对于自己不懂的点的记录。 对于cy老师第二节课总结。 二、内容 1、PPT介绍scaffold 2、开始代码实操 先新建一个screen包&#xff0c;写一个Homescreen函数&#xff0c;包括四个页面。 再新建一个compenent包&#xff0c;写一个displayText…

[极客大挑战 2019]HardSQL--详细解析

信息搜集 登录系统&#xff0c;有两个可能的注入点&#xff1a; 随便输一下看看传参类型&#xff1a; 都是GET型。 SQL注入 传参 usernameadmin’&password123 传参 usernameadmin&password123’ username和password传参&#xff0c;四种闭合方式只有单引号报错&a…

Ansible自动化一键部署单节点集群架构

自动化部署利器&#xff1a;Ansible 一键部署脚本 在现代IT基础设施管理中&#xff0c;Ansible以其简洁、强大的自动化能力脱颖而出。以下是精心打造的Ansible自动化一键部署脚本&#xff0c;旨在简化部署流程&#xff0c;提升效率&#xff0c;确保一致性和可靠性。 通过这个…

基于云模型的车辆行驶速度估计算法matlab仿真

目录 1.程序功能描述 2.测试软件版本以及运行结果展示 3.核心程序 4.本算法原理 5.完整程序 1.程序功能描述 基于云模型的车辆行驶速度估计算法matlab仿真。在智能交通系统中&#xff0c;车辆行驶速度的准确估计对于交通流量监测、安全预警、自动驾驶辅助等方面具有极为重…

C++知识整理day3类与对象(下)——赋值运算符重载、取地址重载、列表初始化、友元、匿名对象、static

文章目录 1.赋值运算符重载1.1 运算符重载1.2 赋值运算符重载 2.取地址重载2.1 const成员函数2.2 取地址运算符重载 3.类与对象的补充3.1 再探构造函数---初始化列表3.2 类型转换3.3 static成员3.4 友元3.5 内部类3.6 匿名对象3.7 对象拷贝时的编译器优化 1.赋值运算符重载 赋…

自然语言处理:基于BERT预训练模型的中文命名实体识别(使用PyTorch)

命名实体识别&#xff08;NER&#xff09; 命名实体识别&#xff08;Named Entity Recognition, NER&#xff09;是自然语言处理&#xff08;NLP&#xff09;中的一个关键任务&#xff0c;其目标是从文本中识别出具有特定意义的实体&#xff0c;并将其分类到预定义的类别中。这…

面试题-RocketMQ的基本架构、支持的消息模式、如何保证消息的可靠传输

相关问题 1、RocketMQ的基本架构是怎样的&#xff1f;请简述各组件的作用。 2、RocketMQ支持哪几种消息模式&#xff08;如点对点、发布/订阅&#xff09;&#xff1f;请简要说明它们的区别。 3、如何使用Java客户端实现一个简单的消息生产者和消费者&#xff1f; 4、RocketMQ…

【力扣】3274. 检查棋盘方格颜色是否相同

一、题目 给你两个字符串 coordinate1 和 coordinate2&#xff0c;代表 8 x 8 国际象棋棋盘上的两个方格的坐标。以下是棋盘格的参考图&#xff1a; 如果这两个方格颜色相同&#xff0c;返回 true&#xff0c;否则返回 false。坐标总是表示有效的棋盘方格。坐标的格式总是先字…

mysql 5.7安装及安装后无法启动问题处理

下载安装包&#xff0c;直接解压 配置环境变量 创建my.ini文件 [mysqld] #端口号 port 3306 #mysql-5.7.27-winx64的路径 basedirD:/soft/mysql57 #mysql-5.7.27-winx64的路径\data datadirD:/soft/mysql57/data #最大连接数 max_connections200 #编码 character-set-server…

2023年第十四届蓝桥杯Scratch国赛真题—推箱子

推箱子 程序演示及其源码解析&#xff0c;可前往&#xff1a; https://www.hixinao.com/scratch/creation/show-188.html 若需在线编程&#xff0c;在线测评模考&#xff0c;助力赛事可自行前往题库中心&#xff0c;按需查找&#xff1a; https://www.hixinao.com/ 题库涵盖…

级联树结构TreeSelect和上级反查

接口返回结构 前端展示格式 前端组件 <template><div ><el-scrollbar height"70vh"><el-tree :data"deptOptions" :props"{ label: label, children: children }" :expand-on-click-node"false":filter-node-me…

28.100ASK_T113-PRO Linux+QT 显示一张照片

1.添加资源文件 2. 主要代码 #include "mainwindow.h" #include "ui_mainwindow.h" #include <QImage> #include <QPixmap>MainWindow::MainWindow(QWidget *parent) :QMainWindow(parent),ui(new Ui::MainWindow) {ui->setupUi(this);QIm…

基于PySpark 使用线性回归、随机森林以及模型融合实现天气预测

基于PySpark 实现天气预测与模型集成 在大数据分析与机器学习领域&#xff0c;Spark 提供了强大的计算能力和灵活的扩展性。本文将介绍如何利用 PySpark 完成以下任务&#xff1a; 1、数据预处理&#xff1a;清洗和编码天气数据。 2、特征工程&#xff1a;合并数值和分类特征…

【MySQL — 数据库基础】深入理解数据库服务与数据库关系、MySQL连接创建、客户端工具及架构解析

目录 1. 数据库服务&#xff06;数据库&#xff06;表之间的关系 1.1 复习 my.ini 1.2 MYSQL服务基于mysqld启动而启动 1.3 数据库服务的具体含义 1.4 数据库服务&数据库&表之间的关系 2. 客户端工具 2.1 客户端连接MySQL服务器 2.2 客…