您的位置:首页 > 编程语言 > Python开发

Day-6

2015-12-05 11:32 671 查看
JSON序列化
用于序列化的两个模块json,用于字符串 和 python数据类型间进行转换

pickle,用于python特有的类型 和 python的数据类型间进行转换

Json模块提供了四个功能:dumps、dump、loads、loadpickle模块提供了四个功能:dumps、dump、loads、load
执行系统命令 可以执行shell命令的相关模块和函数有:os.system

os.spawn*

os.popen* --废弃

popen2.* --废弃

commands.* --废弃,3.x中被移除

import commands

result = commands.getoutput('cmd')
result = commands.getstatus('cmd')
result = commands.getstatusoutput('cmd')


以上执行shell命令的相关的模块和函数的功能均在 subprocess 模块中实现,并提供了更丰富的功能。call 执行命令,返回状态码
shell = True ,允许 shell 命令是字符串形式check_call执行命令,如果执行状态码是 0 ,则返回0,否则抛异常
check_output执行命令,如果状态码是 0 ,则返回执行结果,否则抛异常
subprocess.Popen(...)用于执行复杂的系统命令参数:args:shell命令,可以是字符串或者序列类型(如:list,元组)

bufsize:指定缓冲。0 无缓冲,1 行缓冲,其他 缓冲区大小,负值 系统缓冲

stdin, stdout, stderr:分别表示程序的标准输入、输出、错误句柄

preexec_fn:只在Unix平台下有效,用于指定一个可执行对象(callable object),它将在子进程运行之前被调用

close_sfs:在windows平台下,如果close_fds被设置为True,则新创建的子进程将不会继承父进程的输入、输出、错误管道。
所以不能将close_fds设置为True同时重定向子进程的标准输入、输出与错误(stdin, stdout, stderr)。

shell:同上

cwd:用于设置子进程的当前目录

env:用于指定子进程的环境变量。如果env = None,子进程的环境变量将从父进程中继承。

universal_newlines:不同系统的换行符不同,True -> 同意使用 \n

startupinfo与createionflags只在windows下有效
将被传递给底层的CreateProcess()函数,用于设置子进程的一些属性,如:主窗口的外观,进程的优先级等等

import subprocess
ret1 = subprocess.Popen(["mkdir","t1"])
ret2 = subprocess.Popen("mkdir t2", shell=True)
终端输入的命令分为两种:输入即可得到输出,如:ifconfig

输入进行某环境,依赖再输入,如:python

import subprocess

obj = subprocess.Popen("mkdir t3", shell=True, cwd='/home/dev',)



import subprocess

obj = subprocess.Popen(["python"], stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
obj.stdin.write('print 1 \n ')
obj.stdin.write('print 2 \n ')
obj.stdin.write('print 3 \n ')
obj.stdin.write('print 4 \n ')
obj.stdin.close()

cmd_out = obj.stdout.read()
obj.stdout.close()
cmd_error = obj.stderr.read()
obj.stderr.close()print cmd_outprint cmd_error



import subprocess

obj = subprocess.Popen(["python"], stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
obj.stdin.write('print 1 \n ')
obj.stdin.write('print 2 \n ')
obj.stdin.write('print 3 \n ')
obj.stdin.write('print 4 \n ')

out_error_list = obj.communicate()print out_error_list



import subprocess

obj = subprocess.Popen(["python"], stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
out_error_list = obj.communicate('print "hello"')print out_error_list
shutil高级的 文件、文件夹、压缩包 处理模块shutil.copyfileobj(fsrc, fdst[, length])
将文件内容拷贝到另一个文件中,可以部分内容


def copyfileobj(fsrc, fdst, length=16*1024):    """copy data from file-like object fsrc to file-like object fdst"""
while 1:
buf = fsrc.read(length)        if not buf:            break
fdst.write(buf)

shutil.copyfile(src, dst)
拷贝文件


def copyfile(src, dst):    """Copy data from src to dst"""
if _samefile(src, dst):        raise Error("`%s` and `%s` are the same file" % (src, dst))    for fn in [src, dst]:        try:
st = os.stat(fn)        except OSError:            # File most likely does not exist
pass
else:            # XXX What about other special files? (sockets, devices...)
if stat.S_ISFIFO(st.st_mode):                raise SpecialFileError("`%s` is a named pipe" % fn)

with open(src, 'rb') as fsrc:
with open(dst, 'wb') as fdst:
copyfileobj(fsrc, fdst)

shutil.copymode(src, dst)
仅拷贝权限。内容、组、用户均不变


def copymode(src, dst):    """Copy mode bits from src to dst"""
if hasattr(os, 'chmod'):
st = os.stat(src)
mode = stat.S_IMODE(st.st_mode)
os.chmod(dst, mode)
shutil.copystat(src, dst)
拷贝状态的信息,包括:mode bits, atime, mtime, flags


def copystat(src, dst):    """Copy all stat info (mode bits, atime, mtime, flags) from src to dst"""
st = os.stat(src)
mode = stat.S_IMODE(st.st_mode)    if hasattr(os, 'utime'):
os.utime(dst, (st.st_atime, st.st_mtime))    if hasattr(os, 'chmod'):
os.chmod(dst, mode)    if hasattr(os, 'chflags') and hasattr(st, 'st_flags'):        try:
os.chflags(dst, st.st_flags)        except OSError, why:            for err in 'EOPNOTSUPP', 'ENOTSUP':                if hasattr(errno, err) and why.errno == getattr(errno, err):                    break
else:                raise

shutil.copy(src, dst)
拷贝文件和权限


def copy(src, dst):    """Copy data and mode bits ("cp src dst").

The destination may be a directory.    """
if os.path.isdir(dst):
dst = os.path.join(dst, os.path.basename(src))
copyfile(src, dst)
copymode(src, dst)

shutil.copy2(src, dst)
拷贝文件和状态信息


def copy2(src, dst):    """Copy data and all stat info ("cp -p src dst").

The destination may be a directory.    """
if os.path.isdir(dst):
dst = os.path.join(dst, os.path.basename(src))
copyfile(src, dst)
copystat(src, dst)

shutil.ignore_patterns(*patterns)
shutil.copytree(src, dst, symlinks=False, ignore=None)
递归的去拷贝文件例如:copytree(source, destination, ignore=ignore_patterns('*.pyc', 'tmp*'))
def ignore_patterns(*patterns):    """Function that can be used as copytree() ignore parameter.

Patterns is a sequence of glob-style patterns
that are used to exclude files"""
def _ignore_patterns(path, names):
ignored_names = []        for pattern in patterns:
ignored_names.extend(fnmatch.filter(names, pattern))        return set(ignored_names)    return _ignore_patternsdef copytree(src, dst, symlinks=False, ignore=None):    """Recursively copy a directory tree using copy2().

The destination directory must not already exist.
If exception(s) occur, an Error is raised with a list of reasons.

If the optional symlinks flag is true, symbolic links in the
source tree result in symbolic links in the destination tree; if
it is false, the contents of the files pointed to by symbolic
links are copied.

The optional ignore argument is a callable. If given, it
is called with the `src` parameter, which is the directory
being visited by copytree(), and `names` which is the list of
`src` contents, as returned by os.listdir():

callable(src, names) -> ignored_names

Since copytree() is called recursively, the callable will be
called once for each directory that is copied. It returns a
list of names relative to the `src` directory that should
not be copied.

XXX Consider this example code rather than the ultimate tool.    """
names = os.listdir(src)    if ignore is not None:
ignored_names = ignore(src, names)    else:
ignored_names = set()

os.makedirs(dst)
errors = []    for name in names:        if name in ignored_names:            continue
srcname = os.path.join(src, name)
dstname = os.path.join(dst, name)        try:            if symlinks and os.path.islink(srcname):
linkto = os.readlink(srcname)
os.symlink(linkto, dstname)            elif os.path.isdir(srcname):
copytree(srcname, dstname, symlinks, ignore)            else:                # Will raise a SpecialFileError for unsupported file types                copy2(srcname, dstname)        # catch the Error from the recursive copytree so that we can
# continue with other files
except Error, err:
errors.extend(err.args[0])        except EnvironmentError, why:
errors.append((srcname, dstname, str(why)))    try:
copystat(src, dst)    except OSError, why:        if WindowsError is not None and isinstance(why, WindowsError):            # Copying file access times may fail on Windows
pass
else:
errors.append((src, dst, str(why)))    if errors:        raise Error, errors

Re正则表达式

re模块用于对python的正则表达式的操作。字符:  . 匹配除换行符以外的任意字符
  \w 匹配字母或数字或下划线或汉字
  \s 匹配任意的空白符
  \d 匹配数字
  \b 匹配单词的开始或结束
  ^ 匹配字符串的开始
  $ 匹配字符串的结束次数:  * 重复零次或更多次
  + 重复一次或更多次
  ? 重复零次或一次
  {n} 重复n次
  {n,} 重复n次或更多次
  {n,m} 重复n到m次
IP:^(25[0-5]|2[0-4]\d|[0-1]?\d?\d)(\.(25[0-5]|2[0-4]\d|[0-1]?\d?\d)){3}$
手机号:^1[3|4|5|8][0-9]\d{8}$
1、match(pattern, string, flags=0)从起始位置开始根据模型去字符串中匹配指定内容,匹配单个正则表达式

要匹配的字符串

标志位,用于控制正则表达式的匹配方式

import re

obj = re.match('\d+', '123uuasf')if obj:    print obj.group()


flags
2、search(pattern, string, flags=0)根据模型去字符串中匹配指定内容,匹配单个
import re

obj = re.search('\d+', 'u123uu888asf')if obj:    print obj.group()
3、group和groups
a = "123abc456"print re.search("([0-9]*)([a-z]*)([0-9]*)", a).group()print re.search("([0-9]*)([a-z]*)([0-9]*)", a).group(0)print re.search("([0-9]*)([a-z]*)([0-9]*)", a).group(1)print re.search("([0-9]*)([a-z]*)([0-9]*)", a).group(2)print re.search("([0-9]*)([a-z]*)([0-9]*)", a).groups()

4、findall(pattern, string, flags=0)上述两中方式均用于匹配单值,即:只能匹配字符串中的一个,如果想要匹配到字符串中所有符合条件的元素,则需要使用 findall。
import re

obj = re.findall('\d+', 'fa123uu888asf')print obj
5、sub(pattern, repl, string, count=0, flags=0)用于替换匹配的字符串
content = "123abc456"new_content = re.sub('\d+', 'sb', content)# new_content = re.sub('\d+', 'sb', content, 1)print new_content
相比于str.replace功能更加强大6、split(pattern, string, maxsplit=0, flags=0)根据指定匹配进行分组
content = "'1 - 2 * ((60-30+1*(9-2*5/3+7/3*99/4*2998+10*568/14))-(-4*3)/(16-3*2) )'"new_content = re.split('\*', content)# new_content = re.split('\*', content, 1)print new_content
content = "'1 - 2 * ((60-30+1*(9-2*5/3+7/3*99/4*2998+10*568/14))-(-4*3)/(16-3*2) )'"new_content = re.split('[\+\-\*\/]+', content)# new_content = re.split('\*', content, 1)print new_content
inpp = '1-2*((60-30 +(-40-5)*(9-2*5/3 + 7 /3*99/4*2998 +10 * 568/14 )) - (-4*3)/ (16-3*2))'inpp = re.sub('\s*','',inpp)
new_content = re.split('\(([\+\-\*\/]?\d+[\+\-\*\/]?\d+){1}\)', inpp, 1)print new_content
相比于str.split更加强大 实例:计算器源码十一、random随机数
随机验证码实例:
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息