首页 > 代码库 > 【Python进阶】02、文本处理与IO深入理解
【Python进阶】02、文本处理与IO深入理解
1、有一个文件,单词之间使用空格、分号、逗号、或者句号分隔,请提取全部单词。
解决方案:
使用\w匹配并提取单词,但是存在误判
使用str.split分隔字符字符串,但是需要多次分隔
使用re.split分隔字符串
In [4]: help(re.split) Help on function split in module re: split(pattern, string, maxsplit=0, flags=0) Split the source string by the occurrences of the pattern, returning a list containing the resulting substrings.
In [23]: text = "i‘m xj, i love Python,,Linux; i don‘t like windows." In [24]: fs = re.split(r"(,|\.|;|\s)+\s*", text) In [25]: fs Out[25]: ["i‘m", ‘ ‘, ‘xj‘, ‘ ‘, ‘i‘, ‘ ‘, ‘love‘, ‘ ‘, ‘Python‘, ‘,‘, ‘Linux‘, ‘ ‘, ‘i‘, ‘ ‘, "don‘t", ‘ ‘, ‘like‘, ‘ ‘, ‘windows‘, ‘.‘, ‘‘] In [26]: fs[::2] #提取出单词 Out[26]: ["i‘m", ‘xj‘, ‘i‘, ‘love‘, ‘Python‘, ‘Linux‘, ‘i‘, "don‘t", ‘like‘, ‘windows‘, ‘‘] In [27]: fs[1::2] #提取出符号 Out[27]: [‘ ‘, ‘ ‘, ‘ ‘, ‘ ‘, ‘,‘, ‘ ‘, ‘ ‘, ‘ ‘, ‘ ‘, ‘.‘] In [53]: fs = re.findall(r"[^,\.;\s]+", text) In [54]: fs Out[54]: ["i‘m", ‘xj‘, ‘i‘, ‘love‘, ‘Python‘, ‘Linux‘, ‘i‘, "don‘t", ‘like‘, ‘windows‘] In [55]: fh = re.findall(r‘[,\.;\s]‘, text) In [56]: fh Out[56]: [‘ ‘, ‘,‘, ‘ ‘, ‘ ‘, ‘ ‘, ‘,‘, ‘,‘, ‘;‘, ‘ ‘, ‘ ‘, ‘ ‘, ‘ ‘, ‘.‘]
2、有一个目录,保存了若干文件,找出其中所有的C源文件(.c和.h)
解决方案:
使用listdir
使用str.endswith判断
In [13]: s = "xj.c" In [14]: s.endswith(".c") Out[14]: True In [15]: s.endswith(".h") Out[15]: False In [16]: import os In [17]: os.listdir("/usr/include/") Out[17]: [‘libmng.h‘, ‘netipx‘, ‘ft2build.h‘, ‘FlexLexer.h‘, ‘selinux‘, ‘QtSql‘, ‘resolv.h‘, ‘gio-unix-2.0‘, ‘wctype.h‘, ‘python2.6‘, ‘scsi‘, . . . ‘QtOpenGL‘, ‘mysql‘, ‘byteswap.h‘, , ‘xj.c‘ ‘mntent.h‘, ‘semaphore.h‘, ‘stdio_ext.h‘, ‘libxml2‘] In [21]: for filename in os.listdir("/usr/include"): if filename.endswith(".c"): print filename ....: xj.c In [22]: for filename in os.listdir("/usr/include"): if filename.endswith((".c", ".h")): #这里元祖是或的关系 print filename ....: libmng.h ft2build.h FlexLexer.h nss.h png.h utime.h ieee754.h features.h xj.c . . . verto-module.h semaphore.h stdio_ext.h In [23]:
3、fnmath模块
支持和shell一样的通配符
In [24]: help(fnmatch) #是否区分大小写与操作系统一致 Help on function fnmatch in module fnmatch: fnmatch(name, pat) Test whether FILENAME matches PATTERN. Patterns are Unix shell style: * matches everything ? matches any single character [seq] matches any character in seq [!seq] matches any char not in seq An initial period in FILENAME is not special. Both FILENAME and PATTERN are first case-normalized if the operating system requires it. If you don‘t want this, use fnmatchcase(FILENAME, PATTERN). ~ (END) In [47]: fnmatch.fnmatch("sba.txt", "*txt") Out[47]: True In [48]: fnmatch.fnmatch("sba.txt", "*t") Out[48]: True In [49]: fnmatch.fnmatch("sba.txt", "*b") Out[49]: False In [50]: fnmatch.fnmatch("sba.txt", "*b*") Out[50]: True
案例: 你有一个程序处理文件,文件名由用户输入,你需要支持和shell一样的通配符。
[root@Node3 src]# cat test1.py #!/usr/local/bin/python2.7 #coding: utf-8 import os import sys from fnmatch import fnmatch ret = [name for name in os.listdir(sys.argv[1]) if fnmatch(name, sys.argv[2])] print ret [root@Node3 src]# python2.7 test1.py /usr/include/ *.c [‘xj.c‘]
4、re.sub() 文本替换
In [53]: help(re.sub) Help on function sub in module re: sub(pattern, repl, string, count=0, flags=0) Return the string obtained by replacing the leftmost non-overlapping occurrences of the pattern in string by the replacement repl. repl can be either a string or a callable; if a string, backslash escapes in it are processed. If it is a callable, it‘s passed the match object and must return a replacement string to be used.
案例:有一个文本,文本里的日期使用的是%m/%d/%Y的格式,你需要把它全部转化成%Y-%m-%d的格式。
In [55]: text = "Today is 11/08/2016, next class time 11/15/2016" In [56]: new_text = re.sub(r‘(\d+)/(\d+)/(\d+)‘, r‘\3-\2-\1‘, text ) In [57]: new_text Out[57]: ‘Today is 2016-08-11, next class time 2016-15-11‘
5、str.format 字符串格式化
案例:你需要创建一个小型的模版引擎,不需要逻辑控制,但是需要使用变量来填充模版
In [71]: help(str.format) Help on method_descriptor: format(...) S.format(*args, **kwargs) -> string Return a formatted version of S, using substitutions from args and kwargs. The substitutions are identified by braces (‘{‘ and ‘}‘). (END)
本文出自 “xiexiaojun” 博客,请务必保留此出处http://xiexiaojun.blog.51cto.com/2305291/1870832
【Python进阶】02、文本处理与IO深入理解
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。