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


Posted in Python onApril 08, 2015

本文实例分析了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程序设计有所帮助。

Python 相关文章推荐
在Python中使用NLTK库实现对词干的提取的教程
Apr 08 Python
详解Python中for循环的使用
Apr 14 Python
Python生成数字图片代码分享
Oct 31 Python
浅析PHP与Python进行数据交互
May 15 Python
Python字典中的键映射多个值的方法(列表或者集合)
Oct 17 Python
使用python读取.text文件特定行的数据方法
Jan 28 Python
关于python中密码加盐的学习体会小结
Jul 15 Python
python爬虫 Pyppeteer使用方法解析
Sep 28 Python
Python如何根据时间序列数据作图
May 12 Python
Python函数__new__及__init__作用及区别解析
Aug 31 Python
python树莓派通过队列实现进程交互的程序分析
Jul 04 Python
python中mongodb包操作数据库
Apr 19 Python
Python遍历zip文件输出名称时出现乱码问题的解决方法
Apr 08 #Python
python smtplib模块发送SSL/TLS安全邮件实例
Apr 08 #Python
python复制与引用用法分析
Apr 08 #Python
Python导入txt数据到mysql的方法
Apr 08 #Python
python集合类型用法分析
Apr 08 #Python
在Python中使用Mako模版库的简单教程
Apr 08 #Python
python中requests模块的使用方法
Apr 08 #Python
You might like
解析php中var_dump,var_export,print_r三个函数的区别
2013/06/21 PHP
PHP获取和操作配置文件php.ini的几个函数介绍
2013/06/24 PHP
thinkphp实现图片上传功能
2016/01/13 PHP
PHP中递归的实现实例详解
2017/11/14 PHP
laravel 解决路由除了根目录其他都404的问题
2019/10/18 PHP
IE7提供XMLHttpRequest对象为兼容
2007/03/08 Javascript
js汉字转拼音实现代码
2013/02/06 Javascript
js弹出模式对话框,并接收回传值的方法
2013/03/12 Javascript
js点击事件链接的问题解决
2014/04/25 Javascript
一行命令搞定node.js 版本升级
2014/07/20 Javascript
javascript实现根据iphone屏幕方向调用不同样式表的方法
2015/07/13 Javascript
浅析JavaScript中浏览器的兼容问题
2016/04/19 Javascript
JQuery Ajax WebService传递参数的简单实例
2016/11/02 Javascript
js实现类bootstrap模态框动画
2017/02/07 Javascript
jQuery选择器特殊字符与属性空格问题
2017/08/14 jQuery
checkbox:click事件触发span元素内容改变的方法
2017/09/11 Javascript
用vue封装插件并发布到npm的方法步骤
2017/10/18 Javascript
vue的传参方式汇总和router使用技巧
2018/05/22 Javascript
微信小程序实现运动步数排行功能(可删除)
2018/07/05 Javascript
Koa 中的错误处理解析
2019/04/09 Javascript
微信小程序 wx.getUserInfo引导用户授权问题实例分析
2020/03/09 Javascript
pycharm 使用心得(八)如何调用另一文件中的函数
2014/06/06 Python
python实现的正则表达式功能入门教程【经典】
2017/06/05 Python
python实现对指定输入的字符串逆序输出的6种方法
2018/04/26 Python
pandas 小数位数 精度的处理方法
2018/06/09 Python
Numpy之random函数使用学习
2019/01/29 Python
python 线性回归分析模型检验标准--拟合优度详解
2020/02/24 Python
python安装sklearn模块的方法详解
2020/11/28 Python
葡萄牙鞋子品牌:Fair
2016/12/10 全球购物
软件测试英文面试题
2012/10/14 面试题
大学活动邀请函
2014/01/28 职场文书
会计专业应届生自荐信
2014/06/28 职场文书
2019年国庆祝福语(70句)
2019/09/19 职场文书
Redis 配置文件重要属性的具体使用
2021/05/20 Redis
Vue-Element-Admin集成自己的接口实现登录跳转
2021/06/23 Vue.js
自从在 IDEA 中用了热部署神器 JRebel 之后,开发效率提升了 10(真棒)
2021/06/26 Java/Android