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

作者:sumory 时间:2023-07-25 08:42:23 

本文实例分析了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,字符串,文件
0
投稿

猜你喜欢

  • 关于Python内存分配时的小秘密分享

    2023-10-07 15:26:16
  • pyqt5实现俄罗斯方块游戏

    2023-07-21 11:02:32
  • 数据库性能优化三:程序操作优化提升性能

    2024-01-14 08:58:49
  • 对numpy数据写入文件的方法讲解

    2022-01-24 21:09:31
  • 用js判断页面刷新或关闭的方法(onbeforeunload与onunload事件)

    2024-04-30 08:55:07
  • ZeroClipboard.js使用一个flash复制多个文本框

    2024-04-27 15:19:14
  • 设计从"心"开始

    2011-05-21 08:37:00
  • Django模板继承与模板的导入实例详解

    2023-04-03 14:41:28
  • 详解Django框架中用户的登录和退出的实现

    2022-08-28 19:37:19
  • python argparse模块传参用法实例

    2022-01-19 09:53:42
  • document.all与getElementById、getElementsByName、getElementsByTagName用法区别-getElementById

    2024-05-22 10:35:58
  • Python实现列表中非负数保留,负数转化为指定的数值方式

    2022-07-23 21:23:24
  • Python爬虫之爬取淘女郎照片示例详解

    2021-01-16 12:50:48
  • Go/Python/Erlang编程语言对比分析及示例代码

    2022-08-15 17:19:12
  • Go 热加载之fresh详解

    2024-03-23 14:27:26
  • 浅谈javascript 函数表达式和函数声明的区别

    2024-04-27 15:19:39
  • PHP删除数组中空值的方法介绍

    2023-11-24 03:04:19
  • Python判断一个三位数是否为水仙花数的示例

    2021-11-06 06:14:13
  • Python+Selenium+PIL+Tesseract自动识别验证码进行一键登录

    2023-04-13 19:29:37
  • oracle表空间表分区详解及oracle表分区查询使用方法

    2024-01-14 19:42:14
  • asp之家 网络编程 m.aspxhome.com