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编写web API的教程
Apr 30 Python
探究python中open函数的使用
Mar 01 Python
Python实现自动添加脚本头信息的示例代码
Sep 02 Python
Python面向对象之反射/自省机制实例分析
Aug 24 Python
Python脚本修改阿里云的访问控制列表的方法
Mar 08 Python
pytorch索引查找 index_select的例子
Aug 18 Python
Django Admin 上传文件到七牛云的示例代码
Jun 20 Python
Python限制内存和CPU使用量的方法(Unix系统适用)
Aug 04 Python
8种常用的Python工具
Aug 05 Python
Python钉钉报警及Zabbix集成钉钉报警的示例代码
Aug 17 Python
pytorch中的numel函数用法说明
May 13 Python
python基础之函数的定义和调用
Oct 24 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
学习discuz php 引入文件的方法DISCUZ_ROOT
2009/06/21 PHP
php下清空字符串中的HTML标签的代码
2010/09/06 PHP
PHP取进制余数函数代码
2012/01/19 PHP
php 无限分类 树形数据格式化代码
2016/10/11 PHP
Yii框架用户登录session丢失问题解决方法
2017/01/07 PHP
jQuery使用手册之三 CSS操作
2007/03/24 Javascript
JavaScript 面向对象之命名空间
2010/05/04 Javascript
javascript下高性能字符串连接StringBuffer类
2010/08/16 Javascript
javascript中的一些注意事项 更新中
2010/12/06 Javascript
JavaScript ( (__ = !$ + $)[+$] + ({} + $)[_/_] +({} + $)[_/_] )
2011/02/25 Javascript
Javacript实现颜色梯度变化和渐变的效果代码
2013/05/31 Javascript
jquery操作下拉列表、文本框、复选框、单选框集合(收藏)
2014/01/08 Javascript
Jquery zTree 树控件异步加载操作
2016/02/25 Javascript
大型JavaScript应用程序架构设计模式
2016/06/29 Javascript
jQuery Easyui学习教程之实现datagrid在没有数据时显示相关提示内容
2016/07/09 Javascript
javascript简单实现等比例缩小图片的方法
2016/07/27 Javascript
详解JavaScript时间处理之几个月前或几个月后的指定日期
2016/12/21 Javascript
jquery mobile移动端幻灯片滑动切换效果
2020/04/15 Javascript
js HTML5 canvas绘制图片的方法
2017/09/08 Javascript
vue2.0 自定义 饼状图 (Echarts)组件的方法
2018/03/02 Javascript
[02:44]2014DOTA2 国际邀请赛中国区预选赛 大神红毯秀
2014/05/25 DOTA
python解析xml模块封装代码
2014/02/07 Python
python实现从ftp服务器下载文件的方法
2015/04/30 Python
JSON Web Tokens的实现原理
2017/04/02 Python
Python爬虫Scrapy框架CrawlSpider原理及使用案例
2020/11/20 Python
python 日志模块logging的使用场景及示例
2021/01/04 Python
使用Canvas操作像素的方法
2018/06/14 HTML / CSS
html5简介及新增功能介绍
2020/05/18 HTML / CSS
施华洛世奇水晶荷兰官方网站:SWAROVSKI荷兰
2017/05/12 全球购物
联想英国官网:Lenovo英国
2019/07/17 全球购物
医学类导师推荐信范文
2013/11/19 职场文书
编辑找工作求职信范文
2013/12/16 职场文书
经贸专业毕业生求职信范文
2014/05/01 职场文书
2014物价局民主生活会对照检查材料思想汇报
2014/09/24 职场文书
超详细Python解释器新手安装教程
2021/05/10 Python
MySQL 不等于的三种使用及区别
2021/06/03 MySQL