Python 字符串序列:不可变对象、有序字符集合与多种类型

2024-07-13
来源:网络整理

字符串序列用于表示和存储文本。字符串是不可变的对象。字符串是用于存储和表示基本文本信息的有序字符集合。一对单引号、双引号或三引号中包含的内容称为字符串。三引号可以由多行组成。它是编写多行文本的快捷语法。常用的文档字符串用作文件中特定位置的注释。方便的多行注释。

实际上有三种类型的字符串:

1.常用意义字符串(str)

2.原始字符串,以大写R或者小写r、r''开头,不转义特殊字符

3. ,u''子类

字符串支持索引和切片操作。

按照.x的字符串源文件来看,一共有44个方法,列举如下:

总结上述用法,我们可以将其归类为字符串操作:字符串替换,删除,截取,复制,连接,比较,查找,拆分等。

不过,首先要确定对象是否是字符串,如下所示:

如何判断一个对象是否是字符串

中的字符串有两种类型,一种是 str,另一种是 。那么如何判断一个对象是否是字符串呢?应该使用 (s,) 而不是 (s,str)。

请参阅以下示例

 >>>a = 'hi'
 >>>isinstance(a,str)
 True
 >>>b = u'Hi'
 >>>isinstance(b,str)
 False
 >>>isinstance(b,basestring)
 True
 >>>isinstance(b,unicode)
 True
 >>>isinstance(a,unicode)
 False

要正确判断一个对象是否是字符串,必须要有,因为它是str和的基类,里面包含了普通的字符串和类型。

如何从字符串中删除双引号

a = '"string"'
print(a,type(a))
b = eval(a)
print(b,type(b))

结果:
"string" 'str'>
string 'str'>

以下是 str 对象的基本用途

字符串的基本用法可分为以下五类,即属性判断、查找与替换、分割与连接、变换、填空和删除。

(a)性质的确定

有多种确定属性的方法。

():是否全部为字母和数字,且至少有一个字符

(): 是否全部为字母且至少为一个字符

(): 是否全部为数字且至少为一个字符

(): 字符串中所有字母是否都是小写

(): 字符串中所有字母是否都是小写

(): 是否全部为空白字符且至少有一个字符

():检查字符串中每个单词是否只有大写字母的首字母。

([,[,end]]):用于检查字符串是否以指定的子字符串开头,如果是则返回 True,否则返回 True。如果参数和 end 指定值,则在指定的范围内检查。

([,[,end]]):用于判断字符串是否以指定的后缀结尾,如果以指定的后缀结尾则返回 True,否则返回 True。可选参数 "" 和 "end" 分别为搜索字符串的起始和终止位置。

is*() 等函数比较简单,从字母的字面意思就可以理解。with() 函数可以接受和结束参数,使用得当可以优化性能。另外,从 2.5 版本开始,with() 函数族的第一个参数可以接受类型参数,当参数中某个元素匹配时,返回 True。

(b)查找和替换

(sub[,[,end]]):统计字符串中字符 sub 出现的次数。可选参数是字符串搜索的起始和终止位置。调用该方法时会用到此值。

find(sub[,[,end]]): 检查字符串是否包含子字符串 sub。如果指定了起始和终止范围,则检查是否包含在指定范围内。如果包含子字符串,则返回起始索引值,否则返回 -1

(sub[,[,end]]):与 find() 方法相同,但如果 sub 不在列表中,则会引发异常。

(sub[,[,end]]):类似于 find() 函数,但从右侧开始搜索。

(sub[,[,end]]):与 () 类似,但是从右边开始。

(old,new[,]): 用于替换字符串的某些子字符串,将old替换为new。如果指定该参数,则最多替换一次,如果不指定,则全部替换

前五个方法都可以接受 和 end 参数,合理使用可以优化性能。对于判断字符串是否包含子字符串,不建议使用 和 find 方法,建议使用 in 和 not in 操作。

(c)切割和连接

(sep):用于根据指定的分隔符分割字符串。如果字符串包含指定的分隔符,则返回一个三元组,第一个是分隔符左边的子字符串,第二个是分隔符本身,第三个是分隔符右边的子字符串。如果字符串中没有出现 sep,则返回值为 (sep,",")。()方法是在 2.5 版本中添加的。

(sep):类似于 () 函数,但从右侧开始搜索。

([]):以行分隔('\r', '\r\n', \n'),返回以每行作为元素的列表,若参数为True,则不包含换行符,若为True,则保留换行符。

(sep[,]]):通过指定分隔符对字符串进行分片。如果参数有指定值,则只分隔子字符串,并返回分隔字符串的列表。

(sep[,]]):与 () 相同,但是从右边开始。

请参阅以下示例

str1 = 'ab c\n\nde fg\rkl\r\n'
print str1.splitlines();

str2 = 'ab c\n\nde fg\rkl\r\n'
print str2.splitlines(True)

输出如下:

['ab c', '', 'de fg', 'kl']
['ab c\n', '\n', 'de fg\r', 'kl\r\n'] 

()函数中有个小坑,比如对于一个字符串s,s.()和s.(" ")的返回值是不一样的,看下面的代码

s = "  hello world"#前面有两个空格
print s.split()
print s.split(' ')

输出如下

['hello', 'world']
['', '', 'hello', 'world']

为什么会这样呢?原因在于,当 sep 参数被忽略或为 None 时,以及当 sep 被明确赋值为字符串值时, () 采用了两种不同的算法。对于前者, () 会先将两端的空白字符去除,然后用任意长度的空白字符串作为分隔符来分割字符串(即连续的空白字符串会被视为单个空白字符);对于后者,会认为两个连续的空白字符之间有一个空字符串,因此它们对于空字符串的返回值也不同。

>>>".split()
[]
>>>''.split(' ')
['']

(d)变形

():将字符串中所有大写字符转换为小写。

():将字符串中的小写字母转换为大写字母。

(): 字符串首字母变为大写,其他字母变为小写。对于8位字节编码,取决于本地环境。

():用于将大写字母转换为小写字母,或将小写字母转换为大写字母。

():返回一个“标题化”的字符串,这意味着所有单词都以大写字母开头,其余字母均为小写。

这些都是大小写切换。() 不能去除字符串两端的空格,也不能将连续的空格替换为单个空格。如果你有这样的需求,可以使用模块的 (s) 函数,它可以去除两端的空格,并将连续的空格替换为单个空格。看下面的例子:

#coding=utf-8
import string
s = "   hello   world"
print s.title()
print string.capwords(s)

输出如下:

   Hello   World
Hello World

(e) 删除和填充

([]):用于删除字符串首尾指定字符(默认为空格),如果有多个字符,则删除多个字符。

([]):用于删除字符串左侧的空格或指定字符。

([]):用于删除字符串右侧的空格或指定字符。

([,]):返回原字符串居中并填充至长度的新字符串,默认填充字符为空格。

([,]):返回原字符串左对齐并填充至指定长度(默认为空格)的新字符串,若指定长度小于原字符串,则返回原字符串。

([,]):返回原字符串右对齐并填充至长度的新字符串,若指定长度小于字符串长度,则返回原字符串。

():返回指定长度的字符串,原字符串右对齐,并在前面填充0。`([])`:将字符串中的制表符('\t')转换为适当数量的空格,默认转换为8个``。

(f)字符串切片

切片操作 () 可用于从字符串中获取子字符串(字符串的一部分)。我们使用一对方括号、起始偏移量、终止偏移量以及可选的步长来定义切片。

格式:[:end:step]

 str = '0123456789′
 print str[0:3#截取第一位到第三位的字符
 print str[:] #截取字符串的全部字符
 print str[6:] #截取第七个字符到结尾
 print str[:-3#截取从头开始到倒数第三个字符之前
 print str[2#截取第三个字符
 print str[-1#截取倒数第一个字符
 print str[::-1#创造一个与原字符串顺序相反的字符串
 print str[-3:-1#截取倒数第三位与倒数第一位之前的字符
 print str[-3:] #截取倒数第三位到结尾
 print str[:-5:-3#逆序截取,截取倒数第五位数与倒数第三位数之间
print str[::2] #按照步长为二,返回所有值

(g)使用和

开发敏感词过滤程序,提示用户输入内容,若用户输入的内容含有特殊字符:

例如:“Aoi-”“ Hot”,然后将内容替换为***

sentence_input  = input("请输入:")
sensitive_varcabulary1 = str.maketrans("苍老师",'***')
sensitive_varcabulary2 = str.maketrans("东京热",'***')
new_sentence = sentence_input.translate(sensitive_varcabulary1).translate(sensitive_varcabulary2)
print(new_sentence)
# 请输入:dads大大的苍老师
# dads大大的***

(h)字符串格式()

用法:使用 {} 和 : 来替代传统的 % 方法

1. 使用关键字参数

重点:关键字参数值一定要匹配,可以使用字典作为关键字参数传入值,字典前加**即可。

>>> hash = {'name':'hoho','age':18}
>>'my name is {name},age is {age}'.format(name='hoho',age=19)
'my name is hoho,age is 19'
>>'my name is {name},age is {age}'.format(**hash)
'my name is hoho,age is 18'

2. 填写和格式化

:[填充字符][对齐方式][宽度]

'{:<20}'.format(10)           #左对齐
'10                  '
'{:>20}'.format(10)           #右对齐
'                  10'
'{:^20}'.format(10)           #居中对齐
'         10         '

3. 使用位置参数

重点:从下面的例子中我们可以看出位置参数不受顺序约束,可以是{},只要有对应的参数值即可。参数索引从0开始,位置参数列表可以用*列表形式传入。

>>> li = ['hoho',18]
>>'my name is {} ,age {}'.format('hoho',18)
'my name is hoho ,age 18'
>>'my name is {1} ,age {0}'.format(10,'hoho')
'my name is hoho ,age 10'
>>'my name is {1} ,age {0} {1}'.format(10,'hoho')
'my name is hoho ,age 10 hoho'
>>'my name is {} ,age {}'.format(*li)
'my name is hoho ,age 18'

4. 精度和基准

>>'{0:.2f}'.format(1/3)
'0.33'
>>'{0:b}'.format(10)    #二进制
'1010'
>>'{0:o}'.format(10)     #八进制
'12'
>>'{0:x}'.format(10)     #16进制
'a'
>>'{:,}'.format(12369132698)  #千分位格式化
'12,369,132,698'

5.使用索引

>>> li
['hoho'18]
>>'name is {0[0]} age is {0[1]}'.format(li)
'name is hoho age is 18

(一)常用弦乐技巧

1. 反转字符串

>>> s = '1234567890'
>>> print s[::-1]
0987654321

2. 关于字符串连接

尽量使用join()链接字符串,因为’+’号连接n个字符串需要申请n-1次内存,使用join()需要申请1次内存。

3. 定长字符串拆分

>>> import re
>>> s = '1234567890'
>>> re.findall(r'.{1,3}', s)  # 已三个长度分割字符串
['123''456''789''0']

4.使用 () 括号生成字符串

sql = ('SELECT count() FROM table '
       '
WHERE id = "10" '
       '
GROUP BY sex')

print sql

SELECT count() FROM table WHERE id = "10" GROUP BY sex

5.将字符串写入文件

>>> print >> open("somefile.txt""w+"), "Hello World"  
# Hello World将写入文件somefile.txt

模块

ascii_letters
获取所有ascii码中字母字符的字符串(包含大写和小写)

ascii_uppercase
获取所有ascii码中的大写英文字母

ascii_lowercase
获取所有ascii码中的小写英文字母

digits
获取所有的10进制数字字符

octdigits
获取所有的8进制数字字符

hexdigits
获取所有16进制的数字字符

printable
获取所有可以打印的字符

whitespace
获取所有空白字符

punctuation
获取所有的标点符号

如何从指定文件夹读取 csv 文件格式

遍历文件夹,找到csv格式的文件

import os
Path_list = os.listdir(PathName0)
for name in Path_list:
    if name.endswith('.csv'):
        print(name)

分享