【导语】“FullmoonRise”通过精心收集,向本站投稿了8篇Python3字符串学习教程,下面小编给大家整理后的Python3字符串学习教程,希望大家喜欢!
- 目录
篇1:Python3字符串学习教程
作者:一线涯 字体:[增加 减小] 类型:转载 时间:2015-08-20
这篇文章主要介绍了Python3字符串学习教程,是Python入门学习中的基础知识,需要的朋友可以参考下
字符串类型是python里面最常见的类型,是不可变类型,支持单引号、双引号、三引号,三引号是一对连续的单引号或者双引号,允许一个字符串跨多行,
字符串连接:前面提到的+操作符可用于字符串连接,还可以直接把几个字符串连在一起写,另外调用join方法也可以连接字符串。
只适用于字符串连接的操作符:前面提到了一些序列类型共用的操作符,除此之外,字符串还有只属于自己的操作符,包括格式控制操作符%、字符串模板string.Template、原始字符串操作符r/R、Unicode字符串操作符u/U。
下面列举一些与字符串类型有关的模块。
string:字符串操作相关函数和工具,比如Template类。
re:正则表达式,强大的字符串模式匹配模块。
struct:字符串和二进制之间的切换。
c/StringIO:字符串缓冲对象,操作方法类似于file对象。
base64:Base16,32,64数据编解码。
codecs:解码器注册和基类。
crypt:进行单方面加密。
difflib:找出序列间的不同。
hashlib:多种不同安全哈系算法和信息摘要算法的API,python2.5废除。
hma:HMAC信息鉴权算法的python实现。
md5:RSA的MD5信息摘要鉴权。
rotor:提供多平台的加解密服务。
sha:NIAT的安全哈系算法SHA。
stringprep:提供用于IP协议的Unicode字符串。
textwrap:文本打包和填充。
unicodedata:Unicode数据库。
Python 3 的源码的默认编码方式为 UTF-8
在Python 3,所有的字符串都是使用Unicode编码的字符序列。
utf-8 是一种将字符编码成字节序列的方式。字节即字节,并非字符。字符在计算机内只是一种抽象。字符串则是一种抽象的序列。在这里我们只讨论字符串,不讨论字节。
在Python 中,字符串可以用单引号括起来,也可以用双引号,甚至是三引号。
但如果字符串中含有单引号,你应该用双引号来括,或者用转义符加单引号括起来。含有双引号的同理。
三引号的字符串可以换行!
>>>‘Let‘s go!‘ SyntaxError: invalid syntax >>>“Let‘s go!” “Let‘s go!” >>>‘Let\\‘s go!‘ “Let‘s go!” >>>‘‘‘‘‘begin and next end‘‘‘ ‘begin\\nand\\nnext\\nend‘
字符串是不可修改的,这点很重要!你可以把它想象为字符组成的元组。
>>>s = “HelloWorld” >>>s[0] = ‘h‘ Traceback (most recent call last): File “
”, line 1, in 如果你想修改它,可以先转换成列表,修改完成后再转为字符串。 >>>s ‘HelloWorld‘ >>>L = list(s) >>>L [‘H‘, ‘e‘, ‘l‘, ‘l‘, ‘o‘, ‘W‘, ‘o‘, ‘r‘, ‘l‘, ‘d‘] >>>L[0] = ‘h‘ >>>‘‘.join(L) #这是什么?别着急,下面我们会谈到 ‘helloWorld‘ 字符串可以进行直接拼接,但如果是两个变量代表的字符串,你还是用 + 号吧 >>>s = “Hello”“World” >>>s ‘HelloWorld‘ >>>s1 = “Hello” >>>s2 = “World” >>>s1s2 Traceback (most recent call last): File “ ”, line 1, in 字符串操作和方法: len(s) 返回字符串长度 x in s 查询 x 是否在 s 中 >>>s = “HelloWorld” >>>len(s) 10 >>>“ll” in s True s.find( x ) 在字符串 s 中找子串 x ,找到则返回最左端的索引,找不到则返回-1 >>>s ‘HelloWorld‘ >>>s.find(“l”) 2 >>>s.find(‘w‘) -1 s.splitlines() 将多行字符串分割成多个单行字符串组成的列表,换行符被吸收 >>>s = ‘‘‘‘‘begin ...then.. ...next.. end...‘‘‘ >>>s.splitlines() [‘begin‘, ‘...then..‘, ‘...next..‘, ‘end...‘] s.split( x ) 以 x 作为分隔符将 s 分割成一个字符串列表,如果不提供x,则程序会自动将所有空格和换行作为分隔符分割 >>>s = “here#there” >>>s.split(‘#‘) # #作为分隔符 [‘here‘, ‘there‘] >>>s = ‘‘‘‘‘begin .then.. and .next. end‘‘‘ >>>s.split() #默认情况将所有换行和空格都分割 [‘begin‘, ‘.then..‘, ‘and‘, ‘.next.‘, ‘end‘] s.lower() 返回s 的小写形式的字符串 s.upper() 返回 s 的大写形式的字符串 >>>s = ‘HelloWorld‘ >>>s.lower() ‘helloworld‘ >>>s.upper() ‘HELLOWORLD‘ s.join( seq ) split 的逆方法,将序列 seq 用 s 连接起来,必须是字符串序列 >>>L = [‘1‘,‘33‘,‘42‘] >>>‘+‘.join(L) #用+来连接 ‘1+33+42‘ >>>L = list(s) #拆开s >>>L [‘H‘, ‘e‘, ‘l‘, ‘l‘, ‘o‘, ‘W‘, ‘o‘, ‘r‘, ‘l‘, ‘d‘] >>>‘‘.join(L) #粘合了,。。 ‘HelloWorld‘ s.replace( x, y) 将 s 中所有匹配 x 的项用 y 代替,如果找不到,那就直接返回 s 咯 >>>s ‘HelloWorld‘ >>>s.replace(“World”,“Cheng”) ‘HelloCheng‘ >>>s.replace(“world”,“Cheng”) #知道为什么吧... ‘HelloWorld‘ s.strip( x ) 如果不提供 x,那么返回去除了首尾两侧空格的字符串,如果提供了字符串 x,那么将去除s首尾所有在 x 中的字符并返回 >>>s = “ Hi,I‘m Alice! ” >>>s.strip() “Hi,I‘m Alice!” >>>s.strip(“! ”) #这是两个字符哦 “Hi,I‘m Alice” #少了一个感叹号哦! 再次注意:以上方法都没有改变原字符串,字符串是不可改变的! 以下简单看看: s.starstwith( x ) 测试 s 是否以 x 开头 s.endswith( x ) 测试 s 是否以 x 结尾 s.isalnum() 测试 s 是否全是字母和数字,并至少有一个字符 s.isalpha() 测试 s 是否全是字母,并至少有一个字符 s.isdigit() 测试 s 是否全是数字,并至少有一个字符 s.isspace() 测试 s 是否全是空白字符,并至少有一个字符 s.islower() 测试 s 中的字母是否全是小写 s.isupper() 测试 s 中的字母是否便是大写 s.istitle() 测试 s 是否是首字母大写的 让我们重点关注一个强大的格式化方法 format ,看下面代码 >>>name = ‘Jonh‘ >>>call = ‘13560300xxx‘ >>>“{0}‘s telephone number is {1}”.format(name,call) # (1) “Jonh‘s telephone number is 13560300xxx” >>>addr = “A103” >>>“{0}‘s telephone number is {1} and his address is {2}”.format(name,call,addr) #(2) “Jonh‘s telephone number is 13560300xxx and his address is A103” (1)句中,字符串中 {0} 被 format 的第一个参数代替,{1} 被第二个参数代替。两个参数不够?事实上,你可以给予它任意多个参数,然后用相同个数的替换字段进行替换。什么是替换字段?{0},{1}就叫做替换字段。我们在第(2)句中使用了3个替换字段,{0}对应name, {1}对应call,{2}对应addr。再多的参数也类似于刚才的做法。 那么,仅仅是这样?当然不是!让我们继续看 >>>L = [2,3,5,7] >>>print(“x is {0[0]}, y is {0[2]}”.format(L)) x is 2, y is 5 {0[0]} 表示L[0],{0[2]} 表示L[2],它们叫做复合字段名,你可以: (1)使用列表作为参数,并且通过下标索引来访问其元素(跟上一例类似) (2)使用字典作为参数,并且通过键来访问其值 >>>d {‘b‘: 2, ‘a‘: 1} >>>print(“x is {0[a]}, y is {0[b]}”.format(d)) x is 1, y is 2 >>>d = {2:3.5,7:4.5} >>>print(“x is {0[2]}, y is {0[7]}”.format(d)) x is 3.5, y is 4.5 d 为字典,a 、b为键,{0[a]} 对应到了值2(注意:是a,b,不是‘a‘, ‘b‘) (3)使用模块作为参数,并且通过名字来访问其变量及函数 >>>print(“{0.random}”.format(random)) (4)使用类的实例作为参数,并且通过名字来访问其方法和属性 >>>class A: pass >>>x = A() >>>print(“The class is {0.__class__}”.format(x)) The class is (5)以上方法的任意组合 替换字段除了整数,你还可以使用参数名字 >>>print(“{name}‘s telephone number is {call}”.format(name = “Jonh”,call = 69993)) Jonh‘s telephone number is 69993 在替换域中,你还可以使用格式说明符。冒号 : 标示格式说明符的开始。 >>>pi = 3.141592653 >>>print(“The pi is {0:10.3f}”.format(pi)) # 0:10.3f 表示输出宽度为10,保留三位小数,浮点数 The pi is 3.142 统计|字符串 在数据库表tbl1中有一个字段Keywords,它是nvarchar类型,长度为1000,该字段的内容是所要分析的论文的关键字id keywords -----------------------------------------------------------1 kw1;kw2;kw32 kw2;kw33 kw3;kw1;kw4 问题1,对于在keywords字段中出现的所有关键字集合(上例中关键字集合为{kw1,kw2,kw3,kw4})中的任意一个关键字,要统计它出现的次数(也就是包含该关键字的纪录的条数),然后写到另一张表中。最后的效果就是keywords count-------------------------kw1 2kw2 2kw3 3kw4 1 问题2。在此基础上,要进行组合查询。也就是说在整个关键字集合中任意抽出两个关键字,统计它们在数据库表纪录中同时出现的次数。对于上题,最后效果要是:keywords count----------------------------------kw1;kw2 1kw1;kw3 2kw1;kw4 1kw2;kw3 2kw2;kw4 0kw3;kw4 1 -------------------------------------------------------------------------------------- --统计示例 --为统计处理专门做的序数表select top 1000 id=identity(int,1,1) into 序数表 from syscolumns a,syscolumns balter table 序数表 add constraint pk_id_序数表 primary key(id)go --示例数据create table tbl1(id int,keywords nvarchar(1000))insert tbl1 select 1,'kw1;kw2;kw3'union all select 2,'kw2;kw3'union all select 3,'kw3;kw1;kw4'go --第一种统计(计数)select keyword=substring(a.keywords,b.id,charindex(';',a.keywords+';',b.id)-b.id) ,[count]=count(distinct a.id)from tbl1 a,序数表 bwhere b.id<=len(a.keywords) and substring(';'+a.keywords,b.id,1)=';'group by substring(a.keywords,b.id,charindex(';',a.keywords+';',b.id)-b.id)go --第二种统计(组合统计)select keyword=substring(a.keywords,b.id,charindex(';',a.keywords+';',b.id)-b.id) ,[count]=count(distinct a.id),a.idinto #tfrom tbl1 a,序数表 bwhere b.id<=len(a.keywords) and substring(';'+a.keywords,b.id,1)=';'group by substring(a.keywords,b.id,charindex(';',a.keywords+';',b.id)-b.id),a.id select keyword=a.keyword+';'+b.keyword,[count]=sum(case a.id when b.id then 1 else 0 end)from #t a,#t bwhere a.keyword drop table #tgo --删除测试环境drop table tbl1,序数表 /*--测试结果 --统计1keyword count ---------- --------kw1 2kw2 2kw3 3kw4 1 (所影响的行数为 4 行) --统计2keyword count ----------------------- -----------kw1;kw2 1kw1;kw3 2kw1;kw4 1kw2;kw3 2kw2;kw4 0kw3;kw4 1 (所影响的行数为 6 行)--*/ 这篇文章主要介绍了Lua教程(十四):字符串库详解,本文讲解了基础字符串函数、模式匹配函数、模式、捕获(capture):、替换等内容,需要的朋友可以参考下 1. 基础字符串函数: 字符串库中有一些函数非常简单,如: 1). string.len(s) 返回字符串s的长度; 2). string.rep(s,n) 返回字符串s重复n次的结果; 3). string.lower(s) 返回s的副本,其中所有的大写都被转换为了小写形式,其他字符不变; 4). string.upper(s) 和lower相反,将小写转换为大写; 5). string.sub(s,i,j) 提取字符串s的第i个到第j个字符,Lua中,第一个字符的索引值为1,最后一个为-1,以此类推,如: print(string.sub(“[hello world]”,2,-2)) --输出hello world 6). string.format(s,...) 返回格式化后的字符串,其格式化规则等同于C语言中printf函数,如: print(string.format(“pi = %.4f”,math.pi)) --输出pi = 3.1416 7). string.char(...) 参数为0到多个整数,并将每个整数转换为对应的字符。然后返回一个由这些字符连接而成的字符串,如: print(string.char(97,98,99)) --输出abc 8). string.byte(s,i) 返回字符串s的第i个字符的Ascii值,如果没有第二个参数,缺省返回第一个字符的Ascii值。 代码如下: print(string.byte(“abc”)) --输出97 print(string.byte(“abc”,-1)) --输出99 由于字符串类型的变量都是不可变类型的变量,因此在所有和string相关的函数中,都无法改变参数中的字符串值,而是生成一个新值返回。 2. 模式匹配函数: Lua的字符串库提供了一组强大的模式匹配函数,如find、match、gsub和gmatch。 1). string.find函数: 在目标字符串中搜索一个模式,如果找到,则返回匹配的起始索引和结束索引,否则返回nil。如: 代码如下: s = “hello world” i, j = string.find(s,“hello”) print(i, j) --输出1 5 i, j = string.find(s,“l”) print(i, j) --输出3 3 print(string.find(s,“lll”)) --输出nil string.find函数还有一个可选参数,它是一个索引,用于告诉函数从目标字符串的哪个位置开始搜索。主要用于搜索目标字符串中所有匹配的子字符串,且每次搜索都从上一次找到的位置开始。如: 代码如下: local t = {} local i = 0 while true do i = string.find(s,“\\n”,i+1) if i == nil then break end t[#t + 1] = i end 2). string.match函数: 该函数返回目标字符串中和模式字符串匹配的部分。如: 代码如下: date = “Today is 2012-01-01” d = string.match(date,“%d+\\-%d+\\-%d+”) print(d) --输出2012-01-01 3). string.gsub函数: 该函数有3个参数,目标字符串、模式和替换字符串。基本用法是将目标字符串中所有出现模式的地方替换为替换字符串。如: 代码如下: print(string.gsub(“Lua is cute”,“cute”,“great”)) --输出Lua is great 该函数还有可选的第4个参数,即实际替换的次数。 代码如下: print(string.gsub(“all lii”,“l”,“x”,1)) --输出axl lii print(string.gsub(“all lii”,“l”,“x”,2)) --输出axx lii 函数string.gsub还有另一个结果,即实际替换的次数。 count = select(2, string.gsub(str,“ ”,“ ”)) --输出str中空格的数量 4). string.gmatch函数: 返回一个函数,通过这个返回的函数可以遍历到一个字符串中所有出现指定模式的地方, 如: 代码如下: words = {} s = “hello world” for w in string.gmatch(s,“%a+”) do print(w) words[#words + 1] = w end --输出结果为: --hello --world 3. 模式: 下面的列表给出了Lua目前支持的模式元字符; 这些元字符的大写形式表示它们的补集,如%A,表示所有非字母字符。 代码如下: print(string.gsub(“hello, up-down!”,“%S”,“.”)) --输出hello..up.down. 4 上例中的4表示替换的次数。 除了上述元字符之外,Lua还提供了另外几个关键字符。如:( ) . % + - * ? [ ] ^ $ 其中%表示转义字符,如%.表示点(.),%%表示百分号(%)。 方括号[]表示将不同的字符分类,即可创建出属于自己的字符分类,如[%w_]表示匹配字符、数字和下划线。 横线(-)表示连接一个范围,比如[0-9A-Z] 如果^字符在方括号内,如[^\\n],表示除\\n之外的所有字符,即表示方括号中的分类的补集。如果^不在方括号内,则表示以后面的字符开头,$和它正好相反,表示以前面的字符结束。如:^Hello%d$,匹配的字符串可能为Hello1、Hello2等。 在Lua中还提供了4种用来修饰模式中的重复部分,如:+(重复1次或多次)、*(重复0次或多次)、-(重复0次或多次)和?(出现0或1次)。如: 代码如下: print(string.gsub(“one, and two; and three”,“%a+”,“word”)) --输出word, word word; word word print(string.match(“the number 1298 is even”,“%d+”)) --输出1298 星号(*)和横线(-)的主要差别是,星号总是试图匹配更多的字符,而横线则总是试图匹配最少的字符。 4. 捕获(capture): 捕获功能可根据一个模式从目标字符串中抽出匹配于该模式的内容。在指定捕获是,应将模式中需要捕获的部分写到一对圆括号内。对于具有捕获的模式,函数string.match会将所有捕获到的值作为单独的结果返回。即它会将目标字符串切成多个捕获到的部分。如: 代码如下: pair = “name = Anna” key,value = string.match(pair,“(%a+)%s*=%s*(%a+)”) print(key,value) --输出name anna date = “Today is 2012-01-02” y,m,d = string.match(date,“(%d+)\\-(%d+)\\-(%d+)”) print(y,m,d) --输出2012 01 02 还可以对模式本身使用捕获。即%1表示第一个捕获,以此类推,%0表示整个匹配,如: 代码如下: print(string.gsub(“hello Lua”,“(.)(.)”,“%2%1”)) --将相邻的两个字符对调,输出为ehll ouLa print(string.gsub(“hello Lua!”,“%a”,“%0-%0”)) --输出为h-he-el-ll-lo-o L-Lu-ua-a! 5. 替换: string.gsub函数的第三个参数不仅可以是字符串,也可以是函数或table,如果是函数,string.gsub会在每次找到匹配时调用该函数,调用时的参数就是捕获到的内容,而该函数的返回值则作为要替换的字符串。当用一个table来调用时,string.gsub会用每次捕获到的内容作为key,在table中查找,并将对应的value作为要替换的字符串。如果table中不包含这个key,那么string.gsub不改变这个匹配。如: 代码如下: function expand(s) return (string.gsub(s,“$(%w+)”,_G)) end name = “Lua”; status = “great” print(expand(“$name is $status, isn‘t it?”)) --输出 Lua is great, isn‘t it? print(expand(“$othername is $status, isn‘t it?”)) --输出 $othername is great, isn‘t it? function expand2(s) return (string.gsub(s,“$(%w+)”,function(n) return tostring(_G[n]) end)) end print(expand2(“print = $print; a = $a”)) --输出 print = function: 002B77C0; a = nil 进程|字符串 如何跨进程发送字符串? 问题描述: 如何跨进程发送字符串? 解决方案: 参考: blog.csdn.net/wu_07/archive/2004/11/26/194814.aspx community.csdn.net/Expert/FAQ/FAQ_Index.asp?id=205761 个人: 有两种办法: 一是向目标对象发送wm_settext消息 参考: www.ttian.net/article/show.php?id=132 community.csdn.net/Expert/FAQ/FAQ_Index.asp?id=204580 www.vchelp.net/itbookreview/view_paper.asp?paper_id=1198 dev.csdn.net/article/58/58647.shtm dev.19xz.com/soft/60230.htm 二是先将要发送的内容复制到剪贴板,再向目标对象发送wm_paste消息 www.blogcup.com/read_yang119345_5312.html www.zdnet.com.cn/developer/code/story/0,2000081534,39156949,00.htm 两种方法都必须首先用FindWindowEx等函数首先枚举到目标对象的句柄,下面操作就简单了, 如何跨进程发送字符串?(收藏)数据库教程 , 1、什么是RPM包 RPM 是 Red Hat Package Manager 的缩写,本意是Red Hat 软件包管理,顾名思义是Red Hat 贡献出来的软件包管理工具;在Fedora 、Redhat、Mandriva、SuSE、YellowDog等主流发行版本,以及在这些版本基础上二次开发出来的发行版采用; RPM包里面都包含什么?里面包含可执行的二进制程序,也就是编译好的执行程序,这个程序和Windows的软件包中的.exe文件类似是可执行的;RPM包中还包括程序运行时所需要的文件,这也和Windows的软件包类似,Windows的程序的运行,除了.exe文件以外,也有其它的文件; 一个RPM 包中的应用程序,有时除了自身所带的附加文件保证其正常以外,还需要其它特定版本文件,这就是软件包的依赖关系;依赖关系并不是Linux特有的,Windows操作系统中也是同样存在的;比如我们在Windows系统中运行3D游戏,在安装的时候,他可能会提示,要安装Direct 9 ;Linux和Windows原理是差不多的; CentOS是Redhat的再编译版本,所以在CentOS下是完全兼容的,wdOS是CentOS的精简版本,也是完全兼容 2、mysql数据库迁移/备份/恢复等操作说明 mysql是一个很不错的数据库系统,可以用在win下,也可以用在linux下本文只是简单说下在Linux下的一些操作 mysql的数据库备份,可以有多种方式 1 直接打包数据库文件的目录(我比较常用,但有要求mysql版本相同或相近) 2 mysqldump 3 phpmyadmin 也还有其它的一些工具 在wdcp的后台里,是可以备份这个数据库的,但目前是没有恢复或自动恢复的,那要恢复时,怎么办? 备份目录在 /www/backup/mysql下 要恢复的话,直接解压就可以 tar zxvf dbname.tar.gz -C /www/wdlinux/mysql/var/ 这样就可以了,什么都不用操作 dbname.tar.gz为你要恢复的数据库备份文件 当然,这个是默认情况下 有些时候,还需要修改下权限,修改这个解压的目录的权限为mysql 如 chown -R mysql.mysql /www/wdlinux/mysql/var/dbname 这样修改的原因,主要是有移动过目录或上传或下载等原因,改变了原文件的权限,所以需要修改,默认备份恢复,是可以不用修改这个 同样的情况,如果迁移服务器,也可以打包上传解压,也可以直接上传整个目录到/www/wdlinux/mysql/var下 这样操作的话,一定要改权限,否则会启动不了,又或是对数据库无法写操作 操作完上面后,别忘了重起一下数据库,否则可能也不会生效,如 service mysqld restart 备注 这个直接操作数据库目录文件的方法,仅限于在使用mysql版本相同或相近时可以,否则可能会有其它一些问题 此时,可以使用mysqldump,phpmyadmin导出,再导入的方法 3、linux硬盘加载/挂载方法 相关的文章,已经有说过,Linux里,没有C,D盘这样的概念,有的只有目录,一切都是以目录为标准 最基本的也是最上层的就是根目录(/),下面可以有很多目录,根目录里可以加载成一个硬盘分区,下面的任意目录,也可以加载另一个硬盘分区,这也是Linux目录结构/硬盘管理的一个方便性 还有,Linux对硬盘的表示法,一般是 /dev/sd(x) /dev/hd(x) .... 上面的x代表a/b/c/d/e/...,这里表示第几块硬盘 然后再是分区,如 /dev/sda(x) 这里的x就是数字了,如1/2/3/4/5/...,这里表示的是第几个分区 比如说,我现在要新增加一个硬盘,接上开机进系统后 可以用fidks -l来查看,看是哪个名字 比如是/dev/sdb 假如现在分好了区并格式化了(如没有,使用fisk分区) 比如 /dev/sdb1是第一个分区 然后我要将这个加载到/home目录里,如何操作 mount /dev/sdb1 /home 执行上面这行就完了 要加入系统启动自动加载,只要加入到/etc/fstab就可以,如下 /dev/sdb1 /www ext3 defaults 1 2 这样就全部完成了 在wdcp里,默认软件安装是在/www目录里的,有的时候根目录不够了或是安装在另一个分区上,就可以将新分区加载到/www目录就可以了 根据上面说的,把/home改成/www就可以 (注意,这里是新安装,也就是在安装前是这样操作,如果已安装wdcp的,则不只是这样,具体可看wdcp的教程里说明) 4、yum是什么 Yum(全称为 Yellow dog Updater, Modified)是一个在Fedora和RedHat以及SUSE、CentOS中的Shell前端软件包管理器, 基於RPM包管理,能够从指定的服务器自动下载RPM包并且安装,可以自动处理依赖性关系,并且一次安装所有依赖的软件包,无须繁琐地一次次下载、安装。 软件包来源 可供Yum下载的软件包包括Fedora本身的软件包以及源自rpmfusion和rpm.livna.org的Fedora Extras,全部是由Linux社区维护的,并且基本是自由软件。所有的包都有一个独立的GPG签名,主要是为了您的系统安全。而对於Fedora core 4.0 的用户,rpm.livna.org 的签名是自动导入并安装的。 图形化前端 Yum的图形化前端主要有yumex和kyum。它们并不是独立於Yum的,而是Yum的图形前端,也就是说在安装和使用Yumex和kyum同时,都是以Yum的安装和配置为基础;所以在用Yumex或kyum 时,必须先安装配置Yum。 常用命令行命令 安装软件(以foo-x.x.x.rpm为例):yum install foo-x.x.x.rpm yum常用命令删除软件:yum remove foo-x.x.x.rpm或者yum erase foo-x.x.x.rpm 升级软件:yum upgrade foo或者yum update foo 查询信息:yum info foo 搜索软件(以包含foo字段为例):yum search foo 其它参数参见man yum 本文教程摘自wdlinux论坛,转载请注明! 安装php扩展模块之phpize 安装PHP的模块一个方式是加上相关参数重新编译PHP 一个是用到phpize,比如eaccelerator,memcache等,这个比较方便,不用重新编译PHP,也可以随时启用或停用 这里说下phpize的使用方法 在安装了PHP的系统里,都会有这个文件,在wdlinux的系统里,这个文件在 /www/wdlinux/php/bin/phpize 然后进到相应要编译的源码目录,再运行上述的phpize,就会生成相应的配置,再运行配置,编译就可完成 如 tar zxvf eaccelerator-0.9.6.1.tar.bz2 cd eaccelerator-0.9.6.1 /www/wdlinux/php/bin/phpize ./configure --with-php-config=/www/wdlinux/php/bin/php-config make make install 只要不出错,这样执行完后,模块也就安装完了 有一个可能需要做配置或设置 就可修改php.ini文件,如 vi /www/wdlinux/etc/php.ini linux的发行版本或分支 确切地说,Linux应该是一个内核,linux系统的内核,但现今说的Linux,通常是指一个系统,这里暂且也称为系统吧 Linux是怎么来的? 最开始是由一个芬兰 大学生写的,后来发布网络上,且是开源发布的,全世界任何人都可以下载,可以看到源代码 也因为开源,便有一些开源爱好者兴趣者参与进来开源和维护 到今天,这已经是一个很强大和成熟的系统了 上面说了,Linux是一个系统,也是一个内核,而且开源 因为开源,并且强大,更有很多的一些公司,团队参与进来,开发,完善 也因为是应用不同,或考虑的用户群不同,便出现了许多的分支和版本 我想,这其中最为强大和具影响力的,就要属Redhat,SUSE了,还有Debian,CentOS,Ubuntu,Fedora,Gentoo,Slackware,Mint等等,太多太多了 现在CentOS,Ubuntu也很多人用的 桌面版本的Ubuntu还是很不错的,服务器版的,我没怎么用过,不好评论,不过也还是有挺多人用的 我觉得CentOS更好,这个是基于Redhat的再编译版本,可能是我习惯的原因,所以喜欢,不过也同样有很多人认为CentOS是很好的 所以,我也基于CentOS做了一个精简的优化版本,是针对web服务器应用的,而且集成了目前最流行的WEB环境,以及wdcp管理系统 可以管理服务器,虚拟主机,创建网站,FTP,数据库等等 Linux的历史及分支版本,太多,这里只是简单介绍下,我个人所了解和熟悉的 在windows里,我们习惯了使用盘符,如C,D,E,F...盘等,代表每一个分区 在Linux里,是没有盘符的概念的,所有的分区或硬盘,都用目录来表示,目录和文件,代表了所有,而最顶层的一个目录,则称为根目录 在这里,还要理解一下根目录或根分区,根目录下会有相应的子目录或分区,可理解为,根目录就是windows里的“我的电脑” 同时,任一个分区,可以加载或挂载到任一个目录或子目录,这样对于一些特别的应用或需要,是可以很灵活使用的 下面列出一个Linux典型的目录结构 / 根目录 /bin 存放必要的命令 /boot 存放内核以及启动所需的文件等 /dev 存放设备文件 /etc 存放系统的配置文件 /home 用户文件的主目录,用户数据存放在其主目录中 /lib 存放必要的运行库 /mnt 存放临时的映射文件系统,我们常把软驱和光驱挂装在这里的floppy和cdrom子目录下。 /proc 存放存储进程和系统信息 /root 超级用户的主目录 /sbin 存放系统管理程序 /tmp 存放临时文件的目录 /usr 包含了一般不需要修改的应用程序,命令程序文件、程序库、手册和其它文档。 /var 包含系统产生的经常变化的文件,例如打印机、邮件、新闻等假脱机目录、日志文件、格式化后的手册页以及一些应用程序的数据文件等等 在/usr目录下的结构如 典型的/usr目录如下: /usr/X11R6 存放X window系统 /usr/bin 存放增加的用户程序 /usr/dict 存放字典 /usr/doc 存放追加的文档 /usr/etc 存放设置文件 /usr/games 存放游戏和教学文件 /usr/include 存放C开发工具的头文件 /usr/info 存放GNU信息文件 /usr/lib 存放库文件 /usr/local 存放本地产生的增加的应用程序 /usr/man 存放在线帮助文件 /usr/sbin 存放增加的管理程序 /usr/share 存放结构独立的数据 /usr/src 存放程序的源代码 linux目录结构 由于/usr中的文件不和特定的计算机相关,也不会在通常使用中修改,因此可以通过网络共享这个目录(文件系统),这样,当管理员安装了新的软件之后,所有共享这一文件系统的计算机均可以使用新的软件, Linux继承了unix操作系统结构清晰的特点。在linux下的文件结构非常有条理。但是,上述的优点只有在对linux相当熟悉时,才能体会到。现在,虫虫就把linux下的目录结构简单介绍一下。 /vmlinuz 我们已经知道,每一个linux都有一个内核(vmlinuz),我们在这个内核上添加上可以完成各种特定功能的模块,每个模块就体现在 linux中各种不同的目录上。当然,各种不同的发行套件,其目录有细小的差别,但主要结构都是一样的。我们还要将linux的功能模块和各种应用程序结合起来,这样,才能使你的 linux系统为你服务。在/vmlinuz目录下存放的就是系统的内核。还记得我们在配置lilo时,提到过这个内核吗? /bin 显而易见,bin 就是二进制(binary)英文缩写。在一般的系统当中,你都可以在这个目录下找到linux常用的命令。在有的版本中你还会找到一些和根目录下相同的目录。 /boot 在这个目录下存放的都是系统启动时要用到的程序。我们在使用lilo引导linux的时候,会用到这里的一些信息。 /dev dev 是设备(device)的英文缩写。这个目录对所有的用户都十分重要。因为在这个目录中包含了所有linux系统中使用的外部设备。但是这里并不是放的外部设备的驱动程序。这一点和我们常用的windows, dos操作系统不一样。它实际上是一个访问这些外部设备的端口。我们可以非常方便地去访问这些外部设备,和访问一个文件,一个目录没有任何区别。例如:我们在系统中键入:cd /dev/cdrom 我们就可以看到光驱中的文件了。同样道理,我们键入:cd /dev/mouse 就可以看看鼠标的相关文件。在这个目录下,有一个null设备,这个东西本身没有任何意义。如果你向这个目录写入文件或内容,他们统统有去无回。 /cdrom 这个目录在你刚刚安装系统的时候是空的。你可以将光驱文件系统挂在这个目录下。例如:mount /dev/cdrom /cdrom /etc etc这个目录是linux系统中最重要的目录之一。在这个目录下存放了系统管理时要用到的各种配置文件和子目录。我们要用到的网络配置文件,文件系统,x系统配置文件,设备配置信息,设置用户信息等都在这个目录下。以后,虫虫还会详细讲解这个目录下的内容。 /sbin 这个目录是用来存放系统管理员的系统管理程序。www.dnzg.cn /home 如果我们建立一个用户,用户名是“xx”,那么在/home目录下就有一个对应的/home/xx路径,用来存放用户的主目录。 /lib lib是库(library)英文缩写。这个目录是用来存放系统动态连接共享库的。几乎所有的应用程序都会用到这个目录下的共享库。因此,千万不要轻易对这个目录进行什么操作,一旦发生问题,你的系统就不能工作了,到时候你别说虫虫没有提醒你呀。 /lost+found 这个目录在大多数情况下都是空的。但是如果你正在工作突然停电,或是没有用正常方式关机,在你重新启动机器的时候,有些文件就会找不到应该存放的地方,对于这些文件,系统将他们放在这个目录下,就象为无家可归的人提供一个临时住所。 /mnt 这个目录在一般情况下也是空的。你可以临时将别的文件系统挂在这个目录下。 /proc 可以在这个目录下获取系统信息。这些信息是在内存中,由系统自己产生的。 /root 如果你是以超级用户的身份登录的,这个就是超级用户的主目录。 /tmp 用来存放不同程序执行时产生的临时文件。 /usr 这是linux系统中占用硬盘空间最大的目录。用户的很多应用程序和文件都存放在这个 目录下。 本文教程摘自 wdlinux论坛 www.wdlinux.cn/bbs/,转载请注明! 存储过程|字符串 SQL分隔字符串的存储过程数据库教程 ( @String NVARCHAR(1000), -- 要分隔的字符串 @SPLITCHAR NVARCHAR(10) = ',', -- 分隔字符 @TableName NVARCHAR(50), -- 存入的表名称 @FieldName NVARCHAR(50) = '[ID]' -- 存入的字段名称 ) AS -- 将字符串分隔开放进表中 DECLARE @L INT -- 第一个分隔字符的位置 DECLARE @S INT -- 第二个分隔字符的位置 SET @L = 0 SET @S = CHARINDEX(@SPLITCHAR, @String, @L) WHILE @L <= LEN(@String) BEGIN DECLARE @ID NVARCHAR(50) IF @S = 0 SET @S = LEN(@String) + 1 -- 如果到最后一个字符串那么第二个分隔字符的位置就是这个字符串的长度加一 SET @ID = SUBSTRING(@String, @L, @S - @L) -- 取值 SET @L = @S + 1 SET @S = CHARINDEX(@SPLITCHAR, @String, @L) IF LTRIM(RTRIM(@ID)) = '' CONTINUE -- 如果是空字符串就跳过 DECLARE @SQL NVARCHAR(1000) SET @SQL = 'INSERT INTO ' + @TableName + ' ('+ @FieldName +') VALUES(''' + @ID + ''')' EXEC sp_executesql @SQL END GO ----------NotMSN Messenger : notking@hotmail.com 这篇文章主要介绍了Lua字符串库(string库)学习笔记,本文列举了一些常用的Lua字符串库函数,如byte、char、dump、find等,需要的朋友可以参考下 Lua 最强大的特性之一就是它的字符串处理能力,它支持字符格式化输出,具有可扩展的模式匹配查找功能,以及一些实用的字符操作,例如查询、截取、替换和删除等字符串操作,这些字符串操作函数都封装在一个名为 string 的模块里, Lua 里的字符索引是从 1 开始,索引值也可以是负数,这种情况将被解释成向后索引,从字符串末尾开始算起。 下面是 Lua 5.2 提供的字符串操作函数: byte 函数 string.byte 把字符串里的第 i 个字符转为 ASCII 编码,默认是输出第一个字符的编码(只有一个参数的话),用法: 代码如下: string.byte (s [, i [, j]]) 例子: 代码如下: print(string.byte(“abc”)) //echo:97 print(string.byte(“abc”, 2))//echo:98 char 函数 string.char 是把一个 ASCII 编码转换为对应的字符,用法: 代码如下: string.char (asc1, ...) 例子: 代码如下: print(string.char(97)) //echo a print(string.char(99, 100, 101)) //echo cde dump 函数 string.dump 返回一个函数二进制形式的字符串,用法: 代码如下: string.dump (function) 参数 function 是一个 Lua 函数: 代码如下: function test() print(“just a test”) end print(string.dump(test)) 函数 string.dump 实现了函数的序列化,函数可以很轻松的传递,并在其他作用域调用。函数 string.dump 出来的二进制字符串,可以用 load 函数反序列回来直接调用。 代码如下: function test() print(“just a test”) end local sd = string.dump(test) print(sd) local ls = load(sd) print(ls) ls() find 函数 string.find 查找字符串 s 里第一个符合查找字符 pattern 的位置,用法: 代码如下: string.find (s, pattern [, init [, plain]]) 如果找到了目标字符 pattern,则返回它的开始和结束位置: 代码如下: start, end = string.find(“just a test”, “st”) print(start, end) 如果没有找到,则返回 nil: 代码如下: print(string.find(“just a test”, “dhq.me”)) format 函数 string.format 用于把字符串格式化输出,用法: 代码如下: string.format (formatstring, ・・・) string.format 函数的第一个参数是用来指定字符串的格式,例如: 代码如下: print(string.format(“%s is %d”, “ten”, 10)) 上面例子里的 %s 表示字符串,%d 表示数字,它们是 Lua 的格式化输出符号。 string.format 函数的用法跟 C 语言里的 printf 函数类似,例如它可以像 printf 那样输出指定位数的数字: 代码如下: Pi = 3.1415926 print(string.format(“Pi is %.2f”, Pi)) Lua 的字符格式化输出符号列表: 代码如下: . 所有字符 %a 字母 %c 控制符 %d 数字 %D 非数字 %l 小写字母 %p 标点符号 %s 字符串 %u 大写字母 %w 字母数字 %x 十六进制数 %z 用 0 表示的字符 gmatch 函数 string.gmatch 会返回一个迭代函数,⊥ü该函数遍历到一个字符串 s 中所有出现指定匹配模式 pattern 的地方,用法: 代码如下: string.gmatch (s, pattern) 例如下面是找出字符串 s 里的所有单词: 代码如下: s = “just a test” for w in string.gmatch(s, “%a+”) do print(w) end gsub 函数 string.gsub 用于全局字符串替换,字符串 s 里满足匹配模式 pattern 格式的字符都会被替换成 repl 参数的值,用法: 代码如下: string.gsub (s, pattern, repl [, n]) 例如: 代码如下: print(string.gsub(“just a test”, “st”, “*”)) 匹配模式 pattern 可以是一个正则: 代码如下: s = “num is 1234567890” print(string.gsub(s, “%d”, “*”)) 可在函数的最后加上一个可选参数 n,表示指定要替换的次数: 代码如下: s = “sethook, setlocal, setmetatable, setupvalue, setuservalue” print(string.gsub(s, “s%a+”, “S”, 2)) len 函数 string.len 用于返回字符串 s 的长度,用法: 代码如下: string.len (s) 例子: 代码如下: print(string.len(“abcdefg”)) lower 函数 string.lower 用于把字符串 s 里的字母转为小写,用法: 代码如下: string.lower (s) 例如: 代码如下: print(string.lower(“AbCdEfG”)) match 函数 string.match 用于查找字符串 s 里第一个匹配对模式 pattern 的值,并返回匹配值,用法: 代码如下: string.match (s, pattern [, init]) 上面参数 init 是可选, 表示查找过程的起点, 默认从 1 开始: 代码如下: print(string.match(“just a test”, “test”)) 参数 patter 可以是一个正则模式: 代码如下: t = “today is 2003-5-31” print(string.match(t, “%d+-%d+-%d+”)) 如果 pattern 为空,则返回整个字符串;如果没匹配成功,则返回 nil, 代码如下: print(string.match(“abcdabcd”, “a”)) rep 函数 string.rep 返回一个由分隔符 sep 隔开的重复(repeat)n 次字符 s 的字符串,用法: 代码如下: string.rep (s, n [, sep]) 默认的分隔符 sep 是空字符。 代码如下: print(string.rep(“repeat”, 3)) reverse 函数 string.reverse 用于倒转一个字符串 s 的排序,用法: 代码如下: string.reverse (s) 例如: 代码如下: print(string.reverse(“reverse”)) sub 函数 string.sub 用于从字符串 s 里截取一个从第 i 个字符到第 j 个字符间的子字符串,用法: 代码如下: string.sub (s, i [, j]) 例如: 代码如下: print(string.sub(“abcdefg”, 2, 5)) 参数 i 可以是负数,这种情况下,子串的位置从字符串 s 的最后开始算起: 代码如下: print(string.sub(“abcdefg”, -4, -2)) 参数 end 省略的话,则会返回从 i 到字符串末尾的子字符串: 代码如下: print(string.sub(“abcdefg”, 3)) upper 函数 string.upper 用于把字符串 s 里的字母转为大写,用法: 代码如下: string.upper (s) 例如: 代码如下: print(string.upper(“AbCdEfG”)) ★ 接待礼仪教程 ★ 狗年剪纸简单教程 ★ 社交礼仪教程 ★ 活动方案教程方案 ★ 教程调法 ★ 鸢尾花折纸教程篇2:分拆统计字符串数据库教程
篇3:Lua教程(十四):字符串库详解
篇4:如何跨进程发送字符串?(收藏)数据库教程
篇5:linux学习教程之一
篇6:linux学习教程之二
篇7:SQL分隔字符串的存储过程数据库教程
篇8:Lua字符串库(string库)学习笔记
Python3字符串学习教程(共8篇)