Chinaunix首页 | 论坛 | 博客

分类: Python/Ruby

2014-02-26 23:28:16

关于正则表达式模块的匹配和替换功能

#!/usr/bin/env python3

# Fix Python script(s) to reference the interpreter via /usr/bin/env python.
# Warning: this overwrites the file without making a backup.

import sys
import re                   #正则表达式

def main():
    for filename in sys.argv[1:]:
        try:
            f = open(filename, 'r')
        except IOError as msg:
            print(filename, ': can\'t open :', msg)
            continue
        line = f.readline()
        if not re.match('^#! */usr/local/bin/python', line):            #匹配方法
            print(filename, ': not a /usr/local/bin/python script')
            f.close()
            continue
        rest = f.read()            #这是读接下来的行,竟然没有用到缓冲区的大小的设置.为什么上一方法不这么使用呢?
        f.close()
        line = re.sub('/usr/local/bin/python',
                      '/usr/bin/env python ', line)         #re还包含了字符串的替换功能
        print(filename, ':', repr(line))                     #打印字符串,不能打印的字符以转义字符显示. 这是一个内置函数
        f = open(filename, "w")                            #将文件内容都写进去,且都写的都是同一个文件
        f.write(line)
        f.write(rest)
        f.close()


if __name__ == '__main__':
    main()


小节:
        1、我们可以通过file.read()读取文件内容,或者通过urllib.urlopen抓取网页信息,然后read()到变量,但是如果文件很大比如有20G,或者网页是无限循环输出的,你就只能死机了,好的习惯是给read加上一个参数,指定要读取的最大行数
        2、如果要查看文件内容,则需要考虑文件编码的问题。 介绍了文件编码,主要有:默认的编码方式是有系统决定的,指定对编码方式才能正确显示文件内容.
    


阅读(1016) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~