【企业化部署】Nginx之Rewrite与location的用法

news2024/11/29 0:35:57

文章目录

  • 前言
  • 一、正则表达式
    • 1. Nginx 的正则表达式
    • 2. 正则表达的优势
    • 3. Nginx 使用正则的作用
  • 二、location 的概念
    • 1. location 和 rewrite 区别
    • 2. location 匹配的分类
    • 3. location 常用的匹配规则
      • 3.1 location 匹配优先级
      • 3.2 location 匹配的实例
      • 3.3 实际网站规则定义
        • 第一个必选规则
        • 第二个必选规则
        • 第三个规则
  • 三、Nginx Rewrite 的概述
    • 1. rewrite 的功能
    • 2. rewrite 的用法
      • 2.1 执行顺序
    • 3. rewrite 跳转实现
    • 4. rewrite 的语法格式
  • 四、Rewrite 的实例
    • 1. 基于域名的跳转
    • 2. 基于客户端 IP 访问跳转
    • 3. 基于旧域名跳转到新域名后面加目录
    • 4. 基于参数匹配的跳转
    • 5. 基于目录下所有 php 结尾的文件跳转
    • 6. 基于最普通一条 url 请求的跳转
  • 总结


前言

现在许多公司都会用nginx去反向代理服务器。在域名更名后需要保持旧域名能够跳转到新域名上。如果在后端使用apache服务器虽然也可以去跳转,但是效率没有nginx高。


一、正则表达式

1. Nginx 的正则表达式

匹配符功能说明
^匹配输入字符串的起始位置
$匹配输入字符串的结束位置
*匹配前面的字符零次或多次。如 ol* 能匹配 oololl
+匹配前面的字符一次或多次。如 ol+ 能匹配 olollolll,但不能匹配 o
?匹配前面的字符零次或一次,例如 do(es)? 能匹配 do 或者 does? 等效于{0,1}
.匹配除 \n 之外的任何单个字符,若要匹配包括“\n”在内的任意字符,请使用诸如 [.\n]` 之类的模式
\将后面接着的字符标记为一个特殊字符或一个原义字符或一个向后引用。如 \n 匹配一个换行符,而 \$ 则匹配 $
\d
\s
\w
匹配纯数字[0-9]
空白符
任意单词字符包括下划线 [A-Za-z0-9_]
{n}重复 n 次
{n,}重复 n 次或更多次
{n,m}重复 n 到 m 次
[]定义匹配的字符范围
[c]匹配单个字符 c
[a-z]匹配 a-z 小写字母的任意一个
[a-zA-Z0-9]匹配所有大小写字母或数字
()表达式的开始和结束位置
``

2. 正则表达的优势

  • 精确匹配,减少遍历的消耗。
  • 节省服务响应的资源消耗。
  • 提高用户体验感。
  • 提高服务器并发时、处理效率/性能。

3. Nginx 使用正则的作用

  Nginx作为运维角度前段接受、想用客户请求的直接对服务器所以需要考虑到Nginx的执行效率(精确匹配-类比)、性能(资源消耗)、抗压能力(高并发时处理能力)、用户体验感(用户访问群体)。

二、location 的概念

1. location 和 rewrite 区别

  从功能看 rewritelocation 似乎有点像,都能实现跳转,主要区别在于 rewrite 是在同一域名内更改获取资源的路径,而 location 是对一类路径做控制访问或反向代理,还可以proxy _pass 到其他机器。

  • rewrite :对访问的域名或者域名内的URL路径地址重写。
  • location :对访问的路径做访问控制或者代理转发。

2. location 匹配的分类

location 大致可以分为三类:

  • 精准匹配:location = / {...}
  • 一般匹配:location / {...}
  • 正则匹配:location ~ / {...}

3. location 常用的匹配规则

匹配规则功能说明
=进行普通字符的精准匹配
^~表示普通字符匹配,使用前缀匹配。如果匹配成功则不会匹配其他的location
~区分大小写
~*不区分大小写
!~区分大小写的不去匹配
!~*不区分大小的不去匹配

3.1 location 匹配优先级

  • 首先精确匹配 =
  • 其次前缀匹配 ^~
  • 其次是按文件中顺序的正则匹配 ~~*
  • 然后匹配不带任何修饰符的一般前缀匹配;
  • 最后是交给 / 通用匹配。

3.2 location 匹配的实例

location = / {}

​    =为精确匹配 / ,主机名后面不能带任何字符串。

​   比如访问 //data,则 / 匹配,/data 不匹配。再比如 location = /abc,则只匹配 /abc/abc//abcd 不匹配。若 location /abc,则即匹配 /abc/abcd/ 同时也匹配 /abc/

location / {}

​   因为所有的地址都以 / 开头,所以这条规则将匹配到所有请求。

​   比如访问 //data, 则 / 匹配,/data也匹配。但后面前缀路径会和最长字符串优先匹配(最长匹配)。

location /documents/ {}

​   匹配任何以 /documents/ 开头的地址,匹配符合以后,还要继续往下搜索其它 location

​   只有其它 location后面的前缀路径没有匹配到时,才会采用这一条。

location /documents/abc {}

​    匹配任何以 /documents/abc 开头的地址,匹配符合以后,还要继续往下搜索其它 location

​   只有其它 location 后面的前缀路径没有匹配到时,才会采用这一条。

location ^~ /images/ {}

​    匹配任何以 /images/ 开头的地址,匹配符合以后,停止往下搜索正则,采用这一条。

location ~* \.(gif|jpg|jpeg)$ {}

​    匹配所有以 gifjpg jpeg 结尾的请求。

​   然而,所有请求 /images/ 下的图片会被 location ^~ /images/ 处理,因为 ^~ 的优先级更高,所以到达不了这一条正则。

location /images/abc {}

​   最长字符匹配到 /images/abc,优先级最低,继续往下搜索其它 location,会发现 ^~~ 存在

location ~ /images/abc {}

​    匹配以 /images/abc 开头的,优先级次之,只有去掉 location ^~ /images/ 才会采用这一条

location /images/abc/1.html {}

​    匹配/images/abc/1.html 文件,如果和正则location ~ /images/abc/1.html 相比,正则优先级更高。

location 优先级总结

  首先看 优先级:精确= > 前缀^~ > 正则~,~* > 一般 > 通用/

  在没有精准匹配的情况下,先看前缀匹配的长度,然后根据最长的前缀匹配的优先级去确定是否再去看其它正则匹配location,如果最长的前缀匹配带有 ^~ 则不再看其它正则匹配location,如果最长的前缀匹配是没有修饰符的一般匹配则会再看其它正则匹配location

  前缀匹配看长度,最长的优先匹配。

  正则匹配看上下顺序,由上往下依次匹配,当有匹配成功时候,停止匹配,按当前匹配规则处理请求。

  只有在精准、前缀、正则、一般 都没有匹配到的时候才会看通用匹配。

3.3 实际网站规则定义

第一个必选规则

  直接匹配网站根目录首页,通过域名访问网站首页比较频繁,使用这个会加速处理,比如说官网。

  可以是一个静态首页,也可以直接转发给后端应用服务器。

location = /index.html {
    root   html;
	index  index.html index.htm;
}

第二个必选规则

  处理静态文件请求,这是nginx作为http服务器的强项。

  有两种配置模式,目录匹配或后缀匹配,任选其一或搭配使用。

location ^~ /static/ {
    root /webroot/;
}

location ~* \.(gif|jpg|jpeg|png|css|js|ico)$ {
    root /webroot/res/;
}

第三个规则

  通用规则,比如用来转发带.php.jsp后缀的动态请求到后端应用服务器。

  非静态文件请求就默认是动态请求。

location / {
    proxy_pass http://tomcat_server;
}

三、Nginx Rewrite 的概述

1. rewrite 的功能

  rewrite功能就是,使用nginx提供的全局变量或自己设置的变量,结合正则表达式和标记位实现URL重写以及重定向。
  
比如:更换域名后需要保持旧的域名能跳转到新的域名上、某网页发生改变需要跳转到新的页面、网站防盗链等等需求。

2. rewrite 的用法

  rewrite只能放在server{}location{}if{}中,并且默认只能对域名后边的除去传递的参数外的字符串起作用,例如 http://www.accp.com/abc/bbs/index.php?a=1&b=2 只对 /abc/bbs/index.php 重写。

2.1 执行顺序

  • 执行 server 块里面的 rewrite 指令。
  • 执行 location 匹配。
  • 执行选定的 location 中的 rewrite 指令。

3. rewrite 跳转实现

  • Nginx 是通过 ngx_http_rewrite_module模块支持url重写、支持if条件判断,但不支持else。
  • 另外该模块需要 PCRE支持,应在编译Nginx时指定PCRE 支持,默认已经安装。
  • 根据相关变量重定向和选择不同的配置,从一个location跳转到另一个location,不过这样的循环最多可以执行10次,超过后Nginx将返回500错误。
  • 重写模块包含set指令,来创建新的变量并设其值,这在有些情景下非常有用的,如记录条件标识、传递参数到其他location、记录做了什么等等。
  • rewrite功能就是使用Nginx提供的全局变量或自己设置的变量,结合正则表达式和标志位实现url重写以及重定向。

4. rewrite 的语法格式

rewrite < regex > < replacement > [flag]

regex:正则表达式。

replacement :跳转后的内容。

flag:rewrite支持的flag标记。

flag标记说明
last本条规则匹配完成后,不终止重写后的url匹配,一般用在 server 和 if 中。
break本条规则匹配完成即终止,终止重写后的url匹配,一般使用在 location 中。
redirect返回302临时重定向,浏览器地址会显示跳转后的URL地址。
permanent返回301永久重定向,浏览器地址栏会显示跳转后的URL地址。

四、Rewrite 的实例

1. 基于域名的跳转

  现在公司旧域名www.accp.com有业务需求变更,需要使用新域名www.benet.com代替,但是旧域名不能废除,需要跳转到新域名上,而且后面的参数保持不变。

[root@localhost ~]# vim /usr/local/nginx/conf/nginx.conf
server {
	listen       80;
	server_name  www.accp.com;		#域名修改	
	charset utf-8;
	access_log  /var/log/nginx/www.accp.com-access.log;		#日志修改
	location / {
	#添加域名重定向
        if ($host = 'www.accp.com'){						#$host为rewrite全局变量,代表请求主机头字段或主机名
			rewrite ^/(.*)$ http://www.benet.com/$1 permanent;	#$1为正则匹配的内容,即“域名/”之后的字符串
        }
        root   html;
        index  index.html index.htm;
    }
}

[root@localhost ~]# echo "192.168.145.45 www.accp.com www.benet.com" >> /etc/hosts
[root@localhost ~]# systemctl restart nginx

浏览器测试

浏览器输入模拟访问 http://www.accp.com(虽然这个请求内容是不存在的)
会跳转到www.benet.com,查看元素可以看到返回301,实现了永久重定向跳转,而且域名后的参数也正常跳转。

在这里插入图片描述

2. 基于客户端 IP 访问跳转

  今天公司业务新版本上线,要求所有 IP 访问任何内容都显示一个固定维护页面,只有公司 IP :192.168.145 .45访问正常。

[root@localhost ~]# vim /usr/local/nginx/conf/nginx.conf
server {
	listen       80;
	server_name  www.accp.com;		#域名修改	
	charset utf-8;
	access_log  /var/log/nginx/www.accp.com-access.log;		#日志修改

	#设置是否合法的IP标记
    set $rewrite true;							#设置变量$rewrite,变量值为boole值true
    #判断是否为合法IP
	if ($remote_addr = "192.168.145.45"){		#当客户端IP为192.168.145.45时,将变量值设为false,不进行重写
        set $rewrite false;
    }
	#除了合法IP,其它都是非法IP,进行重写跳转维护页面
    if ($rewrite = true){						#当变量值为true时,进行重写
        rewrite (.+) /weihu.html;				#将域名后边的路径重写成/weihu.html后转发,例如www.accp.com/weihu.html
    }
    location = /weihu.html {
        root /var/www/html;						#网页返回/var/www/html/weihu.html的内容
    }
	
	location / {
        root   html;
        index  index.html index.htm;
    }
}
[root@localhost ~]# mkdir -p /var/www/html/
[root@localhost ~]# echo "<h1>We are maintaining now!</h1>" > /var/www/html/weihu.html
[root@localhost ~]# systemctl restart nginx

如果rewrite (.+) /weihu.html; 换成rewrite (.+) /weihu.html permanent; 的话,若不是 192.168.145.45 的主机访问会使浏览器修改请求访问的 URL 成 http://www.accp.com/weihu.html 再请求访问,这样就会进入一直在 rewrite 的死循环,访问请求会一直被重写成 http://www.accp.com/weihu.html 再请求访问。

浏览器测试

用其他虚拟机访问
 http://www.accp.com

注意:访问的客户端也需要填写/etc/hosts

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Kcn8Fiwh-1685806377939)(C:\Users\86138\AppData\Roaming\Typora\typora-user-images\image-20230603224038156.png)]

3. 基于旧域名跳转到新域名后面加目录

  现在访问的是 http://bbs.accp.com/post/,现在需要将这个域名下面的访问都跳转到http://www.accp.com/bbs/post/

[root@localhost ~]# vim /usr/local/nginx/conf/nginx.conf
server {
	listen       80;
	server_name  bbs.accp.com www.accp.com;		#域名修改	
	charset utf-8;
	access_log  /var/log/nginx/www.accp.com-access.log;
	location /bbs {
		root html;
	}
	#添加
	location /post {
		 
        rewrite (.+) http://www.accp.com/bbs$1 permanent;		#这里的$1为位置变量,代表/post
    }
	
	location / {
        root   html;
        index  index.html index.htm;
    }
}
}

[root@localhost ~]# mkdir -p /usr/local/nginx/html/bbs/post
[root@localhost ~]# echo "this is 1.html"  >> /usr/local/nginx/html/bbs/post/1.html
[root@localhost ~]# echo "192.168.145.45 bbs.accp.com"  >> /etc/hosts=

浏览器测试

使用浏览器访问 http://bbs.accp.com/post/1.html 跳转到 http://www.accp.com/bbs/post/1.html

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-EhMR7uyF-1685806377939)(C:\Users\86138\AppData\Roaming\Typora\typora-user-images\image-20230603231954365.png)]

4. 基于参数匹配的跳转

  现在访问http://www.accp.com/100-(100|200)-100.html 跳转到http://www.accp.com页面。

[root@localhost ~]# vim /usr/local/nginx/conf/nginx.conf
server {
	listen       80;
	server_name  www.accp.com;		#域名修改	
	charset utf-8;
	access_log  /var/log/nginx/www.accp.com-access.log;
	
	if ($request_uri ~ ^/100-(100|200)-(\d+).html$) {
        rewrite (.+) http://www.accp.com permanent;
    }

	location / {
        root   html;
        index  index.html index.htm;
    }
}

[root@localhost ~]# systemctl restart nginx
  • $request_uri:包含请求参数的原始URI,不包含主机名,如:http://www.accp.com/abc/bbs/index.html?a=1&b=2 中的 /abc/bbs/index.php?a=1&b=2
  • $uri:这个变量指当前的请求URI,不包括任何参数,如:/abc/bbs/index.html
  • $document_uri:与$uri相同,这个变量指当前的请求URI,不包括任何传递参数,如:/abc/bbs/index.html

浏览器测试

使用浏览器访问 http://www.accp.com/100-200-100.html 或 http://www.accp.com/100-100-100.html 跳转到http://www.accp.com页面。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-SPwIKmG7-1685806377940)(C:\Users\86138\AppData\Roaming\Typora\typora-user-images\image-20230603232452500.png)]

5. 基于目录下所有 php 结尾的文件跳转

  要求访问 http://www.accp.com/upload/123.php 跳转到首页。

[root@localhost ~]# vim /usr/local/nginx/conf/nginx.conf
server {
	listen       80;
	server_name  www.accp.com;		#域名修改	
	charset utf-8;
	access_log  /var/log/nginx/www.accp.com-access.log;
	
	location ~* /upload/.*\.php$ {
        rewrite (.+) http://www.accp.com permanent;
    }

	location / {
        root   html;
        index  index.html index.htm;
    }
}

[root@localhost ~]# systemctl restart nginx

浏览器测试

浏览器访问 http://www.accp.com/upload/123.php 跳转到http://www.accp.com页面。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-QR8c7niI-1685806377940)(C:\Users\86138\AppData\Roaming\Typora\typora-user-images\image-20230603232905985.png)]

6. 基于最普通一条 url 请求的跳转

  求访问一个具体的页面如 http://www.accp.com/abc/123.html 跳转到首页。

[root@localhost ~]# vim /usr/local/nginx/conf/nginx.conf
server {
	listen       80;
	server_name  www.accp.com;		#域名修改	
	charset utf-8;
	access_log  /var/log/nginx/www.accp.com-access.log;
	
    location ~* ^/abc/123.html {
        rewrite (.+) http://www.accp.com permanent;
    }

	location / {
        root   html;
        index  index.html index.htm;
    }
}


[root@localhost ~]# systemctl restart nginx

浏览器测试

浏览器访问 http://www.accp.com/abc/123.html 跳转到http://www.accp.com页面。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-nNQZlj00-1685806377941)(C:\Users\86138\AppData\Roaming\Typora\typora-user-images\image-20230603233222531.png)]

总结

  • location的分类(精确匹配、一般匹配、正则匹配)
  • 掌握location的优先级(location = 完整路径) > (location ^~ 路径) > (location ,* 正则顺序) > (location 部分起始路径) > (location /)
  • 掌握rewrite的几种使用方法:基于域名的跳转、基于客户端 IP 访问跳转、基于旧域名跳转到新域名后面加目录、基于参数匹配的跳转、基于目录下所有 php 结尾的文件跳转、基于最普通一条 url 请求的跳转

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Netty之EventLoop 解读

是什么 EventLoop &#xff08;事件循环对象&#xff09;本质是一个单线程执行器&#xff08;同时维护了一个 Selector&#xff09;&#xff0c;里面有 run 方法处理 Channel 上源源不断的 io 事件。 它的继承关系比较复杂 一条线是继承自 j.u.c.ScheduledExecutorService 因…

CenterSpace.NMath.Standard.Windows.X64 7.4 Crack

适用于所有 .NET 语言&#xff0c;包括 C#、Visual Basic 和 F#。 CenterSpace Software的NMath TM .NET 数学和统计库为.NET平台上的金融、工程和科学应用程序提供数值组件。 基础 .NET 数学和统计库NMath包括复数类、一般向量和矩阵类、结构化稀疏矩阵类和因式分解、一般稀疏…

华为OD机试真题 Java 实现【找出通过车辆最多颜色】【2023Q1 100分】

一、题目描述 在一个狭小的路口&#xff0c;每秒只能通过一辆车&#xff0c;假如车辆的颜色只有3种&#xff0c;找出n秒内经过的最多颜色的车辆数量。 三种颜色编号为0、1、2。 二、输入描述 第一行输入的是通过的车辆颜色信息 [0 1 1 2] 代表4秒钟通过的车辆颜色分别是0 1…

Rust每日一练(Leetday0020) 最后单词的长度、螺旋矩阵II、排列序列

目录 58. 最后一个单词的长度 Length of Last Word &#x1f31f; 59. 螺旋矩阵 II Spiral Matrix II &#x1f31f;&#x1f31f; 60. 排列序列 Permutation Sequence &#x1f31f;&#x1f31f;&#x1f31f; &#x1f31f; 每日一练刷题专栏 &#x1f31f; Rust每日…

Java企业级信息系统开发学习笔记14 Spring Boot(使用Spring Initializr方式构建Spring Boot项目)

文章目录 一、使用Spring Initializr方式构建Spring Boot项目&#xff08;一&#xff09;创建Spring Boot项目&#xff08;二&#xff09;创建控制器&#xff08;三&#xff09;运行入口类&#xff08;四&#xff09;访问Web页面&#xff08;五&#xff09;修改访问映射路径 一…

OpenMMLab-AI实战营第二期-MMPose代码介绍

课程介绍 原始视频链接&#xff1a; 安装MMDetection和MMPose&#xff1a;https://www.bilibili.com/video/BV1Pa4y1g7N7 MMDetection三角板目标检测&#xff1a;https://www.bilibili.com/video/BV1Lm4y1879K MMPose、RTMPose三角板关键点检测&#xff1a;https://www.bilibi…

chatgpt赋能python:Python取消Import:改变编程世界的未来发展趋势

Python取消Import&#xff1a;改变编程世界的未来发展趋势 Python是一门非常流行的编程语言&#xff0c;它是开源的&#xff0c;因此得到了许多人的喜爱。然而&#xff0c;在Python的发展过程中&#xff0c;有些人认为现有的模块和包管理方式不够理想&#xff0c;需要进行改进…

视频压缩的工作原理

一、说明 当你正在观看你最喜欢的节目&#xff0c;出现缓冲的时候&#xff0c;这是什么原因&#xff1f;当 Wi-Fi 带宽不足以下载传输视频流所需的数据时&#xff0c;就会发生缓冲。也有可能是视频网站发布了未压缩版本的视频文件&#xff0c;因此视频文件太大而无法流畅地流式…

Linux常用命令——grpconv命令

在线Linux命令查询工具 grpconv 用来开启群组的投影密码 补充说明 grpconv命令用来开启群组的投影密码。Linux系统里的用户和群组密码&#xff0c;分别存放在/etc目录下的passwd和group文件中。因系统运作所需&#xff0c;任何人都得以读取它们&#xff0c;造成安全上的破绽…

Linux——TCP协议2

目录 确认应答(ACK)机制 超时重传机制 连接管理机制 流量控制 滑动窗口 快重传VS超时重传 拥塞控制 延迟应答 捎带应答 面向字节流 粘包问题 TCP异常情况 基于TCP应用层协议 TCP/UDP对比 用UDP实现可靠传输 listen 的第二个参数 确认应答(ACK)机制 TCP将每个字节的数…

力扣高频SQL50题(基础版)——第五天

力扣高频SQL50题(基础版)——第五天 1 至少有5名直接下属的经理 1.1 题目内容 1.1.1 基本题目信息 1.1.2 示例输入输出 1.2 示例sql语句 #①找到经理的所有编号②让其与员工表内连接,然后分组筛选即可 SELECT e1.name FROM (SELECT id,nameFROM EmployeeWHERE managerId IS…

Vmware虚拟机实例配置静态IP

最近在给虚拟机配置静态IP的时候&#xff0c;出了一些小问题&#xff0c;本文主要描述操作过程中一些小问题的解决。 主要参考资料: How to set up Linux in VMWare Workstation with static IP (IPv4) 个人配置信息: VMware Workstation Debian 记录一下虚拟机的网卡信息 …

文本编辑器

章节目录&#xff1a; 一、Vim 编辑器1.1 检查 vim 软件包1.2 vim 基础1.3 命令模式1.4 输入模式1.5 底线命令模式&#xff08; Ex 模式 &#xff09; 二、nano 编辑器三、结束语 一、Vim 编辑器 vi 编辑器是 Unix 系统中最早的编辑器之一。vim 是从 vi 发展出来的一个文本编辑…

GTK官方教程

前言&#xff1a; 让你在开发中爱不释手的 GT 包。关注GSLS官网&#xff0c;查看更多源码 ヾ(✿&#xff9f;▽&#xff9f;)ノ工具包。 所有文章 小编尽量让读者可以 直接 读懂 与 完全 复制粘贴&#xff0c;其中复杂或较多 的源码 会有 源码 并 贴上 github 网址。 GT 类 里面…

图文并茂教你快速入门React系列04-状态管理

在React中&#xff0c;什么是状态&#xff1f; 响应式 使用 React&#xff0c;你不用直接从代码层面修改 UI。举个栗子哇&#xff0c;不用编写诸如“禁用按钮”、“启用按钮”、“显示成功消息”等命令。相反&#xff0c;你只需要描述组件在不同状态&#xff08;“初始状态”…

chatgpt赋能python:Python另存为在哪:一篇SEO指南

Python另存为在哪&#xff1a;一篇SEO指南 简介 Python是目前最流行的编程语言之一&#xff0c;它的高效性和易用性使得越来越多的人选择使用它来编写软件和web应用程序。然而&#xff0c;Python在保存文件时可能会有些棘手&#xff0c;尤其是在需要另存为不同格式或目录时。…

chatgpt赋能python:Python只取数字:你需要知道的一切

Python只取数字&#xff1a;你需要知道的一切 在当今数字化的时代&#xff0c;数字信息已经成为全球交流和经济活动的主要组成部分。因此&#xff0c;在处理数据时&#xff0c;我们经常需要从文件中提取数字信息。Python是一种广泛应用于数据处理和分析的编程语言&#xff0c;…

Java面向对象程序开发——基础

文章目录 前言类和对象类对象 构造方法匿名对象变量作用域this关键字总结 前言 提示&#xff1a;这里可以添加本文要记录的大概内容&#xff1a; Java 是一种以面向对象编程为基础的编程语言 在 Java 编程中&#xff0c;一切皆为对象 每个对象都有其自己的属性和方法 对象可以…

图论试题2021

25 A&#xff1a;最大度是7&#xff0c;大于了顶点数6&#xff0c;故不是简单图的度序列。 C&#xff1a;树的度序列至少要有两个度为1的顶点 D&#xff1a;只要度数为奇数的个数有偶数个&#xff0c;就是度序列。 A&#xff1a;每棵树的中心由一个点或两个相邻点组成 B&…

碳中和城市建筑能源系统(1):能源篇(龙惟定)2022

碳中和城市建筑能源系统(1):能源篇 碳中和城市建筑能源系统&#xff08;1&#xff09;&#xff1a;能源篇&#xff08;龙惟定&#xff09;2022 碳中和城市建筑能源系统&#xff08;2&#xff09;&#xff1a;网络篇&#xff08;龙惟定&#xff09;2022 碳中和城市建筑能源系统&…