Python学习二

字符串方法

常用字符串方法表

方法描述
count()返回字符串出现的次数
index()找字符串第一次出现的下标,找不到会报错
find()检测 str 是否包含在字符串中,找不到返回-1
strip()去首尾空格和换行符,也可以用于去掉指定字符
rstrip()去右边空格
lstrip()去左边空格
replace()替换指定字符,默认全部替换,也可以指定次数
format()格式化字符串,可以接受不限个参数,位置可以不按顺序
format_map()用于字典形式的格式化字符串
zfill()返回指定长度的字符串,原字符串长度不够往前面补充0
center()返回一个指定的长度的字符串,长度不够往两边自动补充,可设定补充字符,默认为空格
title()把空格隔开的英文首字母变成大写
capitalize()将字符串的第一个字符转换为大写
upper()转换字符串中的小写字母为大写
lower()转换字符串中所有大写字符为小写
swapcase()将字符串中大写转换为小写,小写转换为大写
isalnum()检测字符串中包含至少一个区分大小写的字符,并且所有这些(区分大小写的)字符都是小写,则返回 True,否则返回 False
isupper()检测字符串是否为纯大写字母,是返回True,否则返回 False
islower()检测字符串是否为纯小写字母,是返回True,否则返回 False
isdigit()检测字符串是否为纯小写数字,是返回True,否则返回 False
startswith()检测 是否以某某开头,是返回True,否则返回 False
endswith()检测 是否以某某结尾,是返回True,否则返回 False
split()分割字符串,可以设定指定字符进行分割,默认以空格和换行符分割
join()以指定字符连接字符串

常用字符串方法使用例子

1.count()方法语法:
str.count(sub, start= 0,end=len(string))
sub – 搜索的子字符串
start – 字符串开始搜索的位置,默认为第一个字符,第一个字符索引值为0
end – 字符串中结束搜索的位置,字符中第一个字符的索引为 0,默认为字符串的最后一个位置

s = 'abcdefghijklmnopqrstuvwxyz'
print(s.count('a'))

输出结果为:
1

2.index()方法语法:
str.index(str, beg=0, end=len(string))
str – 指定检索的字符串
beg – 开始索引,默认为0
end – 结束索引,默认为字符串的长度

s = 'abcdefghijklmnopqrstuvwxyzsss'
print(s.index('s'))
print(s.index('s', 0,10)) #找不到会报错

输出结果为:
18
ValueError: substring not found

3.find()方法语法:
str.find(str, beg=0, end=len(string))
str – 指定检索的字符串
beg – 开始索引,默认为0
end – 结束索引,默认为字符串的长度

s = 'abcdefghijklmnopqrstuvwxyz'
print(s.find('s'))
print(s.find('s', 0,10))  # 找字符串的下标,找不到返回-1

输出结果为:
18
-1

4.strip()方法语法:
str.strip([chars])
chars – 删除字符串头尾指定的字符序列

s = '***abcdefghijklmnopqrstuvwxyz   '
S = '   ***abcdefghijklmnopqrstuvwxyz'
print(s.strip())
print(s.strip('*'))  # 也可以用于删除指定字符
print(S.strip('*'))  # 无法删除字符串中间的字符

输出结果为:
***abcdefghijklmnopqrstuvwxyz
abcdefghijklmnopqrstuvwxyz   
   ***abcdefghijklmnopqrstuvwxyz

5.rstrip()方法语法:
str.rstrip([chars])
chars – 指定删除的字符,默认为空格

s = '   abcdefghijklmnopqrstuvwxyz   '

输出结果为:
   abcdefghijklmnopqrstuvwxyz

6.lstrip()方法语法:
str.rstrip([chars])
chars – 指定删除的字符,默认为空格

s = '   abcdefghijklmnopqrstuvwxyz   '

输出结果为:
abcdefghijklmnopqrstuvwxyz   

7.replace()方法语法:
str.replace(old, new[, max])
old – 将被替换的子字符串。
new – 新字符串,用于替换old子字符串
max – 可选字符串, 替换不超过 max 次

s = 'abcdefghijklmnopqrstuvwxyzsyst'
print(s.replace('s','S'))
print(s.replace('s','S',1)) #可以指定替换次数

输出结果为:
abcdefghijklmnopqrStuvwxyzSySt
abcdefghijklmnopqrStuvwxyzsyst

8.format()方法语法:
‘{}’.format(‘str’)
str – 参数值
{} – 需要格式化的参数

print('{} {}'.format('hello', 'world'))  # 不设置指定位置,按默认顺序
print('{0} {1}'.format('hello', 'world'))  # 设置指定位置
print('{1} {0} {1}'.format('hello', 'world'))  # 设置指定位置
print('{name1} {name2}'.format(name1 = 'hello', name2 = 'world'))  # 设置参数

输出结果为:
hello world
hello world
world hello world
hello world

9.format_map()方法语法:
‘{key}’.format({‘key’:‘value’})

{key} – 字典中的键名
{‘key’:‘value’} – 字典

print('{key1} {key2}'.format_map({'key1':'hello', 'key2':'world'}))  
print('{key2} {key1} {key2}'.format_map({'key1':'hello', 'key2':'world'}))  # 设置指定位置

输出结果为:
hello world
world hello world

10.zfill()方法语法:
str.zfill(width)
width – 指定字符串的长度。原字符串右对齐,前面填充0

s = 'abcd'
print(s.zfill(10))

输出结果为:
000000abcd

11.center()方法语法:
str.center(width[, fillchar])
width – 字符串的总宽度。
fillchar – 填充字符。

s = 'abcd'
print(s.center(20, '*'))

输出结果为:
********abcd********

12.title()方法语法:
str.title()
参数无

s = 'holle world'
d = 'holle_world'
print(s.title())
print(d.title())

输出结果为:
Holle World
Holle_World

13.capitalize()方法语法:
str.capitalize()
参数无

s = 'holle world'
d = 'holle_world'
print(s.capitalize())
print(d.capitalize())

输出结果为:
Holle world
Holle_world

13.upper()方法语法:
str.upper()
参数无

s = 'holle world'
d = 'holle_world'
print(s.capitalize())
print(d.capitalize())

输出结果为:
Holle world
Holle_world

14.lower()方法语法:
str.lower()
参数无

s = 'HOLLE world'
d = 'HOLLE_world'
print(s.lower())
print(d.lower())

输出结果为:
holle world
holle_world

15.swapcase()方法语法:
str.swapcase()
参数无

s = 'HOLLE world'
d = 'HOLLE_world'
print(s.swapcase())
print(d.swapcase())

输出结果为:
holle WORLD
holle_WORLD

16.isalnum()方法语法:
str.isalnum()
参数无

S = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
s = 'abcdefghijklmnopqrstuvwxyz'
n = '0123456789'
s1 = 'ABCDEFGabcdefg123456'
s2 = 'ABCDEFGabcdefg123456+-*/'
print(S.isalnum())
print(s.isalnum())
print(n.isalnum())
print(s1.isalnum())
print(s2.isalnum())

输出结果为:
True
True
True
True
False

17.isupper()方法语法:
str.isupper()
参数无

S = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
s = 'abcdefghijklmnopqrstuvwxyzsyst'
print(S.isupper())
print(s.isdigit())

输出结果为:
True
False

18.islower()方法语法:
str.islower()
参数无

S = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
s = 'abcdefghijklmnopqrstuvwxyzsyst'
print(S.isupper())
print(s.isdigit())

输出结果为:
False
True

19.isdigit()方法语法:
str.isdigit()
参数无

S = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
s = 'abcdefghijklmnopqrstuvwxyzsyst'
n = '0123456789'
print(S.isupper())
print(s.isdigit())

输出结果为:
False
False
True

20.startswith()方法语法:
str.startswith(str, beg=0,end=len(string))
str – 检测的字符串
strbeg – 可选参数用于设置字符串检测的起始位置
strend – 可选参数用于设置字符串检测的结束位置

s = 'holle world'
print(s.startswith('holle'))
print(s.startswith('world'))

输出结果为:
True
False

20.endswith()方法语法:
str.endswith(suffix[, start[, end]])
suffix – 该参数可以是一个字符串或者是一个元素
start – 字符串中的开始位置,默认是 0
end – 字符中结束位置,默认是字符串/列表等的长度

s = 'holle world'
print(s.endswith('holle'))
print(s.endswith('world'))

输出结果为:
False
True

20.split() 方法语法:
str.split(str="", num=string.count(str))
str – 分隔符,默认为所有的空字符,包括空格、换行(\n)、制表符(\t)等。
num – 分割次数。如果参数 num 有指定值,则分隔 num+1 个子字符串,默认为 -1, 即分隔所有。

s = 'abc\n def,ghi,jkl'
print(s.split())  # 默认以空格和换行符
print(s.split(','))  # 默认全部匹配
print(s.split(',', 1))  # 可以指定分割次数
print(s.split('5'))    # 输入不存在的字符,会把字符串直接存为list

输出结果为:
['abc', 'def,ghi,jkl']
['abc\n def', 'ghi', 'jkl']
['abc\n def', 'ghi,jkl']
['abc\n def,ghi,jkl']

21.join()方法语法:
str.join(sequence)
sequence – 要连接的元素序列。

l = ['holle', 'world', 'python']
l_str = ','
print(l_str.join(l))

输出结果为:
holle,world,python

切片

1.切片是list范围取值的一种方式

l = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i']
print(l[0])

输出结果为:
a

2.切片的时候是顾头不顾尾的,比如取前3位元数,取的是下标为0,1,2的3位元素

l = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i']
print(l[0:3])

输出结果为:
['a', 'b', 'c']

3.可以添加步长来规定取值范围

l = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i']
print(l[0:10:2])

输出结果为:
['a', 'c', 'e', 'g', 'i']

4.步长如果是负数的话,那么取值的时候就从右往左开始取,同时开始和结束下标也要写成负数

l = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i']
print(l[-1:-8:-2])

输出结果为:
['i', 'g', 'e', 'c']

浅拷贝/深拷贝

浅拷贝

浅拷贝一个变量后,改变了这个变量,另外一个也会改变

l = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i']
l2 = l
l.append('j')
print('l:', l)
print('l2:', l2)

输出结果为:
l: ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j']
l2: ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j']

深拷贝

深拷贝一个变量后,改变了这个变量,另外一个则不会改变

import copy # 深拷贝要引入copy模块
l = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i']
l2 = copy.deepcopy(l)
l.append('j')
print('l:', l)
print('l2:', l2)

输出结果为:
l: ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j']
l2: ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i']

非空即真,非0即真

Python程序语言指定任何非0和非空(null)值为true,0 或者 null为false

  1. 字符串类型,空字符串表示False,其他为True
  2. 整数和浮点数,0表示False,其他为True
  3. 序列类型(包括列表,元组,字典,集合等),空表示False,非空表示True
  4. 布尔类型,False为假,True为真
  5. None永远表示False

例子如下:

username = input('username:')
if username.strip():  # 去掉空格之后输入的username不为空为True,走if下的代码,否则执行else
    print('你输入的username不为空')
else:
    print('你输入的username为空')
    
print(not username.strip()) # 可以用not取反值,即为空则为True,不为空则为False
if not username.strip():  # 去掉空格之后输入的username为空为True,走if下的代码,否则执行else
    print('你输入的username为空')
else:
    print('你输入的username不为空')

输出结果为:
username:
你输入的username为空
True
你输入的username为空

操作文件

打开关闭方法

  1. Python打开文件使用open()方法,一般基础语法为:
    open(file, mode=‘r’, encoding=)
    file: 必需,文件路径(相对或者绝对路径),文件在当前代码文件路径下可以直接写文件名,使用绝对路径时一般加r’,表示取原字符
    mode: 可选,文件打开模式
    buffering: 设置缓冲
    encoding: 一般使用utf8
  2. 打开文件后一定要关闭文件,用close() 方法。

常用模式

一般的常用的文件打开模式为r, r+, a, a+, w, w+。

模式描述
r以只读方式打开文件。文件的指针将会放在文件的开头,文件打开模式不写默认为r模式
r+打开一个文件用于读写。文件指针将会放在文件的开头
a打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入
a+打开一个文件用于读写。如果该文件已存在,文件指针将会放在文件的结尾。文件打开时会是追加模式。如果该文件不存在,创建新文件用于读写
w打开一个文件只用于写入。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件
w+打开一个文件用于读写。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件

读文件的三种方法

  1. read()
    用于从文件读取指定的字节数
    语法如下:
    fileObject.read(size)
    size – 从文件中读取的字节数,默认或者指定负数读所有
f = open('a.txt', 'r', encoding='utf-8')
print(f.read())  # 三个print不能同时打印
print(f.read(5))
print(f.read(-5))
f.close()

输出结果为:
zhangsan
lisi
wangwu
zhaoliu

zhang

zhangsan
lisi
wangwu
zhaoliu
  1. readline()
    用于从文件读取整行,包括 “\n” 字符。
    语法如下:
    fileObject.readline(size)
    size – 从文件中读取的字节数,默认或者指定负数读整行
f = open('a.txt', 'r',encoding='utf-8')
print(f.readline())
print(f.read(5))
print(f.read(-5))

输出结果为:
zhangsan

zhang

zhangsan
  1. readlines()
    用于读取所有行(直到结束符 EOF)并以列表形式返回,如有换行,会把换行符写入字符串中
    语法如下:
    fileObject.readlines( )
f = open('a.txt', 'r', encoding='utf-8')
print(f.readlines())
f.close()

输出结果为:
['zhangsan\n', 'lisi\n', 'wangwu\n', 'zhaoliu']

用readlines()读取出来的数据带有换行符,但是又不想要的话可以用for循环处理下,例如:

list = []  # 先建一个空的list
f = open('a.txt', 'r', encoding='utf-8')
# 循环读取每行数据去掉换行符然后存到之前创建的list里面去
for result in f.readlines():
    result = result.strip()
    list.append(result)
print(list)
f.close()

输出结果为:
['zhangsan', 'lisi', 'wangwu', 'zhaoliu']

或者先用readlines()读取出来存为列表再用其他的方法去消除列表中的换行符

with… as…语句

用open打开文件后忘了关闭文件导致系统资源的浪费,又或者程序异常close()没有执行,导致后面的某些文件操作无法执行,我们可以用with… as…语句来解决这种问题,用with… as…语句的好处就是到达语句末尾时会自动关闭文件,即使出现异常。写法如下:

with open('test.txt',encoding='utf-8') as f:
    for line in f:
        print(line)
        line = line.strip()  # 去除换行符
        if line:
            print(line)

os模块

Python的os模块封装了操作系统的目录和文件操作,所以很多时候我们可以通过引入os模块来完成文件操作
os模块的部分常用方法:

方法描述
os.name输出字符串指示正在使用的平台,如果是window 则用’nt’表示,对于Linux/Unix用户,它是’posix’
os.getcwd()返回当前工作目录
os.listdir(path)返回指定的文件夹包含的文件或文件夹的名字的列表
os.mkdir(path)创建path指定的文件夹,只能创建一个单层文件,而不能嵌套创建,若文件夹存在则会抛出异常
os.makedirs(path)创建多层目录 ,可以嵌套创建
os.move(file_name)删除指定文件
os.remove(path)删除指定路径的文件,如果指定的路径是一个目录,将抛出OSError
os.rename(src, dst)文件src重命名为dst,如果dst是一个存在的目录, 将抛出OSError

比如我现在有个文件,想把文件内的所有小写字母替换成大写,如果用file的方法就会复杂很多,这个时候使用os的方法就会方便些,例如:

import os
# 打开a文件,再以只写的方式新建一个新文件
with open('a.txt') as fr,open('a_new.txt','w') as fw:
    for line in fr:
        line = line.strip()
        if line:
            # 把读取到的内容替换成大写再写入新文件中
            line = line.upper()
            fw.write(line+'\n')
# 用os模块的方法删除原文件再把新文件重命名为a
os.remove('a.txt')
os.rename('a_new.txt','a.txt')
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值