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-嵌套列表list的全面解析
Jun 08 Python
python 中split 和 strip的实例详解
Jul 12 Python
python中import reload __import__的区别详解
Oct 16 Python
Python3 queue队列模块详细介绍
Jan 05 Python
Python+OpenCV实现图像融合的原理及代码
Dec 03 Python
python存储16bit和32bit图像的实例
Dec 05 Python
Python中单线程、多线程和多进程的效率对比实验实例
May 14 Python
调用其他python脚本文件里面的类和方法过程解析
Nov 15 Python
TensorFlow内存管理bfc算法实例
Feb 03 Python
树莓派4B安装Tensorflow的方法步骤
Jul 16 Python
JupyterNotebook 输出窗口的显示效果调整实现
Sep 22 Python
python实现学生信息管理系统源码
Feb 22 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
为什么《星际争霸》是测试人工智能的理想战场
2019/12/03 星际争霸
PHP中通过ADO调用Access数据库的方法测试不通过
2006/12/31 PHP
WordPress中转义HTML与过滤链接的相关PHP函数使用解析
2015/12/22 PHP
PHP图形计数器程序显示网站用户浏览量
2016/07/20 PHP
PHP对XML内容进行修改和删除实例代码
2016/10/26 PHP
PHP实现的DES加密解密封装类完整实例
2017/04/29 PHP
获取当前网页document.url location.href区别总结
2008/05/10 Javascript
jQuery对象[0]是什么含义?
2010/07/31 Javascript
extjs之去除s.gif的影响
2010/12/25 Javascript
jquery.combobox中文api和例子,修复了上面的小bug
2011/03/28 Javascript
jQuery 源码分析笔记(4) Ready函数
2011/06/02 Javascript
JavaScript中Cookie操作实例
2015/01/09 Javascript
JavaScript错误处理
2015/02/03 Javascript
jQuery模拟Marquee实现无缝滚动效果完整实例
2016/09/29 Javascript
nodejs+express实现文件上传下载管理网站
2017/03/15 NodeJs
ES6新增的math,Number方法
2017/08/06 Javascript
node.js利用socket.io实现多人在线匹配联机五子棋
2018/05/31 Javascript
微信小程序封装的HTTP请求示例【附升级版】
2019/05/11 Javascript
axios如何取消重复无用的请求详解
2019/12/15 Javascript
详解Vue之计算属性
2020/06/20 Javascript
[02:41]DOTA2英雄基础教程 谜团
2013/12/10 DOTA
[07:40]DOTA2每周TOP10 精彩击杀集锦vol.4
2014/06/25 DOTA
[01:02]DOTA2辉夜杯决赛日 CDEC.Y对阵VG赛前花絮
2015/12/27 DOTA
[01:12:40]DOTA2-DPC中国联赛 正赛 DLG vs XG BO3 第三场 1月25日
2021/03/11 DOTA
Python实现快速多线程ping的方法
2015/07/15 Python
CSS3 3D酷炫立方体变换动画的实现
2019/03/26 HTML / CSS
经济系大学生求职信
2013/10/01 职场文书
保险专业自荐信范文
2014/02/20 职场文书
计算机软件专业求职信
2014/06/10 职场文书
公司门卫工作职责
2014/06/28 职场文书
2014年国庆节庆祝建国65周年比赛演讲稿
2014/09/21 职场文书
小学教学工作总结2015
2015/05/13 职场文书
《田忌赛马》教学反思
2016/02/19 职场文书
会议主持词通用版
2019/04/02 职场文书
Mysql Show Profile
2021/04/05 MySQL
vue如何使用模拟的json数据查看效果
2022/03/31 Vue.js