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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/409043.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

[机器学习笔记]Note14--推荐系统

继续是机器学习课程的笔记,本节课将介绍推荐系统的内容。 问题形式化 推荐系统是机器学习的一个非常重要的应用,在很多音乐、购物等网站都有推荐系统,如豆瓣,淘宝,网易云音乐等都是有使用到推荐系统的,因…

手机应用开发的方式不能完全套用到iPad上

对于一些复杂的游戏,许多人已经不能满足于手机小巧的屏幕,大屏的画面感就成为许多人选择平板电脑的重要因素。当越来越多的80后开始为人父母,孩子们从大人手中得到的礼物,也不再局限于零食、玩具和游乐场入场券。随着智能手机的普…

java面向对象编程思想_Java面向对象编程思想

面向对象三个特征:封装、继承、多态封装:语法:属性私有化(private)、提供相对应的get/set 的方法进行访问(public)、在set/get的方法中对属性的数据 做相对应的业务逻辑的判断思想:封装外面的程序不能直接访问本类的属性&#xff…

[机器学习笔记]Note15--大规模机器学习

继续是机器学习课程的笔记,本节内容主要是介绍大规模机器学习的内容。 大型数据集的学习 对于一个过拟合的模型,增加数据集的规模可以帮助避免过拟合,并获得一个更好的结果。 但是对于一个大规模的数据,比如有100万个数据量的训…

Linux管道和重定向 ---多命令协作

管道及重定向就是Linux多命令协作的基础机制Linux的Shell对数据流进行以下分类定义:   stdin 标准输入 编号为:0 默认:键盘  stdout 标准输出 编号为:1 默认:终端  stderr 标准错误 编号为&…

java 骰子_基本随机滚动骰子Java

5 个答案:答案 0 :(得分:12)Random.nextInt()具有不可预测的行为 - 它可以为整数生成所有可能的值,包括负数。改为使用Random.nextInt(numSides) - 它将从[0,numSides]返回一个整数,即包括0并排除numSides。要获得所需的功能[1&am…

[机器学习笔记]Note16--应用示例:图像文字识别

继续是机器学习课程的笔记,本节课是最后一节内容了,主要是介绍一个应该–图中文字的识别。 问题描述和流程图 图像文字识别应用就是从给定的图片中识别文字。这比从一份扫描文档中识别文字要复杂得多。一个例子图片如下所示: 为了完成这样的…

java中文处理_Java的中文乱码处理

1,设置编译器的编码(Eclipse)、Window >preferences>Workspace> Text file encoding下的Other设置为UTF-8设置jsp页面的编码(Eclipse)Window >preferences>Web> JSPFile>Encoding设置为UTF-82.从前端获取的数据乱码(1)request.setCharacterEnc…

[线性代数]Note2--矩阵消元

第二节介绍矩阵消元的知识. 消元法 首先是给出一个例子来说明消元法的使用,例子如下所示: ⎧⎩⎨x2yz23x8yz124yz2\begin{cases} x+2y+z=2 \\ 3x+8y+z=12 \\4y+z=2 \end{cases}用矩阵表示就是 A⎡⎣⎢130284111⎤⎦⎥b⎡⎣⎢2122⎤⎦⎥A = \left[ \be…

error LNK2019: unresolved external symbol _WinMain@16 referenced in function ___tmainCRTStartup

一、问题描述: error LNK2019: unresolved external symbol _WinMain16 referenced in function ___tmainCRTStartup 二、产生原因: 1. 你用vc建了一个控制台程序,它的入口函数应该是main, 而你使用了WinMain.2. 你用vc打开了一个.c/.cpp 文…

python小老鼠编程_邯郸pythonnot学习费用多少

邯郸pythonnot学习费用多少更新时间:2020-08-02 12:49:04注意:如果出现错误,可能是因为安装时未勾选AddPython3.5toPATH选项,此时卸载Python后重新安装时勾选AddPython3.5toPATH选项即可。1.2Mac中安装Python3Mac系统中自带了Pyth…

[线性代数]Note3--乘法和逆矩阵

继续是线性代数的学习笔记,第三节课乘法和逆矩阵 矩阵乘法 首先是对于矩阵相乘,如矩阵A和B相乘得到C,即A*BC;那么如果要得到矩阵C的一个元素,如c34,其求解如下所示: c34a31∗b14a32∗b24…∑k1na3kbk4c_{34} = a_{3…

数学/sgu 130 Circle

题意 一个圆上有2k点,请输出点于点之间连线使得所分区域块数最小的方案总数以及区域数 分析 2k个点最少能把平面分成k1的区域,易证; 至于方案数,利用递推和乘法原理 令f[i]表示2i个点时的方案数,f[0]f[1]1,则f[i]sigma…

java多线程调用nsq消费_spark-streaming连接消费nsq

spark-streaming连接消费nsq目的使用 NSQ作为消息流使用 spark-streaming 进行消费对数据进行清洗后,保存到hive仓库中连接方案1、编写Spark Streaming Custom Receivers(spark-streaming 自定义接收器),详细见文档2、使用 nsq 官方提供的Java程序连接包…

[线性代数]Note4--A的LU分解转置-置换-向量空间

继续是线性代数的学习笔记,这次的笔记包含第四、五、六节三节课的内容。 第四节课是介绍A的LU分解。A的LU分解是指将矩阵A分解成一个下三角矩阵和一个上三角矩阵的乘积。其主要应用在数值分析中,用来解线性方程、求反矩阵或者计算行列式。 第五节课是介…