-
2022-02-16 10:13:30
split()方法返回由分隔符分隔的子字符串列表。
分隔符是存在于字符串中的,分割完后返回的子字符串列表不包括分割符。
比如'http://1.1.1.1:80'这个字符串就可以通过分割符':' '/' '.' 来分割字符串。
举个例子:分割'http://1.1.1.1:80','https://1.1.1.2:443'这两个字符串,获得对应的ip和端口值。
a='http://1.1.1.1:80' b='http://1.1.1.2:443' #以:分割字符串 a_1=a.split(':') b_1=b.split(':') #查看分割完返回的列表 print a_1,b_1 #获得分割完的端口 print a_1[2] print b_1[2] #由于ip前面有//两个符号,则将分割后的字符串再进行分割(套娃) ip1=a_1[1].split('/') print ip1[2] ip2=b_1[1].split('/') print ip2[2]
运行结果:
['http', '//1.1.1.1', '80'] ['http', '//1.1.1.2', '443'] 80 443 1.1.1.1 1.1.1.2
!!!注意:分割符也可以是数字,字母,字符串等,分割的原理都是一样的:分割符为字符串内的元素,分割返回的结果中没有分割符。
举个例子:
a='http://100.com:80' #以字符串分割 a_1=a.split('.com') print a_1 #以字母分割 a_2=a.split('c') print a_2 #以数字分割 a_3=a.split('100') print a_3
运行结果:
['http://100', ':80'] ['http://100.', 'om:80'] ['http://', '.com:80']
更多相关内容 -
php 分割字符
2021-03-23 20:38:00', $arr);//将一维数组以!分隔组合成一个字符串,参数一可以为""字符串转数组:explode('!...//将字符串分割成数组,参数二将字符串...文章阿童沐2018-09-121254浏览量跟我学习php字符串常用函数-上篇1...PHP 数组与字符串互转
数组转字符串:
implode('!', $arr);//将一维数组以!分隔组合成一个字符串,参数一可以为""
字符串转数组:
explode('!', $str);//将字符串以!分割为一个一维数组,参数一不可以为""
str_split($str, 3);//将字符串分割成数组,参数二将字符串...
文章
阿童沐
2018-09-12
1254浏览量
跟我学习php字符串常用函数-上篇
1> string trim ( string $str [, string $charlist = " \t\r\0\x0B" ] )
去除首尾的空白字符(默认),或其他字符
2> string chr ( int $ascii )
ASCII码转字符字符串echo ch...
文章
__simple
2016-06-06
644浏览量
explode() 函数的应用
explode() 函数把字符串分割为数组。
语法
explode(separator,string,limit)
参数
描述
separator
必需。规定在哪里分割字符串。
string
必需。要分割的字符串。
limit
可选。规定所返回的数组元素的最大数...
文章
undefault
2013-12-25
787浏览量
explode() 函数的应用
explode() 函数把字符串分割为数组。
语法
explode(separator,string,limit)
参数
描述
separator
必需。规定在哪里分割字符串。
string
必需。要分割的字符串。
limit
可选。规定所返回的数组元素的最大数...
文章
undefault
2013-12-25
867浏览量
***实用函数:PHP explode()函数用法、切分字符串,作用,将字符串打散成数组
下面是根据explode()函数写的切分分割字符串的php函数,主要php按开始和结束截取中间数据,很实用
代码如下:
// ### 切分字符串 #### function jb51netcut($start,$end,$file){ $content=explode($start,...
文章
suboysugar
2017-11-06
1365浏览量
PHP 分割字符串
分割字符串 //利用 explode 函数分割字符串到数组 复制代码代码如下:<?php $source = "hello1,hello2,hello3,hello4,hello5";//按逗号分离字符串 $hello = explode(',',$source); for($index=0...
文章
阿童沐
2018-09-12
7768浏览量
PHP中常用的18个字符串函数
字符串函数是PHP基础操作中必不可少的一部分,也是最重要的部分之一,本文将常用的十几个字符串操作列出,并介绍,希望对大家有所帮助。字符串格式化
字符串截断:
trim():
删除字符串首尾位置的(回车、换行、制表符)字符,并返回结果字符串
同时,trim()参数也可以设置自定义的特殊字符过滤列表
...
文章
请叫我可儿
2019-11-12
580浏览量
substr(),mb_substr()及mb_strcut的区别和用法
substr()函数可以 分割文字,但要分割的文字如果包括中文字符往往会遇到问题,这时可以用mb_substr()/mb_strcut这个函数,mb_substr() /mb_strcut的用法与substr()相似,只是在mb_substr()/mb_strcut最后要加入多一个参数,以设定字符...
文章
桃子红了呐
2016-11-27
525浏览量
substr(),mb_substr()及mb_strcut的区别和用法
substr()函数可以 分割文字,但要分割的文字如果包括中文字符往往会遇到问题,这时可以用mb_substr()/mb_strcut这个函数,mb_substr() /mb_strcut的用法与substr()相似,只是在mb_substr()/mb_strcut最后要加入多一个参数,以设定字符...
文章
桃子红了呐
2017-01-01
758浏览量
php’s explode() 函数
explode() 函数把字符串分割为数组。 explode(separator,string,limit) 原文 http://www.w3school.com.cn/php/func_string_explode.asp
文章
hopegrace
2013-04-20
650浏览量
python字符串操作实方法大合集
python字符串操作实方法大合集,包括了几乎所有常用的python字符串操作,如字符串的替换、删除、截取、复制、连接、比较、查找、分割等,需要的朋友可以参考下:
#1、去空格及特殊符号
s.strip().lstrip().rstrip(',')
#2、复制字符串
#strcp...
文章
sunsky303
2017-09-14
799浏览量
PHP字符串操作(string替换、删除、截取、复制、连接、比较、查找、包含、大小写转换、切割成数组等)
一、字符串替换
str_replace("iwind", "kiki", "i love iwind, iwind said");
将输出 "i love kiki, kiki said"
str_replace(find,replace,string,count)参数 描述
find 必需。规...
文章
老朱教授
2017-10-01
1844浏览量
黄聪:Python 字符串操作(string替换、删除、截取、复制、连接、比较、查找、包含、大小写转换、分割等)
去空格及特殊符号
s.strip().lstrip().rstrip(',')
复制字符串
#strcpy(sStr1,sStr2)
sStr1 = 'strcpy'
sStr2 = sStr1
sStr1 = 'strcpy2'
print sStr2
连接字符串
#strcat(sStr1,s...
文章
云栖希望。
2017-12-04
1302浏览量
Python 字符串操作(string替换、删除、截取、复制、连接、比较、查找、包含、大小写转换、分割等)
Python 字符串操作(string替换、删除、截取、复制、连接、比较、查找、包含、大小写转换、分割等)
Python 字符串操作(string替换、删除、截取、复制、连接、比较、查找、包含、大小写转换、分割等)
去空格及特殊符号
s.strip() .lstrip() ....
文章
云栖希望。
2017-12-04
837浏览量
***PHP implode() 函数,将数组合并为字符串;explode() 函数,把字符串打散为数组
实例
把数组元素组合为字符串:
<?php
$arr = array('Hello','World!','I','love','Shanghai!');
echo implode(" ",$arr);
?>
运行实例
定义和用法
implode() 函数返回由数组元素组合成的字符串。...
文章
suboysugar
2015-10-15
922浏览量
PHP常用函数
转自:http://www.cnblogs.com/dreamhome/archive/2011/05/04/2037011.html
//===============================时间日期===============================
/...
文章
PSA培训与认证
2015-02-11
688浏览量
PHP5常用函数
PHP已经更新到很多个版本,最近用的比较多的要数PHP5。下面我们为大家总结了PHP5常用函数,以便大家将来实际编写代码中查看。
pathinfo返回文件路径的信息 ,包括以下的数组单元:dirname ,basename 和 extension 。
func_num_args(),func_ge...
文章
航空母舰
2016-05-12
1621浏览量
浅谈正则表达式
原文:浅谈正则表达式
一、什么是正则表达式?
简单的说:正则表达式(Regular Expression)是一种处理字符串匹配的语言;
正则表达式描述了一种字符串匹配的模式,可以用来检查一个字符串是否含有某种子串,对匹配到的子串进行“取出”或“替换”操作。
二、正则表达式的应用
正则表达式在实际的...
文章
杰克.陈
2014-08-13
859浏览量
Python 字符串操作(string替换、删除、截取、复制、连接、比较、查找、包含、大小写转换、分割等)
Python 字符串操作(string替换、删除、截取、复制、连接、比较、查找、包含、大小写转换、分割等)
Python 字符串操作(string替换、删除、截取、复制、连接、比较、查找、包含、大小写转换、分割等)
去空格及特殊符号
s.strip() .lstrip()...
文章
技术小胖子
2017-11-10
862浏览量
python基础之字符串格式化
python中字符串格式化有两种一种是%另一种是str中的format()功能。
%
列举格式符
%s 字符串
%c 单个字符
%b 二进制整数
%d 十进制整数
%i 十进制整数
%o 八进制整数
%x ...
文章
余二五
2017-11-15
800浏览量
php字符串比较函数
php字符串比较函数
www.111cn.net 编辑:Crese 来源:转载
比较两个字符串是否相等,最常见的方法就是使用“===”来判断,至于它和“==”的区别,简单来说就是前者强调“identical”类型也要求一样;后者要求“equal”,值相同就可以了,参考【1】...
文章
thinkyoung
2015-07-01
617浏览量
php字符串比较函数
比较两个字符串是否相等,最常见的方法就是使用“===”来判断,至于它和“==”的区别,简单来说就是前者强调“identical”类型也要求一样;后者要求“equal”,值相同就可以了,参考【1】。或者使用strcmp来判断,但是这个能够告诉你两个字符串是否相等,但是无法告诉你在那里不同。我的思路是...
文章
suboysugar
2015-03-10
616浏览量
PHP系列(五)PHP字符串处理
php字符串处理
1、字符串的处理方式(分割匹配找查替换)
//声明一个关联数组,数组名为$lamp, 成员有4个
$lamp = array( 'os'=>'Linux','webserver' =>'Apache', 'db'=>'MySQL', 'language'=&g...
文章
科技小能手
2017-11-12
1083浏览量
PHP 12 :字符串的操作
原文:PHP 12 :字符串的操作本章介绍字符串的操作。之所以要把字符串单独拿出来讲,是因为字符串在每种语言里都是非常重要的。并且也是大家关心的。我们从以下几个方面介绍字符串:
字符串的表现形式。
字符串的特别之处。
字符串的常用操作。
说点具体的吧。 1. 字符串的表现形式...
文章
杰克.陈
2014-12-03
1010浏览量
Python字符串格式化
在python中也有类似于c中的printf()的格式输出标记。在python中格式化输出字符串使用的是%运算符,通用的形式为
格式标记字符串% 要输出的值组
其中,左边部分的”格式标记字符串“可以完全和c中的一致。右边的'值组'如果有两个及以上的值则需要用小括号括起来,中间用短号隔开。重点...
文章
余二五
2017-11-15
642浏览量
php实现验证码的识别(中级篇)
在上篇文章
(初级篇
)
>
中,讲了如何识别简单的验证,这里的简单只的是验证码有数字和字母组成,格式统一,每次出现位置固定。这篇文章将继续深入研究识别验证码,这次识别的目标是,验证码有字符和数字组成,验证码存在旋转(可能左右都旋转),位置不固定,存在字...
文章
aizher8860
2009-03-09
1603浏览量
导出csv文件时,处理分隔符问题(转)
转自:http://blog.sina.com.cn/s/blog_468530a60100kjpy.html
CSV文件默认以英文逗号做为列分隔符,换行符作为行分隔符。 如果不提供网页形式只用命令行或二进制程序输出数据到CSV,只需要将数据段按,分割,行按分割,写入到一个.csv文件即可...
文章
developerguy
2016-03-23
1328浏览量
js处理url
需求:用js获得url的电话号码和状态
针对url地址:http://www.deikang.com/index.php?tel=15811296111&status=1&id=100
var url="http://www.deikang.com/index.php?tel=1...
文章
wensongyu
2013-08-26
495浏览量
PHP二维数组切割为字符串并去除重复的值
PHP二维数组切割为字符串并去除重复的值
应用场景在于需要查询出某一个rent_contract_id所有有关的id及rent_contract_parent_id,然后组装成字符串便于后期使用FIND_IN_SET进行查询操作:
// select rent_contract_id,ren...
文章
幸运券发放
2018-04-12
1152浏览量
正则表达式的资源和工具汇集(上)
正则表达式的资源和工具汇集(上)
正则表达式是一种模板,用于批评字符串中字符的组合。在JavaScript语言中,正则表达式还可以是对象。在RegExp工具中,这些模板可以用于方法的执行和测试,可以匹配、替换、搜索和分割字符串。
正则表达式一贯被认为难以学习和掌握,而实际上,学习它很容易。
本文...
文章
jieforest
2014-08-23
525浏览量
-
分割java数组
2021-02-12 19:28:042.2 int a[] = new int[10]2.3 type[] 变量名 ={new type[]}{逗号分割的初始化列表};红色可以省略type[] 变量名 = ...文章zting科技2017-11-10515浏览量鲁卡斯队列求黄金分割数这是2012年Java...Java 数组
1. 数组: 形同类型数据的集合叫做数组
2 定义数组的方式
2.1 int[] a = new int[10];
2.2 int a[] = new int[10]
2.3 type[] 变量名 ={new type[]} {逗号分割的初始化列表};
红色可以省略 type[] 变量名 = ...
文章
zting科技
2017-11-10
515浏览量
鲁卡斯队列求黄金分割数
这是2012年Java的本科B组蓝桥杯,C/C++的本科B组是连分数求黄金分割数,精确到100位,太难啦,问了好多学校的,没几个做出来的。
我当时用的是自带计算器,精度太小了。
一.问题描述
黄金分割数0.618与美学有重要的关系。舞台上报幕员所站的...
文章
哈沙给
2013-08-06
655浏览量
Java中Split函数的用法技巧
在java.lang包中也有String.split()方法,与.net的类似,都是返回是一个字符型数组,但使用过程中还有一些小技巧。如执行:"2|33|4".split("|")出来的结果是:""2|33|4奇怪吧,不过注意看一下API说明还是知道原因的.java.lang.string.spl...
文章
wangccsy
2011-06-08
432浏览量
Java 最常用的10大算法
String/Array/Matrix
在Java中,String是一个包含char数组和其它字段、方法的类。
toCharArray() //get char array of a String
Arrays.sort() //sort an array
Arrays.toString(ch...
文章
凌浩雨
2018-08-06
1437浏览量
【java易错点】java split分割字符串 空格问题解析
String s = "@123.com";
String[] data = s.split("@"); // 以@分割字符串,获得@后的值。
运行结果如下
data[0] : " ";
data[1] : 123.com ;
此时,你会发现,data数组里面存储的第一个元素是一个空格...
文章
落雨_
2012-02-14
825浏览量
【java】split字符串分割
1、问题描述
因为前端页面表单中platform项需要传入多个值,以逗号分开,但是传入后台时是以一个长字符串的形式,因此要将该长字符串分割开来。
2、问题解决
使用split()方法分割字符串,生成一个数组。
String platform = dto.getPlatform(...
文章
anank
2017-07-21
1207浏览量
《Java核心技术 卷Ⅱ 高级特性(原书第10版)》一1.2 流的创建
1.2 流的创建
你已经看到了可以用Collection接口的stream方法将任何集合转换为一个流。如果你有一个数组,那么可以使用静态的Stream.of方法。
of方法具有可变长参数,因此我们可以构建具有任意数量引元的流:
使用Array.stream(array, from, to)可以从数...
文章
华章计算机
2017-09-01
964浏览量
【转】Java中Split函数的用法技巧
转自:http://www.cnblogs.com/liubiqu/archive/2008/08/14/1267867.html
在java.lang包中也有String.split()方法,与.net的类似,都是返回是一个字符型数组,但使用过程中还有一些小技巧。如执行:"2|33|4".s...
文章
cxycappuccino
2011-08-23
627浏览量
[Java开发之路]Java字符串的10大热点问题盘点
译文链接:http://www.html5tricks.com/10-top-questions-java-string.html英文原文:Top 10 questions of Java Strings翻译作者:蒋丽丽
下面我为大家总结了10条Java开发者经常会提的关于Java字符串的...
文章
sjf0115
2015-12-26
18461浏览量
类文件结构
类文件结构
一、无关性的基石
java通过java虚拟机实现一次编写,到处运行java 虚拟机不和包括java在内的任何语言绑定,它只与“class 文件”这种特定的二进制文件格式关联,class文件包含了Java虚拟机指令集和符号表以及其他辅助信息。
二、Class类文件的结构
1、Class文...
文章
南方之木
2018-03-27
1190浏览量
线程基础之JAVA和C++0x的特性
JAVA特性
JAVA线程通常是一个带有run()方法的java.lang.Thread的子类,然后调用这个子类对象的start()方法。我们之前定义过,数据竞争是因为两个线程同时访问内存单元,在JAVA中,内存单元是一个对象字段或数组元素。
由于JAVA旨在支持运行不受信任代码作为受信任的应用程...
文章
青衫无名
2017-05-23
2640浏览量
HDOJ 1106 排序
Problem Description
输入一行数字,如果我们把这行数字中的‘5’都看成空格,那么就得到一行用空格分割的若干非负整数(可能有些整数以‘0’开头,这些头部的‘0’应该被忽略掉,除非这个整数就是由若干个‘0’组成的,这时这个整数就是0)。
你的任务是:对这些分割得到的整数,依从小到...
文章
谙忆
2016-02-20
629浏览量
干货:排名前16的Java工具类
image
在Java中,工具类定义了一组公共方法,这篇文章将介绍Java中使用最频繁及最通用的Java工具类。以下工具类、方法按使用流行度排名,参考数据来源于Github上随机选取的5万个开源项目源码。
一. org.apache.commons.io.IOUtils
closeQuietly...
文章
java技术栈
2018-03-19
2250浏览量
线程基础之JAVA和C++0x的特性
译文连接 译文地址 译者:衣着时 校对:丁一 (有兴趣参与试译或校对的同学,请加入并发网试译者QQ群:369468545)
JAVA特性
JAVA线程通常是一个带有run()方法的java.lang.Thread的子类,然后调用这个子类对象的start()方法。我们之前定义过,数据...
文章
ali清英
2016-04-06
1088浏览量
快速排序算法QuickSort
1.说明
快速排序法(quicksort)是目前所公认最快的排序方法之一(视解题的对象而定),虽然快速排序法在最差状况下可以达O(n2),但是在多数的情况下,快速排序法的效率表现是相当不错的。快速排序法的基本精神是在数列中找出适当的轴心,然后将数列一分为二,分别对左边与右边数列进行排序,而影响...
文章
嗯哼9925
2017-12-14
1007浏览量
Java编程架构深入解析-RPC 消息协议设计
本节我们开始讲解 RPC 的消息协议设计背后的基本原理,了解 RPC 的协议开发背后有哪些需要考虑的基本点。在通晓原理之后,我们就可以自己设计一套协议来开发属于自己的 RPC 系统。
本节主要涉及的知识点和它们之见的关系如下图:
对于一串消息流,我们必须能确定消息边界,提取出单条消息...
文章
欧阳愠斐
2018-08-17
1186浏览量
Json
Json语法
数据使用名:值对表示
使用{}保存对象,每个名称后面跟着一个‘:’(冒号),名/值对使用,(逗号)分割
使用【】保存数组,数组值使用,(逗号)分割。
简单例子
{
"book" : [
{
...
文章
lambdaλ
2018-03-14
550浏览量
java性能优化方案5——使用原始类型和栈
5、使用原始类型和栈之前介绍了来自 jOOQ的例子中使用了大量的泛型,导致的结果是使用了 byte、 short、 int 和 long 的包装类。但至少泛型在Java 10或者Valhalla项目中被专门化之前,不应该成为代码的限制。因为可以通过下面的方法来进行替换://存储在堆上Integer...
文章
kele2014
2017-12-16
996浏览量
Java Collection
在 Java2中,有一套设计优良的接口和类组成了Java集合框架Collection,使程序员操作成批的数据或对象元素极为方便。这些接口和类有很多对抽象数据类型操作的API,而这是我们常用的且在数据结构中熟知的。例如Map,Set,List等。并且Java用面向对象的设计对这些数据结构和算法进行了...
文章
吞吞吐吐的
2017-09-06
943浏览量
【Java】单词倒序输出
如何将一段单词倒序输出?把“Hello Java Hello China”变成“China Hello Java Hello”?
看起来好像很简单,只需要把字符串先分割成单词,然后加入一个StringBuilder或者StringBuffer中,最后再使用toString方法即可,现在来实...
文章
弗兰克的猫
2017-11-24
849浏览量
二分查找算法
十大算法之二分查找:
二分查找算法是在有序数组中用到的较为频繁的一种算法,在未接触二分查找算法时,最通用的一种做法是,对数组进行遍历,跟每个元素进行比较,其时间为O(n).但二分查找算法则更优,因为其查找时间为O(lgn),譬如数组{1, 2, 3, 4, 5, 6, 7, 8, 9},查找元素6...
文章
thinkgamer.cn
2015-07-29
474浏览量
京东2018秋招笔试编程题集合
1.括号匹配方案
合法的括号匹配序列被定义为:
空串""是合法的括号序列
如果"X"和"Y"是合法的序列,那么"XY"也是一个合法的括号序列
如果"X"是一个合法的序列,那么"(X)"也是一个合法的括号序列
每个合法的括号序列都可以由上面的规则生成
例如"", "()", "()()()", ...
文章
shijiacheng
2018-05-20
726浏览量
Java虚拟机知识点-class文件
Class文件是一组以8位字节为基础单位的二进制流,各个数据项目严格按照顺序紧凑排列在Class文件中,中间没有添加任何分隔符,这使得整个Class文件中存储的内容几乎全部是程序运行的必要数据,没有空隙。当遇到需要占用8位字节以上的数据项时,会按照高位在前的方式分割成若干个8位字节进行存储。
Cl...
文章
小周学java
2019-07-28
409浏览量
【开发者笔记】归并排序过程呈现之java内置GUI表示
在网上看到一个视频将各种排序用视频表示出来,配上音乐,挺好玩的样子,就算是不会编程的人看到也会觉得很舒服,碰巧我也正在写归并算法,于是就用java的GUI实现一个。
归并排序的时间复杂度是T(n)=O(nlgn),据说是比较排序的时间复杂度下限,缺点是排序算法和合并算法并不在同一空间,使得...
文章
stagebo
2016-10-12
20696浏览量
Java版本号处理-split 点号 split(".")
近期在做一个版本号的判断,在使用 Java split() 方法时,希望把版本号中的数字组成数组。很自然的,我用了 split(".") 来分割成数组,结果不行。
String v = "1.0.1";
String[] vs = v.split(".");
int len = vs.lengt...
文章
waylau
2016-05-18
3335浏览量
java面试题汇总一(会持续更新)
不积跬步无以至千里,这里会不断收集和更新Java基础相关的面试题,目前已收集100题。
1.什么是B/S架构?什么是C/S架构
B/S(Browser/Server),浏览器/服务器程序
C/S(Client/Server),客户端/服务端,桌面应用程序
## 2.你所知道网络协议有那些?
...
文章
游客nrc2le266zfzs
2020-04-17
362浏览量
阿里面试
阿里面试主要问的是一些原理性的东西,比如HashMap实现原理,线程间通讯,线程间数据共享,android对java在哪些方法上 有优化,android的异步任务是怎么实现的等等,接下来我们一一讲解。
1,HashMap实现原理,HashMap是不是有序的,如果不是,那么有没有实现Map的子类?...
文章
code_xzh
2016-04-06
1142浏览量
Java正则表达式初学者指南
本文将介绍如何在Java中使用正则表达式来处理文本数据。正则表达式就是一个字符串,但和普通的字符串不同的是,正则表达式是对一组相似字符串的抽象,如下面的几个字符串: a98b c0912d c10b a12345678d ab 我们仔细分析上面五个字符串,可以看出它们有一个...
文章
技术小胖子
2017-11-09
706浏览量
Java正则表达式初学者指南
本文为原创,如需转载,请注明作者和出处,谢谢!
本文将介绍如何在Java中使用正则表达式来处理文本数据。正则表达式就是一个字符串,但和普通的字符串不同的是,正则表达式是对一组相似字符串的抽象,如下面的几个字符串:
a98b c0912d c10b a12345678d a...
文章
geekori
2008-05-10
706浏览量
Java的泛型是类型擦除的
泛型可以减少强制类型的转换,可规范集合的元素类型,还可以提高代码的安全性和可读性,正是因为有了这些优点,自从Java引入泛型之后,项目的编码规则上便多了一条,优先使用泛型.
Java泛型(Generic)的引入加强了参数类型的安全性,减少了类型的转换,它与C++中的模板templates比较类似....
文章
范大脚脚
2017-11-22
1194浏览量
-
遥感图像语义分割——从原始图像开始制作自己的数据集(以高分二号为例)
2021-08-11 21:52:12遥感图像语义分割——从原始图像开始制作自己的数据集(以高分二号为例) 文章目录遥感图像语义分割——从原始图像开始制作自己的数据集(以高分二号为例)1.遥感影像获取2.遥感数据预处理(影像融合)3.遥感影像批量...遥感图像语义分割——从原始图像开始制作自己的数据集(以高分二号为例)
文章目录
这篇文章分享一下遥感影像语义分割数据集的制作。从原始图像开始,经过影像融合等一系列步骤,生成自己的原图+标签形式的数据集。
1.遥感影像获取
本文中数据下载自中中国资源卫星应用中心(本文的高分数据不共享),网站内含有付费和部分免费的数据共大家下载,具有高分系列卫星、资源系列卫星等遥感影像数据。
2.遥感数据预处理(影像融合)
以高分系列为例,影像数据压缩包内有高分辨率影像和多光谱影像。可以融合形成高分辨率多光谱的影像。具有较高的空间分辨率也具有多光谱的特征。利用ENVI进行图像融合的方法如下所示:
融合方法 适用范围 IHS 变换 纹理改善,空间保持较好。光谱信息损失较大大,受波段限制。 Brovey 变换 光谱信息保持较好,受波段限制。 乘积运算 对大的地貌类型效果好,同时可用于多光谱与高光谱的融合。 PCA 变换 无波段限制,光谱保持好。第一主成分信息高度集中,色调发生较大变化。 GS 改进了 PCA 中信息过分集中的问题,不受波段限制,较好的保持空间纹理信息,尤其能高保真保持光谱特征。专为最新高空间分辨率影像设计,能较好保持影像的纹理和光谱信息。 具体方法:
- 在ENVI的Toolbox中打开Image Sharpening/Gram-Schmidt Pan Sharpening,选择自己的高分辨率影像和低分辨率影像(多光谱),单击OK。
- 在 Pan Sharpening Parameters 面板中,选择传感器类型(Sensor):Unknown,重采样方法(Resampling):Cubic Convolution,以及输出格式。
3.遥感影像批量裁剪
在制作遥感影像数据集中,必不可少的就是遥感影像的批量裁剪到统一的尺寸。本文中的方法是从栅格影像(tif格式)的裁剪具体代码如下:
import gdal import os def read_img(filename): dataset = gdal.Open(filename) # 打开文件 im_width = dataset.RasterXSize # 栅格矩阵的列数 im_height = dataset.RasterYSize # 栅格矩阵的行数 im_geotrans = dataset.GetGeoTransform() # 仿射矩阵 im_proj = dataset.GetProjection() # 地图投影信息 im_data = dataset.ReadAsArray(0, 0, im_width, im_height) # 将数据写成数组,对应栅格矩阵 del dataset return im_proj, im_geotrans, im_data def write_img(filename, im_geotrans, im_data): # gdal数据类型包括 # gdal.GDT_Byte, # gdal .GDT_UInt16, gdal.GDT_Int16, gdal.GDT_UInt32, gdal.GDT_Int32, # gdal.GDT_Float32, gdal.GDT_Float64 # 判断栅格数据的数据类型 if 'int8' in im_data.dtype.name: datatype = gdal.GDT_Byte elif 'int16' in im_data.dtype.name: datatype = gdal.GDT_UInt16 else: datatype = gdal.GDT_Float32 # 判读数组维数 if len(im_data.shape) == 3: im_bands, im_height, im_width = im_data.shape else: im_bands, (im_height, im_width) = 1, im_data.shape # 创建文件 driver = gdal.GetDriverByName("GTiff") # 数据类型必须有,因为要计算需要多大内存空间 dataset = driver.Create(filename, im_width, im_height, im_bands, datatype) dataset.SetGeoTransform(im_geotrans) # 写入仿射变换参数 if im_bands == 1: dataset.GetRasterBand(1).WriteArray(im_data) # 写入数组数据 else: for i in range(im_bands): dataset.GetRasterBand(i + 1).WriteArray(im_data[i]) del dataset # 有两个文件夹bj-5 bj-dx # 每个文件夹下有4副影像 # 遍历每个影像 # 按需修改 area_list = ['bj-5','bj-dx'] index_list = ['01','02','03','04'] for m in area_list: for k in index_list: #图片的路径 p = "/home/kun/tif/" + m + "/" + k +".tif" #读取图片 im_proj,im_geotrans,im_data = read_img(p) #获取图片的宽、高、通道 channel,width,height = im_data.shape for i in range(width//451): #451修改为自己需要的宽 for j in range(height//451): #451修改为自己需要的高 cur_img = im_data[:,i*451:(i+1)*451,j*451:(j+1)*451] #保存图片的命名格式(可以自己修改 write_img('/home/kun/cup-end/{}/{}_{}_{}.tif'.format(m,k,i,j), im_geotrans, cur_img)
4.栅格格式影像转JPG格式
裁剪完的影像格式仍为栅格格式,语义分割需要的是JPG格式的图像。具体的转换代码如下:
import numpy as np import os from PIL import Image from osgeo import gdal def readTif(imgPath, bandsOrder=[3, 2, 1]): """ 读取GEO tif影像的前三个波段值,并按照R.G.B顺序存储到形状为【原长*原宽*3】的数组中 :param imgPath: 图像存储全路径 :param bandsOrder: RGB对应的波段顺序,如高分二号多光谱包含蓝,绿,红,近红外四个波段,RGB对应的波段为3,2,1 :return: R.G.B三维数组 """ dataset = gdal.Open(imgPath, gdal.GA_ReadOnly) cols = dataset.RasterXSize rows = dataset.RasterYSize data = np.empty([rows, cols, 3], dtype=float) for i in range(3): band = dataset.GetRasterBand(bandsOrder[i]) oneband_data = band.ReadAsArray() data[:, :, i] = oneband_data return data def stretchImg(imgPath, resultPath, lower_percent=0.5, higher_percent=99.5): """ #将光谱DN值映射至0-255,并保存 :param imgPath: 需要转换的tif影像路径(***.tif) :param resultPath: 转换后的文件存储路径(***.jpg) :param lower_percent: 低值拉伸比率 :param higher_percent: 高值拉伸比率 :return: 无返回参数,直接输出图片 """ RGB_Array = readTif(imgPath) band_Num = RGB_Array.shape[2] JPG_Array = np.zeros_like(RGB_Array, dtype=np.uint8) for i in range(band_Num): minValue = 0 maxValue = 255 # 获取数组RGB_Array某个百分比分位上的值 low_value = np.percentile(RGB_Array[:, :, i], lower_percent) high_value = np.percentile(RGB_Array[:, :, i], higher_percent) temp_value = minValue + (RGB_Array[:, :, i] - low_value) * (maxValue - minValue) / (high_value - low_value) temp_value[temp_value < minValue] = minValue temp_value[temp_value > maxValue] = maxValue JPG_Array[:, :, i] = temp_value outputImg = Image.fromarray(np.uint8(JPG_Array)) outputImg.save(resultPath) def Batch_Convert_tif_to_jpg(imgdir, savedir): # 获取文件夹下所有tif文件名称,并存入列表 file_name_list = os.listdir(imgdir) for name in file_name_list: # 获取图片文件全路径 img_path = os.path.join(imgdir, name) # 获取文件名,不包含扩展名 filename = os.path.splitext(name)[0] savefilename = filename + ".jpg" # 文件存储全路径 savepath = os.path.join(savedir, savefilename) stretchImg(img_path, savepath) print("图片:【", filename, "】完成转换") print("完成所有图片转换!") # 主函数,首先调用 if __name__ == '__main__': area_list = ['bj-5','bj-dx','pds-and-jn'] for i in area_list: imgdir = r"/home/kun/cup-end/" + i # tif文件所在的【文件夹】 savedir = r"/home/kun/cup-end-jpg/" + i # 转为jpg后存储的【文件夹】 Batch_Convert_tif_to_jpg(imgdir, savedir)
5.用labelme制作图像标签
众所周知,应用很广泛的一所标注工具叫做labelme,接下来介绍labelme环境搭建以及labelme的使用。
首先需要安装并配置好anaconda。打开anaconda prompt(Anaconda命令行)。输入以下指令:
conda create -n labelme python=3.6
待创建完成后,激活labelme环境
conda activate labelme
安装labelme环境
pip install labelme
安装完成后,在labelme环境下输入
labelme
即可打开labelme标注工具。具体的标注、json格式文件的转换等操作参考:labelme使用教程。
6.制作txt文档(统计训练集、验证集的图片名)
批量修改图片的文件名
具体修改代码如下:
import os import re import sys # 图片的路径 file_list = os.listdir('/home/qun/json_jpg') #用于命名 k=0 currentpath = os.getcwd() os.chdir('/home/qun/json_jpg') for i in range(0,len(file_list)): if(file_list[i][-4:] == 'json'): last_name = file_list[i] # 千张图片%04 万张图片%05.... os.rename(file_list[i],str(("%04d" % (i))) + '.json') for k in range(0,len(file_list)): if ((file_list[k][-3:] == 'jpg') & (file_list[k][0:-4] == last_name[0:-5])): os.rename(file_list[k],str(("%04d" % (i))) + '.jpg') print(file_list[k] + 'finsh') print(file_list[i]+ 'finsh') os.chdir(currentpath) sys.stdin.flush()
读取文件名到txt文档
import os # 图片的路径 file_path = '/home/qun/torch-deeplabv3/pytorch-deeplab-xception-master/Waste2021/JPEGImages' list = os.listdir(file_path) path_name = [] for i in list: path_name.append(i.split('.')[0]) for j in range(0,len(path_name)): # txt文档的路径 with open('/home/qun/torch-deeplabv3/pytorch-deeplab-xception-master/Waste2021/ImageSets/Segmentation/trainval.txt','a') as f: f.write(path_name[j] + '\n') print(path_name[j]) f.close()
到此为止,制作数据集大概步骤以及相关的python代码已经展示完毕。希望对大家有帮助
-
Python逐行读取txt文本,按符合分割词并逐行写入txt
2020-11-21 00:04:36背景Background:我的txt文件里面存放的是搜索词,由于原始的query(搜索词)都是用/或者、来分割词,而我要达到的是每个词语是单独的一行,并且写入txt第一步:按行读取txt文件s = []f = open('querylist.txt','r') ... -
python 字符串基础操作,截取部分,替换部分,分割成字符串列表,整数浮点数字符串相互转换
2022-03-21 22:41:33python 字符串基础操作,截取部分,替换部分,分割成字符串列表,整数浮点数字符串相互转换 -
语义分割工具EISeg
2021-11-18 11:31:57另外,将EISeg获取到的标注应用到PaddleSeg提供的其他分割模型进行训练,便可得到定制化场景的高精度模型,打通分割任务从数据标注到模型训练及预测的全流程。 模型准备 在使用EIseg前,请先下载模型参数。EISeg ... -
初步认识Python中的列表与位运算符
2021-01-20 04:32:35列表中的值得分割也可以用到变量[头下标:尾下标],就可以截取相应的列表,从左到右索引默认0开始的,从右到左索引默认-1开始,下标可以为空表示取到头或尾。 加号(+)是列表连接运算符,星号(*)是重复操作。如下... -
511遇见易语言分割文本
2020-06-28 09:16:39分割文本是常用的一个文本操作命令,具体到我们游戏实战中,比如分割一些账号,密码,那么这个...列表框1.清空 () 返回文本数组 = 分割文本 (编辑框1.内容, “0”, ) 调试输出 (返回文本数组) .计次循环首 (取数组成 -
大漠单线程多账号循环登录读取账号到超级列表框
2020-06-02 09:10:24本节讲解把文本中的账号读取到超级列表框,当然账号也可以存储在数据库文件,当我们的账号数据结构相对简单,文本或者,ini文件都可以,至于账号和密码的格式分割随便定义。 文本账号格式: abcde-1|111111 abcde-... -
OPENCV(五) 对给定的车牌进行字符分割
2020-12-07 18:30:43下面有这样的一个车牌号: 现在的任务是将每一个字符区分开来,并方框圈出来。 完成这个功能需要以下的步骤: 1.灰度处理 #读取图片 image1 = cv2.imread('../img/car1.png') #灰度处理 gray = cv2.cvtColor(image1... -
python读取TXT文档,每一行为一个列表,以空格分割
2019-09-19 08:36:50python读取TXT文档,每一行为一个列表,以空格分割 需求:对于网站电话本设计,根据每个部门每个人员,将电话号码编辑成如下图TXT文档,读取每个人的手机、办公电话,并传送到前端HTML页面。 上代码 # ... -
语义分割之 数据标注
2020-07-11 09:08:53语义分割之数据标注, 如何安装 Labelme, 标注图形和多类别标注 -
大漠多账号循环登录任务自动切换模板读取账号到超级列表框
2020-06-03 09:11:51因为时多线程,我们需要开启固定的几个窗口,每次读取一部分账号,分批实现,读取游戏账号到超级列表框,这里我们把游戏账号分组写到文本文件里,读取时要进行二次分割,比单线程读取复杂一点。下面是账号格式: ... -
python 分割列表的几种方法
2013-05-02 16:52:331。 zip(*(iter(range(10)),) * 3) 或者 ...izip_longest(*(iter(range(10)),) * 3) 两者的区别为,izip_longest会将最后一组不满足分组的放置在...[l[i:i+n] for i in range(0, len(l), n)]# 按照N为个数分割列表 -
遥感影像语义分割数据集
2021-03-20 23:15:14遥感图像语义分割数据集 文章目录遥感图像语义分割数据集1.建筑1.1 Aerial Image Segmentation Dataset1.2 INRIA aerial image dataset1.3 WHU Building Dataset1.4 Massachusetts Buildings Dataset1.5 2020数字... -
CVPR2020最新实例分割论文
2020-10-31 08:32:00向AI转型的程序员都关注了这个号????????????机器学习AI算法工程 公众号:datayx研究概况CVPR 2020共有18篇实例分割论文(9篇开源代码):1篇Oral(De... -
Python如何将一个列表拆分,将多个数据作为一个元素存放到元组中
2021-07-21 09:17:09包含IP地址、端口号、用户名和密码,获取文件信息的时候,是将所有的每一个字段作为一个元素存放到了列表中,使用过程中需要将每组服务器信息(ip、端口号、用户名、密码)作为一个元素使用,如何将列表中的元素按照... -
Unet实现眼底图像血管分割(三)
2019-09-26 10:30:31schedule:函数,该函数以epoch号为参数(从0算起的整数),返回一个新学习率(浮点数) def step_decay ( epoch ) : lrate = 0.01 #the initial learning rate (by default in keras) if epoch ==... -
Python split()方法详解:分割字符串
2020-11-20 23:03:06Python 中,除了可以使用一些内建函数获取字符串的相关信息外(例如 len() 函数获取字符串长度),...从本节开始,将给大家介绍一些常用的字符串类型方法,本节先介绍分割字符串的split() 方法。split() 方法可以实... -
(自己编写函数)Python + Opencv 图像分割(全局分割_动态分割_区域生长)
2019-05-29 10:47:34(2)、动态阈值,将原灰度图片,按照几等分的切割规律,将每一个小方格里的像素取出来,存到一个列表里,之后在进行取出,参照规律。然后按照阈值来进行二值化 #分割成为多块区域 def divide ( gray , m , n ... -
字符串按位数分割
2020-12-02 16:07:51# 以分割银行卡账号为例,每四位以空格分割def SplitString(numberstring, num=4, sign=' '):# 经常传入的数据转化为字符串numstring = str(numberstring)# 获取传入的截取长度个符号,开始的下标与结束下标... -
字符串按位数分割,
2020-11-24 08:16:29字符串按位数分割,# 以分割银行卡账号为例,每四位以空格分割def SplitString(numberstring, num=4, sign=' '):# 经常传入的数据转化为字符串numstring = str(numberstring)# 获取传入的截取长度个符号,开始的下标... -
OpenCV+Python实现将车牌数字分割为单个的字符图片
2021-12-03 19:30:42n = end # 确保找到的是符合要求的,过小不是车牌号 if end - start > 10: # 分割 char = gray_1[1:height, start - 5:end + 5] # 保存分割结果到文件 cv2.imwrite(output_path+'/' + str(num) + '.jpg',char) num+=1... -
关于python:如何将字符串拆分为列表?
2020-11-28 10:59:46我希望我的python函数分割一个句子(输入)并将每个单词存储在一个列表中。我当前的代码将句子拆分,但不将单词存储为列表。我该怎么做?12345678910def split_line(text):# split the textwords = text.split()# for ... -
python中怎么把字符串变成列表
2020-11-30 13:24:26python中怎么把字符串变成列表 -
SQL字符串分割多行
2022-01-13 16:11:49按分号将字符串分割为多行,填充下拉列表 SQL实现脚本 SELECT b.T FROM( SELECT CONVERT(XML,'<n>'+REPLACE(REPLACE('HY-107860;HY-107871;HY-109816;HY-109824;HY-109826;HY-113868;HY-2169',';',. -
Paddle飞桨动态图教程——轻量级人像语义分割BiSeNet V2(算法原理、训练、部署,含完整代码和数据)
2021-02-02 07:59:343.2.1 数据集介绍 3.2.2 标签掩码图转换 3.2.3生成训练、验证列表文件 3.3 训练 四、推理部署 4.1 Python脚本推理 4.1.1 单样本测试 4.1.2 基于视频的实时背景替换 4.2基于Django的线上Web部署 4.2.1 简单部署 ... -
自己制作语义分割语义分割数据集
2018-05-30 16:42:48制作语义分割数据集大致需要(1)使用labelme对数据进行标注,生成对应图片的json格式。(2)执行label下的labelme_json_to_dataset.py文件,生成图片对应文件夹。(3)通过第二步生成的文件夹,生成语义图片。(4)... -
量化投资常用技能——绘图篇3:绘制黄金分割线
2020-12-01 11:44:39量化投资常用技能——绘图篇3前言黄金分割线视觉上的0.382和视觉上的0.618统计上的0.382和统计上的0.618划定黄金分割线分割的范围绘制黄金分割线欢迎大家关注我们我们的抖音号:金融观察(JRGC8888) 前言 之前的...