Python字符串和文件操作常用函数分析
作者:sumory 发布时间:2023-07-25 08:42:23
标签:Python,字符串,文件
本文实例分析了Python字符串和文件操作常用函数。分享给大家供大家参考。具体如下:
# -*- coding: UTF-8 -*-
'''
Created on 2010-12-27
@author: sumory
'''
import itertools
def a_containsAnyOf_b(seq,aset):
'''判断seq中是否含有aset里的一个或者多个项
seq可以是字符串或者列表
aset应该是字符串或者列表'''
for item in itertools.ifilter(aset.__contains__,seq):
return True
return False
def a_allIn_b(seq,aset):
'''判断seq中的所有项是否都在aset里
seq可以是字符串或者列表
aset应该是字符串或者列表'''
for item in seq:
if item not in aset:
return False
return True
def a_containsAll_b(seq,aset):
'''判断seq是否包含aset里的所有项
seq可以是字符串或者列表
aset应该是字符串或者列表
任何一个set对象a,a.difference(b)等价于a-set(b),即返回a中所有不属于b的元素'''
return not set(aset).difference(seq)
import string
#生成所有字符的可复用的字符串
sumory_allchars=string.maketrans('','')
def makefilter(keep):
'''返回一个函数,此函数接受一个源字符串作为参数\
并返回字符串的一个部分拷贝\
此拷贝只包括keep中的字符,keep必须是一个普通的字符串\
调用示例:makefilter('abca ')('abcdefgh ijkal cba')\
在后面的字符串中保留前面出现的字符 abc a cba
'''
#按照sumory_allchars规则剔除sumory_allchars字符串中的keep里的字符
#这里得到keep在sumory_allchars的补集
deletechars=sumory_allchars.translate(sumory_allchars,keep)
#生成并返回需要的过滤函数(作为闭包)
def realdelete(sourseStr):
return sourseStr.translate(sumory_allchars,deletechars)
return realdelete
def list_removesame(list):
'''删除list中的重复项'''
templist=[]
for c in list:
if c not in templist:
templist.append(c)
return templist
def re_indent(str,numberofspace):
'''
缩进\
将字符串str中按换行符划分并在每句前加上numberofspace个space\
再组合成字符串'''
spaces=numberofspace*' '
lines=[spaces+line.strip() for line in str.splitlines()]
return '\n'.join(lines)
def replace_strby_dict(sourseStr,dict,marker='"',safe=False):
'''使用字典替换源字符串中的被marker包裹的相应值'''
#如果safe为True,那么字典中没找到key时不替换
if safe:
def lookup(w):
return dict.get(w,w.join(marker*2))
#w.join(marker*2)用marker包裹w
#如果safe为False,那么字典中没找到key时抛异常\
#若将dict[w]换为dict.get(w)则没找到时返回None
else:
def lookup(w):
return dict[w]
#根据marker切分源字符串
splitparts=sourseStr.split(marker)
#取出切分后的奇数项
#因为切分后,列表中源字符串中marker包裹的项肯定位于基数部位
#就算是'"first"s is one'这样的字符串也是如此
#分割后的第0项为空串,第1项为first
splitparts[1::2]=map(lookup,splitparts[1::2])
return ''.join(splitparts)
def simply_replace_strby_dict(sourseStr,dict,safe=True):
'''根据dict内容替换sourseStr原串中$标记的子字符串\
dict= {'name':'sumory','else':'default'}
$$5 -> $5
$else -> default
${name}'s method -> sumory's method
'''
style=string.Template(sourseStr)
#如果safe,在dict中找不到的话不会替换,照样保留原串
if safe:
return style.safe_substitute(dict)
#false,找不到会抛异常
else:
return style.substitute(dict)
##################################################
def scanner(object,linehandler):
'''用linehandler方法遍历object的每一项'''
for line in object:
linehandler(line)
def printfilelines(path):
'''读取path路径下的文件屏逐行打印'''
fileobject=open(path,'r')#open不用放到try里
try:
for line in fileobject:
print(line.rstrip('\n'))
finally:
fileobject.close()
def writelisttofile(path,ilist):
fileobject=open(path,'w')
try:
fileobject.writelines(ilist)
finally:
fileobject.close()
import zipfile
def listzipfilesinfo(path):
z=zipfile.ZipFile(path,'r')
try:
for filename in z.namelist():
bytes=z.read(filename)
print('File:%s Size:%s'%(unicode(filename, 'cp936').decode('utf-8'),len(bytes)))
finally:
z.close()
import os,fnmatch
def list_all_files(root,patterns='*',single_level=False,yield_folders=False):
'''列出目录(或者及其子目录下的文件)'''
#分割模式到列表
patterns=patterns.split(';')
for path,subdirs,files in os.walk(root):
if yield_folders:
files.extend(subdirs)
files.sort()
for name in files:
for pat in patterns:
if fnmatch.fnmatch(name, pat):
yield '/'.join(unicode(os.path.join(path,name),'cp936').split('\\'))
break
if single_level:
break
def swapextensions(root,before,after):
if before[:1]!='.':
before='.'+before
extensionlen=-len(before)
if after[:1]!='.':
after='.'+after
for path,subdirs,files in os.walk(root):
for oldfile in files:
if oldfile[extensionlen:]==before:
oldfile=os.path.join(path,oldfile)
newfile=oldfile[:extensionlen]+after
os.rename(oldfile, newfile)
希望本文所述对大家的Python程序设计有所帮助。


猜你喜欢
- 默认情况下,Map输出的结果会对Key进行默认的排序,但是有时候需要对Key排序的同时还需要对Value进行排序,这时候就要用到二次排序了。
- 选用Access作为建站数据库,除了低成本的原因之外,主要是Access数据库的易发布性,一个MDB文件就包括了全部的表和数据,开发完后连同
- 目录信号:官方介绍:blinker 使用命名信号匿名信号组播信号接收方订阅主题装饰器用法可订阅主题的装饰器检查信号是否有接收者检查订阅者是否
- 前言SQL 语言无处不在。SQL 已经不仅仅是技术人员的专属技能了,似乎人人都会写SQL,就如同人人都是产品经理一样。如果你是做后台开发的,
- 让我们首先考虑正方形和长方形。如果我们认为在接口方面,忽略了实现细节,方块是否是矩形的子类型?子类型的定义取决于Liskov代换原理。为了成
- 前言一个程序语言在运行的过程中,变量的声明在整个程序的生命周期中,是不断在进行的过程。任何程序的计算都会涉及至少一个变量,而计算的结果的则可
- 本文给大家分享的是查看MySQL连接的root密码的方法,下面话不多说来来看正文:1.首先我们进到MySQL的bin目录下➜ cd /usr
- 最近在OpenCV的官方文档上看到一个人脸识别的示例代码,想要实现。由于我之前下好的OpenCV3.1中并不自带相关的函数,即opencv2
- 问题:编写一个在1,2,…,9(顺序不能变)数字之间插入+或-或什么都不插入,使得计算结果总是100的程序,并输出所有的可能性。例如:1 +
- 按照本文操作和体会,会对sql优化有个基本最简单的了解,其他深入还需要更多资料和实践的学习: 1. 建表: 代码如下:creat
- 下面是ThoughtBot 的Git使用规范流程。我从中学到了很多,推荐你也这样使用Git。第一步:新建分支首先,每次开发新功能,都应该新建
- MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,目前属于 Oracle 旗下公司。MySQL 最流行的关系型数据库管
- 先来看实现效果。1.遇到问题因为随着功能的增多,table操作栏中的功能按钮增多,操作列长度就增长,导致不是很美观。所以产品要求超过三个按钮
- 通常我们在制作上图的时候,会分别给四个div加上不同的css属性,来实现中间间隔。但我们更希望的是不需要对html标签做标识,直接能通过cs
- 一、简介项目中用到了MySQL,参考网上的例子做了安装和基本使用,本文简单的介绍一下。二、环境准备操作系统:Win10三、教程1、下载安装包
- 问题一:TypeError: a bytes-like object is required, not 'str'解决:该问
- 如下所示:import serialimport sysimport osimport timeimport redef wait_for_
- 本文为大家分享了python实现扫雷游戏的具体代码,供大家参考,具体内容如下本文实例借鉴mvc模式,核心数据为model,维护1个矩阵,0表
- 问题一开始安装的Autoprefixer是最新版本的3.0.1,一波操作后发现无效想是不是因为没设置browsers?那就设置一下吧&quo
- 本文主要给大家分享一个实战项目,通过python代码写一款我们儿时大多数人玩过的游戏---小弹球游戏。只不过当时,我们是在游戏机上玩,现在我