1 文件处理

readlines() 和 writelines()方法可以讲列表元素依次写到文件中;

file类本身没有提供复制方法,可以使用read()和write()方法模拟实现文件的拷贝,也可以使用shutil模块:

shutil.copyfile('hello.txt','hello2.txt')
shutil.move('hello.txt','../')
shutil.copyfile('hello2.txt','hello3.txt')

批量改变当前目录中文件的名字:

方式一:

files = os.listdir(".")
for filename in files:
    pos = filename.find(".");
    if filename[pos+1:] == 'html':
        newname = filename[:pos+1] + 'htm'
        os.rename(filename,newname)

方式二:

files = os.listdir(".")
for filename in files:
    li = os.path.splitext(filename)
    if li[1] == 'html':
        newname = li[0] + '.htm'
        os.rename(filename,newname)

方式三:

可以使用glob模块中的glob方法获取指定条件的文件列表:

例如使用l = glob.glob('*.html')获取html为后缀的文件

l = glob.glob('c:\\w*\\*.txt')获取C盘中w开头目录中所有的文本文件。

统计文件中指定字符串的数量(是统计字符串而不是单词,字符串可以不是整个单词):

import re
def str_count(filename,s):
    count = 0
    f = file(filename,'r+')
    for line in f.readlines():
        li = re.findall(s,line);
        if li.count(s) > 0:
            count += li.count(s);
    f.close()
    return count

统计文件中指定单词的数量:

def word_count(filename,word):
    count = 0
    f = file(filename,'r+')
    for line in f.readlines():
        p = r'\b'+word+r'\b'
        print p
        li = re.findall(p,line);
        print li
        if li.count(word) > 0:
            count += li.count(word);
    f.close()
    return count

修改文件中指定字符串的代码,这里面有两种修改方式,即是否进行全词匹配:

#f1源文件,f2修改后文件,s待修改的字符串,_s为改后字符串,whole是否全词匹配,默认值0代表全词匹配
def replace_str (file1,file2,s,_s,whole = 0):
    f1 = file(file1,'r+')
    f2 = file(file2,'w+')
    p = r'\b' + s + r'\b'
    if whole == 1:
        p = s
    for line in f1.readlines():   
        t = re.sub(p,_s,line)
        f2.write(t)
    f1.close()
    f2.close()

difflib是python提供的比较序列(string list)差异的模块。实现了三个类:

1>SequenceMatcher 任意类型序列的比较 (可以比较字符串)
2>Differ 对字符串进行比较
3>HtmlDiff 将比较结果输出为html格式.

使用difflib进行序列的比较与结果输出:

import difflib
from pprint import pprint
a = 'pythonclub.org is wonderful'
b = 'Pythonclub.org also wonderful'
s = difflib.SequenceMatcher(None, a, b)
print "s.get_matching_blocks():"
pprint(s.get_matching_blocks())
print
print "s.get_opcodes():"
for tag, i1, i2, j1, j2 in s.get_opcodes():
    print ("%7s a[%d:%d] (%s) b[%d:%d] (%s)" %  (tag, i1, i2, a[i1:i2], j1, j2, b[j1:j2]))

来看另一个例子:

def reportSingleFile(srcfile, basefile, rpt):
    src = file(srcfile).read().split(' ')
    base = file(basefile).read().split(' ')
    import difflib
    s = difflib.SequenceMatcher( lambda x: len(x.strip()) == 0, # ignore blank lines
        base, src) 
    lstres = []
    for tag, i1, i2, j1, j2 in s.get_opcodes():
        print (tag, i1, i2, j1, j2)
        #print lstres
        if tag == 'equal':
            pass
        elif  tag == 'delete' :
            lstres.append('DELETE (line: %d)' % i1)
            lstres += base[i1:i2]
            lstres.append(' ')
        elif tag == 'insert' :   
            lstres.append('INSERT (line: %d)' % j1)
            lstres += src[j1:j2]
            lstres.append(' ')
        elif tag == 'replace' :   
            lstres.append('REPLACE:')
            lstres.append('Before (line: %d) ' % i1)
            lstres += base[i1:i2]
            lstres.append('After (line: %d) ' % j1)
            lstres += src[j1:j2]
            lstres.append(' ')
        else:
            pass
    print ' '.join(lstres)

使用Differ进行字符串比较

import difflib
diff = difflib.Differ().compare("start up","starT u4p")    
print "\n".join(list(diff))

使用HtmlDiff进行统计:

from difflib import *
s = HtmlDiff.make_file(HtmlDiff(),"start up","storT up")
f=open(r"C:/dong/result.html","w")
f.write(s)
f.close()

越来越发现python非常适合做一些日常开发的工具。平时,我们经常用一些比较工具,比较目录、比较两个文本文件的变化。最近发现,python的标准库里居然带了这些功能的算法。自己处理一下,就可以写出一个很实用的比较工具了。文件和目录比较Module叫做filecmp。最酷的是他提供了一个叫dircmp的类,可以直接比较两个目录。

目录遍历的三种方式:

1 使用递归函数:
def visitDir (path):
    li = os.listdir(path)
    for p in li:
        pathname = os.path.join(path,p)
        if not os.path.isfile(pathname):
            visitDir(pathname)
        else:
            print pathname

2 使用os.path.walk()

import os,os.path

def visitDir (arg,dirname,names):
    for filepath in names:
        print os.path.join(dirname,filepath)

path1 = 'C:\\dong'     
os.path.walk(path1,visitDir,())

3 使用os.walk()

def visitDir (path):
    for root,dirs,files in os.walk(path):
        for filepath in files:
            print os.path.join(root,filepath)

path1 = 'C:\\dong'     
visitDir(path1)

自己制作的简单日志记录文件:

#coding=gbk
import sys,time

sys.stderr = open("record.log","a")
f = open(r"hello.txt",'r')
t = time.strftime("%Y-%m_%d%X",time.localtime())
context = f.read()
if context:  #不为空
    sys.stderr.write(t + " " + context)
else:
    raise Exception,t+"异常信息"

使用Python模拟Java中的输入和输出流:

#coding=gbk
def FileInputStream (filename):
    try:
        f = open(filename)
        for line in f:
            for byte in line:
                yield byte
    except StopIteration,e:
        f.close()
        return
   
def FileOutputStream (inputStream,filename):
    try:
        f = open(filename,'w')
        while True:
            byte = inputStream.next()
            f.write(byte)
    except StopIteration,e:
        f.close()
        return

转载于:https://www.cnblogs.com/WayneZeng/archive/2013/06/09/3128224.html

精悍的Python代码段-转相关推荐

  1. python 代码转程序_精悍的Python代码段-转

    1 文件处理 readlines() 和 writelines()方法可以讲列表元素依次写到文件中: file类本身没有提供复制方法,可以使用read()和write()方法模拟实现文件的拷贝,也可以 ...

  2. 20个python代码_有用的20个python代码段(4)

    有用的20个python代码段(4): 1.使用列举获取索引和值对 以下脚本使用列举来迭代列表中的值及其索引.my_list = ['a', 'b', 'c', 'd', 'e'] for index ...

  3. 你应该学习的 20 个 Python 代码段

    作者丨Chaitanya Baweja 译者丨王文刚 策划丨万佳 Python 是一门优秀的编程语言.可读性和设计简单性是其广受欢迎的两个主要原因. 正如 Python 的禅宗所说: 美丽胜于丑陋. ...

  4. python代码段有什么用_25个超有用的Python代码段

    Python是一种通用的高级编程语言.用它可以做许多事,比如开发桌面 GUI 应用程序.网站和 Web 应用程序等. 作为一种高级编程语言,Python 还可以让你通过处理常见的编程任务来专注应用程序 ...

  5. 好用到哭!你需要立刻学会的20个Python代码段

    Python是一种非BS编程语言.设计简单和易读性是它广受欢迎的两大原因.正如Python的宗旨:美丽胜于丑陋,显式胜于隐式. 记住一些帮助提高编码设计的常用小诀窍是有用的.在必要时刻,这些小诀窍能够 ...

  6. python代码需要背吗-20个Python代码段,你需要立刻学会,好用到哭!

    Python是一种非BS编程语言.设计简单和易读性是它广受欢迎的两大原因.正如Python的宗旨:美丽胜于丑陋,显式胜于隐式. 记住一些帮助提高编码设计的常用小诀窍是有用的.在必要时刻,这些小诀窍能够 ...

  7. python 代码-20个Python代码段,你需要立刻学会,好用到哭!

    Python是一种非BS编程语言.设计简单和易读性是它广受欢迎的两大原因.正如Python的宗旨:美丽胜于丑陋,显式胜于隐式. 记住一些帮助提高编码设计的常用小诀窍是有用的.在必要时刻,这些小诀窍能够 ...

  8. 好用到哭!你需要立刻学会的20个Python代码段,你get到了吗?

    Python是一种非BS编程语言.设计简单和易读性是它广受欢迎的两大原因.正如Python的宗旨:美丽胜于丑陋,显式胜于隐式. 记住一些帮助提高编码设计的常用小诀窍是有用的.在必要时刻,这些小诀窍能够 ...

  9. python代码-20个Python代码段,你需要立刻学会,好用到哭!

    Python是一种非BS编程语言.设计简单和易读性是它广受欢迎的两大原因.正如Python的宗旨:美丽胜于丑陋,显式胜于隐式. 记住一些帮助提高编码设计的常用小诀窍是有用的.在必要时刻,这些小诀窍能够 ...

最新文章

  1. mysql custom_MySQL安装教程
  2. wxWidgets:wxPGProperty类用法
  3. java模糊查询比对方法_Java多条件和模糊查询
  4. 译 | .NET Core 3.0 对诊断的改进
  5. xp系统设置锁定计算机,系统锁定时不关机的诀窍 给XP系统关闭计算机再加一把锁...
  6. python 找到两个排序数组的中位数_Python查找两个有序列表中位数的方法【基于归并算法】...
  7. linux上soul网关开通,soul 网关入门篇(一):搭建篇
  8. maven spring 使用memcached方法
  9. Python入门--常用的内置模块
  10. Python List Comprehension
  11. Lazada新手开店费用有哪些、具体开店流程详解!
  12. BMCBIOS全擦升级
  13. Android4,flutter插件引用第三方库
  14. iperf 安卓 灌包命令_iperf工具测速
  15. android 车牌输入键盘
  16. HTC one/M7电信802d 毒蛇ViperOne2.1.0/高级毒蛇工具/完美root,精简/更多自定义,稳定,流畅ROM
  17. intel 显卡 opencl安装
  18. Tracking By Detecting的多目标跟踪
  19. mas6a801 sw tree disp
  20. 如何制作 Sketch 插件

热门文章

  1. php设计模式课程---9、桥接模式是什么
  2. python学习笔记(二)之列表
  3. Omi v1.0震撼发布 - 令人窒息的Web组件化框架
  4. http常见的get请求方式和set请求方式。
  5. Gradle之使用Gradle的命令行
  6. 在JSP中应用JavaBean
  7. ​求1000以内是3或者是5的倍数的值的和
  8. python文件生成电脑exe文件
  9. 流畅的python 数据模型
  10. 问题 L: 求100以内的素数