Python字符串和文件操作常用函數分析
更新時間:2015年04月08日 12:18:38 作者:sumory
這篇文章主要介紹了Python字符串和文件操作常用函數,實例分析了Python中字符串及文件操作的常用技巧,非常具有實用價值,需要的朋友可以參考下
本文實例分析了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規(guī)則剔除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程序設計有所幫助。
相關文章
pycharm 將django中多個app放到同個文件夾apps的處理方法
今天小編就為大家分享一篇pycharm 將django中多個app放到同個文件夾apps的處理方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-05-05
python GUI庫圖形界面開發(fā)之PyQt5布局控件QVBoxLayout詳細使用方法與實例
這篇文章主要介紹了python GUI庫圖形界面開發(fā)之PyQt5布局控件QVBoxLayout詳細使用方法與實例,需要的朋友可以參考下2020-03-03

