python进阶学习chapter04(字符串相关)
- 拆分字符串(含有多个分隔符)
- 去掉不需要的字符
- 判断字符串的开头/结尾元素
一、拆分字符串
问题引入:
把某个字符串依据分隔符拆分,该字符包含不同的多种分隔符,如下
s = '12;;7.osjd;.jshdjdknx+'
其中 ; . + 是分隔符
方法一,不断使用str.split(),再用extend把序列不断添加到列表中
append和extend的区别:https://www.cnblogs.com/subic/p/6553187.html
def go_split(s, symbol): result = [s] for i in symbol: median = [] # 普通方法 # for x in result: # median.extend(x.split(i) # 列表解析 # [median.extend(y.split(i)) for y in result if y] # map高阶函数,map生成可迭代对象 for z in map(lambda x: x.split(i), result): median.extend(z) # 以上三个方法都可以解决问题 result = median # 去除空字符串 return [x for x in result if x] if __name__ == "__main__": # 定义初始字符串 s = '12;;7.osjd;.jshdjdknx+' # 定义分隔符 symbol = ';./+' result = go_split(s, symbol) print(result)
方法二、调用re的split方法一次性拆分所有
import re def go_split(s, symbol): # 拼接正则表达式 symbol = "[" + symbol + "]+" # 一次性分割字符串 result = re.split(symbol, s) # 去除空字符 return [x for x in result if x] if __name__ == "__main__": # 定义初始字符串 s = '12;;7.osjd;.jshdjdknx+' # 定义分隔符 symbol = ';./+' result = go_split(s, symbol) print(result)
二、去掉不需要的字符
问题引入:
过滤用户输入中前后多余的空白字符‘ ++++abc123--- ‘
过滤某windows下编辑文本中的’\r’:‘hello world \r\n’
1、去掉两端字符串:strip(),rstrip(),lstrip()
s = ' -----abc123++++ ' # 删除两边空字符 print(s.strip()) # 删除左边空字符 print(s.rstrip()) # 删除右边空字符 print(s.lstrip())
2、删除某个具体位置的字符:先切片再拼接
s = 'abc:123' # 字符串拼接方式去除冒号 new_s = s[:3] + s[4:] print(new_s)
3、
三、判断字符串是否以某个字符开头/结尾
startwith()和endwith()结合列表解析式
问题引入:
某文件系统目录下有一系列文件:
1.c
2.py
3.java
4.sh
5.cpp
......
编写一个程序,给其中所有的.sh文件和.py文件加上可执行权限
import os
import stat
def chmod_py(target_path):
# 获得当前文件下目录文件
file_l = os.linesdir(target_path)
# startswith中拥有多个参数必须是元组形式,只需满足一个条件,返回True
target_file = [name for name in file_l if name.startswith(('.sh', '.py'))]
for file in target_file:
# 给满足条件的文件所有者赋予执行权限
os.chmod(file, os.stat(file).st_mod | stat.S_IXUSR)
if __name__ == '__main__':
# 目标目录
target_path = '.'
chmod_py(target_path=target_path)