登录
首页精彩阅读Python字符串和文件操作常用函数分析
Python字符串和文件操作常用函数分析
2017-09-04
收藏

Python字符串和文件操作常用函数分析

这篇文章主要介绍了Python字符串和文件操作常用函数,实例分析了Python中字符串及文件操作的常用技巧,非常具有实用价值,需要的朋友可以参考下.

本文实例分析了Python字符串和文件操作常用函数。分享给大家供大家参考。具体如下:


# -*- coding: UTF-8 -*-
'''
Created on 2010-12-27
@author: sumory
'''
importitertools
defa_containsAnyOf_b(seq,aset):
  '''判断seq中是否含有aset里的一个或者多个项
    seq可以是字符串或者列表
    aset应该是字符串或者列表'''
  foriteminitertools.ifilter(aset.__contains__,seq):
    returnTrue
  returnFalse
defa_allIn_b(seq,aset):
  '''判断seq中的所有项是否都在aset里
    seq可以是字符串或者列表
    aset应该是字符串或者列表'''
  foriteminseq:
    ifitemnotinaset:
      returnFalse
  returnTrue
defa_containsAll_b(seq,aset):
  '''判断seq是否包含aset里的所有项
    seq可以是字符串或者列表
    aset应该是字符串或者列表
         任何一个set对象a,a.difference(b)等价于a-set(b),即返回a中所有不属于b的元素'''
  returnnotset(aset).difference(seq)
  
importstring
#生成所有字符的可复用的字符串
sumory_allchars=string.maketrans('','')
defmakefilter(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)
  #生成并返回需要的过滤函数(作为闭包)
  defrealdelete(sourseStr):
    returnsourseStr.translate(sumory_allchars,deletechars)
  returnrealdelete
deflist_removesame(list):
  '''删除list中的重复项'''
  templist=[]
  forcinlist:
    ifcnotintemplist:
      templist.append(c)
  returntemplist
defre_indent(str,numberofspace):
  '''
  缩进\
  将字符串str中按换行符划分并在每句前加上numberofspace个space\
  再组合成字符串'''
  spaces=numberofspace*' '
  lines=[spaces+line.strip()forlineinstr.splitlines()]
  return'\n'.join(lines)
defreplace_strby_dict(sourseStr,dict,marker='"',safe=False):
  '''使用字典替换源字符串中的被marker包裹的相应值'''
  #如果safe为True,那么字典中没找到key时不替换
  ifsafe:
    deflookup(w):
      returndict.get(w,w.join(marker*2))
   #w.join(marker*2)用marker包裹w
  #如果safe为False,那么字典中没找到key时抛异常\
  #若将dict[w]换为dict.get(w)则没找到时返回None
  else:
    deflookup(w):
      returndict[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)
defsimply_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中找不到的话不会替换,照样保留原串
  ifsafe:
    returnstyle.safe_substitute(dict)
  #false,找不到会抛异常
  else:
    returnstyle.substitute(dict)
##################################################
defscanner(object,linehandler):
  '''用linehandler方法遍历object的每一项'''
  forlineinobject:
    linehandler(line)
defprintfilelines(path):
  '''读取path路径下的文件屏逐行打印'''
  fileobject=open(path,'r')#open不用放到try里
  try:
    forlineinfileobject:
      print(line.rstrip('\n'))
  finally:
    fileobject.close()
defwritelisttofile(path,ilist):
  fileobject=open(path,'w')
  try:
    fileobject.writelines(ilist)
  finally:
    fileobject.close()
importzipfile
deflistzipfilesinfo(path):
  z=zipfile.ZipFile(path,'r')
  try:
    forfilenameinz.namelist():
      bytes=z.read(filename)
      print('File:%s Size:%s'%(unicode(filename,'cp936').decode('utf-8'),len(bytes)))
  finally:
    z.close()
  
importos,fnmatch
deflist_all_files(root,patterns='*',single_level=False,yield_folders=False):
  '''列出目录(或者及其子目录下的文件)'''
  #分割模式到列表
  patterns=patterns.split(';')
  forpath,subdirs,filesinos.walk(root):
    ifyield_folders:
      files.extend(subdirs)
    files.sort()
    fornameinfiles:
      forpatinpatterns:
        iffnmatch.fnmatch(name, pat):
          yield'/'.join(unicode(os.path.join(path,name),'cp936').split('\\'))
          break
    ifsingle_level:
      break
defswapextensions(root,before,after):
  ifbefore[:1]!='.':
    before='.'+before
  extensionlen=-len(before)
  ifafter[:1]!='.':
    after='.'+after
  forpath,subdirs,filesinos.walk(root):
    foroldfileinfiles:
      ifoldfile[extensionlen:]==before:
        oldfile=os.path.join(path,oldfile)
        newfile=oldfile[:extensionlen]+after
        os.rename(oldfile, newfile)

希望本文所述对大家的Python程序设计有所帮助。



数据分析咨询请扫描二维码

客服在线
立即咨询