Python字符串处理实例详解
发布时间 - 2026-01-11 01:09:32 点击率:次Python字符串处理实例详解

一、拆分含有多种分隔符的字符串
1.如何拆分含有多种分隔符的字符串
问题: 我们要把某个字符串依据分隔符号拆分不同的字段,该字符串包含多种不同的分隔符,例如:
s = "ab;cd|efg|hi,jkl|mn\topq;rst,uvw\txyz"
其中;,|,\t 都是分隔符号,如何处理?
方法一: 连续使用str.split()方法,每次处理一种分隔符号
s = "ab;cd|efg|hi,jkl|mn\topq;rst,uvw\txyz" def mySplit(s,ds): res = [s] for d in ds: t = [] map(lambda x: t.extend(x.split(d)), res) res = t return res print mySplit(s,';|,\t') 输出: ['ab', 'cd', 'efg', 'hi', 'jkl', 'mn', 'opq', 'rst', 'uvw', 'xyz']
方法二: 使用正则表达式的re.split()方法,一次性拆分字符串
import re s = "ab;cd|efg|hi,jkl|mn\topq;rst,uvw\txyz" print re.split(r'[;|,\t]+',s) 输出: ['ab', 'cd', 'efg', 'hi', 'jkl', 'mn', 'opq', 'rst', 'uvw', 'xyz']
二、调整字符串中文本格式
1. 如何判断字符串a是否以字符串b开头或结尾
问题:某文件系统目录下有一系列文件:a.py,quicksort.c,stack.cpp,b.sh , 编写程序给其中所有.sh文件和.py文件加上用户可执行权限?
解决方案: 使用字符串中的str.startswith()和end.startswith()方法 (注意:多个匹配时参数使用元组)
In [1]: import os
# 列出当前目录以.sh和以.py结尾的文件
In [2]: [name for name in os.listdir('.') if name.endswith(('.py','.sh'))]
Out[2]: ['b.sh', 'a.py']
In [3]: import stat
# 查看 a.py 文件权限
In [4]: os.stat('a.py').st_mode
Out[4]: 33204
# 把文件权限转换成8进制,即为平常看到的权限
In [5]: oct(os.stat('a.py').st_mode)
Out[5]: '0100664'
# 更改文件权限,添加一个可执行权限
In [6]: os.chmod('a.py',os.stat('a.py').st_mode | stat.S_IXUSR)
In [7]: ll
total 0
-rwxrw-r-- 1 yangyang 0 5月 9 14:48 a.py*
-rw-rw-r-- 1 yangyang 0 5月 9 14:48 b.sh
-rw-rw-r-- 1 yangyang 0 5月 9 14:48 quicksort.c
-rw-rw-r-- 1 yangyang 0 5月 9 14:48 stack.cpp
2.如何对字符串中文本的格式进行调整
问题: 某软件的log文件,其中日期格式为“yyyy-mm-dd”:
2017-05-08 09:12:48 status half-configured passwd:amd64 1:4.2-3.1ubuntu5.2 2017-05-08 09:12:48 status installed passwd:amd64 1:4.2-3.1ubuntu5.2 2017-05-08 09:12:48 status unpacked passwd:amd64 1:4.2-3.1ubuntu5.2 2017-05-08 09:12:48 status unpacked passwd:amd64 1:4.2-3.1ubuntu5.2 2017-05-08 09:12:48 status half-configured passwd:amd64 1:4.2-3.1ubuntu5.2 2017-05-08 09:12:48 status installed passwd:amd64 1:4.2-3.1ubuntu5.2 2017-05-08 09:12:48 startup packages configure 09:12:48 startup packages configure
我们想把其中日期改为美国日期的格式"mm/dd/yyyy",2017-05-08 ==> 05/08/2017 ,应如何处理?
解决方案:使用正则表达式re.sub()方法做字符串替换,利用正则表达式的捕获组捕获每个部分内容,在字符串中调整各个组的捕获顺序。
In [1]: import re
In [2]: log = open('/var/log/dpkg.log').read()
# (\d{4}) 匹配到4个数字为一个捕获组,其顺序为1。故后面替换用\1放到最后,r是为了防止字符串被转义
In [3]: print re.sub('(\d{4})-(\d{2})-(\d{2})',r'\2/\3/\1', log)
05/08/2017 09:12:48 status unpacked passwd:amd64 1:4.2-3.1ubuntu5.2
05/08/2017 09:12:48 status unpacked passwd:amd64 1:4.2-3.1ubuntu5.2
05/08/2017 09:12:48 status unpacked passwd:amd64 1:4.2-3.1ubuntu5.2
05/08/2017 09:12:48 status half-configured passwd:amd64 1:4.2-3.1ubuntu5.2
05/08/2017 09:12:48 status installed passwd:amd64 1:4.2-3.1ubuntu5.2
05/08/2017 09:12:48 startup packages configure
# 也可以为每个捕获组起个名称,而不使用默认顺序来处理
In [5]: print re.sub('(?P<year>\d{4})-(?P<month>\d{2})-(?P<day>\d{2})',r'\g<month>/\g<day>/\g<year>', log)
05/08/2017 09:12:48 status unpacked passwd:amd64 1:4.2-3.1ubuntu5.2
05/08/2017 09:12:48 status unpacked passwd:amd64 1:4.2-3.1ubuntu5.2
05/08/2017 09:12:48 status unpacked passwd:amd64 1:4.2-3.1ubuntu5.2
05/08/2017 09:12:48 status half-configured passwd:amd64 1:4.2-3.1ubuntu5.2
05/08/2017 09:12:48 status installed passwd:amd64 1:4.2-3.1ubuntu5.2
05/08/2017 09:12:48 startup packages configure
三、字符串拼接
1.如何将多个小字符串拼接成一个大的字符串
问题:在程序中我们将各个参数按次序收集到列表中: ["<0112>", "<32>","<1024x768>","<60>" ],要把各个参数拼接成数据报进行发送"<0112><32><1024x768><60>"
解决方案:
方法一:迭代列表,连续使用“+”操作依次拼接每一个字符串
In [1]: pl = ["<0112>", "<32>","<1024x768>","<60>" ] In [2]: s = '' # 这种方法会产生许多临时结果,会造成资源的浪费 In [3]: for p in pl: ...: s = s + p ...: print s ...: <0112> <0112><32> <0112><32><1024x768> <0112><32><1024x768><60> In [4]: s Out[4]: '<0112><32><1024x768><60>'
方法二:使用str.join()方法,更加快速的拼接列表中所有字符串
In [5]: ''.join(pl) Out[5]: '<0112><32><1024x768><60>'
有个列表l = ['abc',123,45,'xyz'],如何让123和45以字符串的方式拼接
In [6]: l = ['abc',123,45,'xyz'] # 使用生成器表达式,开销比列表表达式小 In [7]: (str(x) for x in l) ...: Out[7]: <generator object <genexpr> at 0x7fe3cadef550> In [8]: ''.join(str(x) for x in l) Out[8]: 'abc12345xyz'
四、字符串居中对齐
1.如何对字符串进行左、右、居中对齐
问题: 某个字典存储了一系列属性值
{
"loDist":100.0,
"smartCull":0.04,
"farclip":477
}
在程序中想以工整的格式进行输出,如何处理?
解决方案:
方法一: 使用字符串的str.ljust(),str.rjust(),str.center()进行,右,居中对齐
方法二: 使用format方法,传递类似'<20','>20','^20'参数完成同样任务
In [1]: s = 'abc'
In [2]: s.ljust(20)
Out[2]: 'abc '
In [3]: s.ljust(20,'=')
Out[3]: 'abc================='
In [4]: s.center(20)
Out[4]: ' abc '
In [5]: format(s,'<20')
Out[5]: 'abc '
In [6]: d = {
...: "loDist":100.0,
...: "smartCull":0.04,
...: "farclip":477
...: }
In [7]: d.keys()
Out[7]: ['loDist', 'smartCull', 'farclip']
In [8]: w =max(map(len,d.keys()))
In [9]: for k in d:
...: print k.ljust(w),':',d[k]
...:
loDist : 100.0
smartCull : 0.04
farclip : 477
2.去掉不需要的字符串
问题:
1.过滤掉用户输入中前后多余的空白字符: ' nick@gmail.com '
2.过滤某windows下编辑文本中的'\r': 'hello world\r\n'
3.去掉文本中的unicode组合符号(音调):u'zǒu'
解决方案:
方法一: 字符串strip(),lstrip(),rstrip()方法去掉字符串两端字符
方法二:删除单个固定位置的字符,可以使用切片+拼接的方式
方法三:字符串的replace方法或正则表达式re.sub()方法删除任意位置字符
方法四:字符串translate()方法,可以同时删除多种不同字符
In [1]: s = ' abc 123 '
In [2]: s.strip()
Out[2]: 'abc 123'
In [3]: s.lstrip()
Out[3]: 'abc 123 '
In [4]: s = '-----ab+++++'
In [5]: s.strip('-+')
Out[5]: 'ab'
In [6]: s = 'abc:123'
In [7]: s[:3]+s[4:]
Out[7]: 'abc123'
In [8]: s = '\tabc\t123\txyz'
# 去除\t
In [9]: s.replace('\t','')
Out[9]: 'abc123xyz'
In [10]: s = '\tabc\t123\txyz\ropq\r'
In [11]: import re
# 去除\t\r
In [12]: re.sub('[\t\r]','',s)
Out[12]: 'abc123xyzopq'
In [13]: s = 'abc\refg\n\2342\t'
# 去除\t\r\n
In [14]: s.translate(None,'\t\r\n')
Out[14]: 'abcefg\x9c2'
In [15]: u = u'zǒu'
In [16]: u
Out[16]: u'z\u01d2u'
In [17]: print u.translate({0x01d2:None})
zu
感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!
# Python字符串处理
# Python
# 操作字符串
# Python中extend和append的区别讲解
# python list中append()与extend()用法分享
# python列表操作之extend和append的区别实例分析
# Python中给List添加元素的4种方法分享
# 在Python中append以及extend返回None的例子
# 多个
# 要把
# 正则表达式
# 分隔符
# 如何处理
# 可执行
# 都是
# 有一
# 有个
# 不需要
# 列表中
# 也可
# 而不
# 希望能
# 可以使用
# 美国
# 想把
# 谢谢大家
# 转换成
# 即为
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
EditPlus中的正则表达式 实战(4)
如何在万网开始建站?分步指南解析
浅析上传头像示例及其注意事项
laravel服务容器和依赖注入怎么理解_laravel服务容器与依赖注入解析
JS中页面与页面之间超链接跳转中文乱码问题的解决办法
Laravel与Inertia.js怎么结合_使用Laravel和Inertia构建现代单页应用
北京专业网站制作设计师招聘,北京白云观官方网站?
如何在IIS7中新建站点?详细步骤解析
在centOS 7安装mysql 5.7的详细教程
rsync同步时出现rsync: failed to set times on “xxxx”: Operation not permitted
Python自然语言搜索引擎项目教程_倒排索引查询优化案例
如何注册花生壳免费域名并搭建个人网站?
如何在阿里云虚拟机上搭建网站?步骤解析与避坑指南
怎样使用JSON进行数据交换_它有什么限制
香港服务器租用费用高吗?如何避免常见误区?
Laravel如何发送邮件和通知_Laravel邮件与通知系统发送步骤
详解vue.js组件化开发实践
深圳防火门网站制作公司,深圳中天明防火门怎么编码?
使用C语言编写圣诞表白程序
Laravel怎么调用外部API_Laravel Http Client客户端使用
Laravel怎么导出Excel文件_Laravel Excel插件使用教程
如何用PHP工具快速搭建高效网站?
Laravel如何创建自定义Facades?(详细步骤)
简单实现Android验证码
Laravel Asset编译怎么配置_Laravel Vite前端构建工具使用
Laravel如何使用Seeder填充数据_Laravel模型工厂Factory批量生成测试数据【方法】
Laravel如何使用Collections进行数据处理?(实用方法示例)
php打包exe后无法访问网络共享_共享权限设置方法【教程】
Laravel如何处理JSON字段_Eloquent原生JSON字段类型操作教程
哪家制作企业网站好,开办像阿里巴巴那样的网络公司和网站要怎么做?
如何自定义safari浏览器工具栏?个性化设置safari浏览器界面教程【技巧】
Laravel如何集成第三方登录_Laravel Socialite实现微信QQ微博登录
Laravel如何优雅地处理服务层_在Laravel中使用Service层和Repository层
如何在HTML表单中获取用户输入并结合JavaScript动态控制复利计算循环
香港服务器如何优化才能显著提升网站加载速度?
香港服务器选型指南:免备案配置与高效建站方案解析
如何利用DOS批处理实现定时关机操作详解
Win11关机界面怎么改_Win11自定义关机画面设置【工具】
DeepSeek是免费使用的吗 DeepSeek收费模式与Pro版本功能详解
Python并发异常传播_错误处理解析【教程】
浏览器如何快速切换搜索引擎_在地址栏使用不同搜索引擎【搜索】
制作企业网站建设方案,怎样建设一个公司网站?
iOS中将个别页面强制横屏其他页面竖屏
如何快速上传建站程序避免常见错误?
Laravel怎么判断请求类型_Laravel Request isMethod用法
,怎么在广州志愿者网站注册?
非常酷的网站设计制作软件,酷培ai教育官方网站?
如何在云服务器上快速搭建个人网站?
iOS发送验证码倒计时应用
php做exe能调用系统命令吗_执行cmd指令实现方式【详解】

