python-cookbook学习笔记五
来源:互联网 发布:淘宝的安静一键宏好吗 编辑:程序博客网 时间:2024/06/05 06:33
分割字符串:
如果我们有这样的字符串:字符全部以,为分隔符
line='asdf,fjdk,afed,fjek,asdf,foo'
print line.split(',')
我们可以用字符串自带的split功能进行分割,参数携带分割符号就可以了
但是如果字符是这样的形式:
line='asdf fjdk;afed,fjek,asdf, foo'
可以看到字符串的分隔符不固定,有空格 ; , ,+空格多种形式。那么单纯的用一个分隔符号就搞不定了。这个时候正则表达式就派上用场了。我们先看下正则表达式的用法。参考如下的表格
用如下的方式进行分割
print re.split(r'[;,\s]\s*',line)
通过上面的表格可以了解到正则表达式的用法,[]是各种可能出现的符号。然后加上0个或者无限个空格。
即使我们的字符串改成如下的形式,asdf和foo之前有一个,以及多个空格。该方式也能正确的分割出字符
line='asdf fjdk;afed,fjek,asdf, foo'
这里的分割方法只是将字符给分割出来了,如果我们想同时得到分隔符该如何处理呢。这里可以用到分组处理。
print re.split(r'(;|,|\s)\s*',line)
用()分组的方式取代[],然后用|进行分割。通过前面的正则表达式可以了解到这个2个符号的用法。返回的结果如下:可以看到分割符也包含在里面了
['asdf', ' ', 'fjdk', ';', 'afed', ',', 'fjek', ',', 'asdf', ',', 'foo']
如果你仍然想使用分组捕获但是不想分割符好出现,可以用(?:....)非捕获分组的形式。如下,这样的效果就和re.split(r'[;,\s]\s*',line)的效果一致
re.split(r'(?:,|;|\s)\s*', line)
具体的正则表达式用法可以参考<正则表达式>这本书,里面介绍得很详细。对于字符串处理来说,正则表达式可以达到事半功倍的效果。值得好好学学
文本处理:
假设你存在一个目录,下面存在各种形式的文件,有txt,csv等等。如果你只想找到其中一种或多种格式的文件并打开该如何办呢。首先肯定是要找到满足条件的文件,然后进行路径合并在一一打开。
path=r'D:\test_source'filenames=os.listdir(path)print filenamesret=[name for name in filenames if name.endswith('.txt')]print retdirect_path=[os.path.join(path,r) for r in ret]print direct_path[0]
运行结果如下:
['1.csv', 'info.txt', 'pycharm2.jpg']
['info.txt']
D:\test_source\info.txt
这个代码中listdir是列出该目录下的所有文件名称。可以看到其中有txt,csv,jpg的文件
[name for name in filenames if name.endswith('.txt')] 这个是找出其中所有txt文件。其中使用到了name.endswith,endswith的功能就是找到所有满足后缀条件的文件。
找到满足的条件后最后用[os.path.join(path,r) for r in ret] 进行路径归并。最后得到完整的满足条件的文件路径。
那么既然有判断结尾的,有没有可以判断开头的呢。Startswith这个就是判断开头的。
[name for name in filenames if name.startswith('1')]
这样就把以1开头的文件找出来了。
那么继续发散一下,假如我有如下的文件:假如我只是想以数字开头的txt文件找出来。该如何找呢
这种情况下需要用到正则表达式来进行匹配,但是endswith和startswith中并不能匹配正则表达式。下面介绍一种功能更强大的功能fnmatch.
方法如下:
可以看到fnmatch中我们用到了正则表达式的方法将以数字开头的txt文件给找出来
ret=[name for name in filenames if fnmatch(name,'[0-9].txt')]
再看下面的方法:这个是匹配所有py开头的文件
ret=[name for name in filenames if fnmatch(name,'py*')]
得到的结果如下:
['py_log.txt', 'py_result.jpg']
0 0
- python-cookbook学习笔记五
- Python cookbook 学习笔记一
- python cookbook 学习笔记--1
- [pyhton]python cookbook学习笔记
- python-cookbook学习笔记一
- python-cookbook学习笔记二
- python-cookbook学习笔记三
- python-cookbook学习笔记四
- python-cookbook学习笔记六
- python-cookbook学习笔记七
- python-cookbook学习笔记十一
- 《PHP Cookbook》学习笔记(五)
- python技巧(2):--python cookbook学习笔记
- python技巧(3)--python cookbook学习笔记
- python技巧(4)----python cookbook学习笔记
- Python技巧(6):cookbook学习笔记
- python-cookbook学习笔记十 迭代器 三
- python cookbook学习笔记十二:XML解析
- 基于vue.js重写Cnodejs.org社区的webapp
- 数据结构线性表之顺序表的基本操作插入、删除、遍历、初始化
- There is no Action mapped for namespace [/] and action name [repassword] associated with context pat
- oracle怎么用命令执行sql文件
- 【JZOJ5050】【GDOI2017模拟一试4.11】颜色树
- python-cookbook学习笔记五
- Tomcat修改get提交请求乱码
- X86反汇编速成班(条件指令,分支指令、重复指令、寄存器等)
- java.lang.ClassNotFoundException: com.jdbc.mysql.Driver
- HashMap 源码分析
- POJ
- 更改对于登录sa失败的解决方法
- Android getReadableDatabase和getWriteableDatabase的区别
- linux常用命令