常用模块学习(三)

  • 常用模块学习—random模块详解

程序中有很多地方需要用到随机字符,比如登录网站的随机验证码,通过random模块可以很容易生成随机字符串。

import random

#randint  返回1-100之间的一个随机数,包括100
random.randint(1,100)
#结果为:94
random.randint(1,100)
#结果为:32
random.randint(1,100)
#结果为:33
random.randint(1,100)
#结果为:99
random.randint(1,100)
#结果为:15

#randrange  返回1-100之间的一个随机数,不包括100
random.randrange(1,100)
#结果为:20
random.randrange(1,100)
#结果为:73
random.randrange(1,100)
#结果为:77

#返回一个随机浮点数
random.random()
#结果为:0.6091116957891122
random.random()
#结果为:0.4522803836713838

#返回一个给定数据集合中的随机字符
random.choice('asd12341@#%$')
#结果为:'@'
random.choice('asd12341@#%$')
#结果为:'d'
random.choice('asd12341@#%$')
#结果为:'#'
random.choice('asd12341@#%$')
#结果为:'3'

#从多个字符中选取特定数量的字符
random.sample('adgs263467@#$',3)
#结果为:['7', 'g', '4']
random.sample('adgs263467@#$',3)
#结果为:['s', '3', '$']
random.sample('adgs263467@#$',3)
#结果为:['#', '3', '@']
random.sample('adgs263467@#$',3)
#结果为:['2', '6', 'g']


#生成随机字符串
import string
string.digits
#结果为:'0123456789'
string.ascii_letters
#结果为:'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'
string.ascii_lowercase
#结果为:'abcdefghijklmnopqrstuvwxyz'
string.ascii_lowercase + string.digits
#结果为:'abcdefghijklmnopqrstuvwxyz0123456789'
string.punctuation
#结果为:'!"#$%&\'()*+,-./:;<=>?@[\\]^_`{|}~'
s=string.ascii_lowercase + string.digits
s
#结果为:'abcdefghijklmnopqrstuvwxyz0123456789'
random.sample(s,5)
#结果为:['5', 'z', '8', 'd', '6']
random.sample(s,5)
#结果为:['9', 'd', 'e', '8', 'i']
random.sample(s,5)
#结果为:['1', 'm', 'p', 'c', '5']
''.join(random.sample(s,5))
#结果为:'jpxvo'
''.join(random.sample(s,5))
#结果为:'su1gl'
''.join(random.sample(s,5))
#结果为:'uoc7k'
''.join(random.sample(s,5))
#结果为:'glrk0'


#洗牌
d = list(range(100))
d
#结果为:[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99]
random.shuffle(d)
d
#结果为:[22, 91, 42, 98, 18, 40, 96, 84, 73, 82, 49, 30, 81, 69, 78, 89, 5, 6, 83, 9, 0, 47, 35, 75, 79, 2, 95, 43, 53, 68, 93, 65, 21, 59, 85, 51, 8, 80, 90, 23, 62, 28, 97, 24, 27, 1, 39, 57, 3, 55, 94, 19, 77, 4, 88, 26, 72, 56, 34, 41, 31, 10, 36, 33, 58, 50, 20, 11, 38, 60, 46, 15, 29, 17, 52, 86, 61, 37, 54, 67, 70, 14, 7, 99, 66, 71, 13, 12, 45, 92, 16, 25, 64, 74, 63, 44, 48, 87, 76, 32]

 

  • 常用模块学习—os 模块详解

 

import  os

#得到当前工作目录,即当前Python脚本工作的目录路径
print(os.getcwd())             #结果为:E:\Python\work\myFirstPro\第4章

#返回指定目录下的所有文件和目录名
print(os.listdir())            #结果为:['01—模块的种类和导入方法.py', '02—模块的导入路径.py', '03—开源模块的安装方式.py', '04—time 模块详解.py', '05—tatetime 模块详解.py', '06—random模块详解.py', '07—os 模块详解.py', 'mods', 'packages']

#函数用来删除一个文件
#print(os.remove('account.txt'))              #结果为:None

#删除多个目录
#print(os.removedirs(r'c:\python'))

#检验给出的路径是否是一个文件
print(os.path.isfile('account1.txt'))      #结果为:True

#检验给出的路径是否是一个目录
print(os.path.isdir('mods'))                 #结果为:True

#判断是否是绝对路径
print(os.path.isabs('E:\Python\work\myFirstPro\第4章'))       #结果为:True

#检验给出的路径是否真的存在
print(os.path.exists('E:\Python\work\myFirstPro\第4章'))      #结果为:True

#返回一个路径的目录名和文件名
print(os.path.split('01—模块的种类和导入方法.py'))             #结果为:('', '01—模块的种类和导入方法.py')

#分离扩展名:
print(os.path.splitext('01—模块的种类和导入方法.py'))          #结果为:('01—模块的种类和导入方法', '.py')

#获取路径名
print(os.path.dirname('03—开源模块的安装方式.py'))             #结果为:

#获得绝对路径
print(os.path.abspath('03—开源模块的安装方式.py'))            #结果为:E:\Python\work\myFirstPro\第4章\03—开源模块的安装方式.py

#获取文件名
print(os.path.basename('E:\Python\work\myFirstPro\第4章'))   #结果为:第4章

#运行shell命令
#print(os.system('df -h'))                       #Linux下执行命令正确返回0,不正确返回非0

#读取操作系统环境变量HOME的值
print(os.getenv('HOME'))                    #结果为:None

#返回操作系统所有的环境变量
print(os.environ)                            #结果为:environ({'ALLUSERSPROFILE': 'C:\\ProgramData', 'APPDATA': 'C:\\Users\\TQTL\\AppData\\Roaming', 'CLASSPATH': '.;C:\\Program Files\\Java\\jdk1.6.0_35\\lib;C:\\Program Files\\Java\\jdk1.6.0_35\\lib\\tools.jar', 'COMMONPROGRAMFILES': 'C:\\Program Files\\Common Files', 'COMMONPROGRAMFILES(X86)': 'C:\\Program Files (x86)\\Common Files', 'COMMONPROGRAMW6432': 'C:\\Program Files\\Common Files', 'COMPUTERNAME': 'DESKTOP-LRT82E2', 'COMSPEC': 'C:\\WINDOWS\\system32\\cmd.exe', 'DRIVERDATA': 'C:\\Windows\\System32\\Drivers\\DriverData', 'FPS_BROWSER_APP_PROFILE_STRING': 'Internet Explorer', 'FPS_BROWSER_USER_PROFILE_STRING': 'Default', 'HOMEDRIVE': 'C:', 'HOMEPATH': '\\Users\\TQTL', 'JAVA_HOME': 'C:\\Program Files\\Java\\jdk1.6.0_35', 'LOCALAPPDATA': 'C:\\Users\\TQTL\\AppData\\Local', 'LOGONSERVER': '\\\\DESKTOP-LRT82E2', 'MOZ_PLUGIN_PATH': 'D:\\programfiles\\pdf\\plugins\\', 'NUMBER_OF_PROCESSORS': '4', 'ONEDRIVE': 'C:\\Users\\TQTL\\OneDrive', 'OS': 'Windows_NT', 'PATH': 'C:\\Python37\\Scripts\\;C:\\Python37\\;C:\\Python27\\;C:\\Python27\\Scripts;C:\\Program Files (x86)\\Common Files\\NetSarang;C:\\WINDOWS\\system32;C:\\WINDOWS;C:\\WINDOWS\\System32\\Wbem;C:\\WINDOWS\\System32\\WindowsPowerShell\\v1.0\\;D:\\programfiles\\SVN\\bin;C:\\Program Files\\Java\\jdk1.6.0_35\\bin;C:\\Program Files\\Java\\jdk1.6.0_35\\jre\\bin;C:\\WINDOWS\\System32\\OpenSSH\\;C:\\Users\\TQTL\\AppData\\Local\\Microsoft\\WindowsApps;', 'PATHEXT': '.COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH;.MSC;.PY;.PYW', 'PROCESSOR_ARCHITECTURE': 'AMD64', 'PROCESSOR_IDENTIFIER': 'Intel64 Family 6 Model 60 Stepping 3, GenuineIntel', 'PROCESSOR_LEVEL': '6', 'PROCESSOR_REVISION': '3c03', 'PROGRAMDATA': 'C:\\ProgramData', 'PROGRAMFILES': 'C:\\Program Files', 'PROGRAMFILES(X86)': 'C:\\Program Files (x86)', 'PROGRAMW6432': 'C:\\Program Files', 'PSMODULEPATH': 'C:\\WINDOWS\\system32\\WindowsPowerShell\\v1.0\\Modules\\', 'PUBLIC': 'C:\\Users\\Public', 'PYCHARM_HOSTED': '1', 'PYCHARM_MATPLOTLIB_PORT': '57344', 'PYTHONIOENCODING': 'UTF-8', 'PYTHONPATH': 'C:\\JetBrains\\PyCharm 2018.2.1\\helpers\\pycharm_matplotlib_backend;E:\\Python', 'PYTHONUNBUFFERED': '1', 'SESSIONNAME': 'Console', 'SYSTEMDRIVE': 'C:', 'SYSTEMROOT': 'C:\\WINDOWS', 'TEMP': 'C:\\Users\\TQTL\\AppData\\Local\\Temp', 'TMP': 'C:\\Users\\TQTL\\AppData\\Local\\Temp', 'USERDOMAIN': 'DESKTOP-LRT82E2', 'USERDOMAIN_ROAMINGPROFILE': 'DESKTOP-LRT82E2', 'USERNAME': 'TQTL', 'USERPROFILE': 'C:\\Users\\TQTL', 'VBOX_MSI_INSTALL_PATH': 'D:\\programfiles\\virtual\\', 'WINDIR': 'C:\\WINDOWS'})

#设置系统环境变量,仅程序运行时有效
print(os.environ.setdefault('HOME','/home/alex'))    #结果为:/home/alex

#给出当前平台使用的行终止符
print(os.linesep)                         #结果为:     Windows使用'\r\n',Linux and MAC使用'\n'

#指示你正在使用的平台
print(os.name)                            #结果为:nt       对于Windows,它是'nt',而对于Linux/Unix用户,它是'posix'

#重命名
print(os.renames('account1.txt','account2.txt'))          #结果为:None
#print(os.renames('account2.txt','account1.txt'))          #结果为:FileExistsError: [WinError 183] 当文件已存在时,无法创建该文件。

#创建多级目录
#print(os.makedirs(r'E:\\Python\\c\\d\\e'))

#创建单个目录
#print(os.mkdir('test'))

#获取文件属性:
print(os.listdir('.'))                 #结果为:['.idea', 'file_flush_test.txt', 'f_flush_test.txt', 'pycharm-professional-2018.2.1.exe', 'python-2.7.15.amd64.msi', 'python-3.7.0-amd64.exe', 'work']
print(os.stat('file_flush_test.txt'))         #结果为:os.stat_result(st_mode=33206, st_ino=7599824371189248, st_dev=345752004, st_nlink=1, st_uid=0, st_gid=0, st_size=14, st_atime=1535701004, st_mtime=1535701004, st_ctime=1535700853)


#修改文件权限与时间戳
#print(os.chmod())

#获取文件大小
print(os.path.getsize('file_flush_test.txt'))       #结果为:14

#结合目录名与文件名
print(os.path.join('Python','file_flush_test.txt'))

#改变工作目录到dirname
#print(os.chdir(dirname))

#获取当前终端的大小
print(os.get_terminal_size())

#杀死进程
#print(os.kill(10884,signal.SIGKILL))

 

 

  • 常用模块学习—sys 模块详解

     1 sys.argv           命令行参数List,第一个元素是程序本身路径
     2 sys.exit(n)        退出程序,正常退出时exit(0)
     3 sys.version        获取Python解释程序的版本信息
     4 sys.maxint         最大的Int值
     5 sys.path           返回模块的搜索路径,初始化时使用PYTHONPATH环境变量的值
     6 sys.platform       返回操作系统平台名称
     7 sys.stdout.write('please:')  #标准输出 , 引出进度条的例子, 注,在py3上不行,可以用print代替
     8 val = sys.stdin.readline()[:-1] #标准输入
     9 sys.getrecursionlimit() #获取最大递归层数
    10 sys.setrecursionlimit(1200) #设置最大递归层数
    11 sys.getdefaultencoding()  #获取解释器默认编码
    12 sys.getfilesystemencoding  #获取内存数据存到文件里的默认编码

     

     1 import sys
     2 
     3 sys.argv
     4 #结果为:['C:\\JetBrains\\PyCharm 2018.2.1\\helpers\\pydev\\pydevconsole.py', '59820', '59821']
     5 
     6 sys.exit()
     7 #Process finished with exit code 0
     8 
     9 sys.version
    10 # 结果为:'3.7.0 (v3.7.0:1bf9cc5093, Jun 27 2018, 04:59:51) [MSC v.1914 64 bit (AMD64)]'
    11 
    12 sys.maxsize
    13 # 结果为:9223372036854775807
    14 
    15 sys.path
    16 # 结果为:
    17 # ['C:\\JetBrains\\PyCharm 2018.2.1\\helpers\\pydev', 
    18 # 'C:\\JetBrains\\PyCharm 2018.2.1\\helpers\\pydev',
    19 #  'C:\\Python37\\python37.zip', 
    20 # 'C:\\Python37\\DLLs',
    21 #  'C:\\Python37\\lib', 
    22 # 'C:\\Python37',
    23 #  'C:\\Python37\\lib\\site-packages',
    24 #  'C:\\JetBrains\\PyCharm 2018.2.1\\helpers\\pycharm_matplotlib_backend',
    25 #  'E:\\Python', 'E:/Python']
    26 
    27 sys.platform
    28 # 结果为:'win32'
    29 
    30 sys.stdout
    31 # 结果为:<_io.TextIOWrapper name='<stdout>' mode='w' encoding='UTF-8'>
    32 
    33 sys.stdout.write('please:')
    34 # 结果为:please:7
    35 
    36 val = sys.stdin.readline()
    37 qwef
    38 
    39 val
    40 # 结果为:'qwef\n'
    41 
    42 sys.stdin.read()
    43 sf
    44 # 结果为:'sf\n'
    45 
    46 sys.getrecursionlimit()
    47 # 结果为:1000
    48 
    49 sys.setrecursionlimit(1200)
    50 
    51 sys.getrecursionlimit()
    52 # 结果为:1200
    53 
    54 sys.getdefaultencoding()
    55 # 结果为:'utf-8'
    56 
    57 sys.getfilesystemencoding()
    58 # 结果为:'utf-8'

     

  • 常用模块学习—shutil模块详解

         高级的 文件、文件夹、压缩包 处理模块

 

  1 import shutil
  2 
  3 #shutil.copyfileobj(fsrc, fdst[, length])
  4 #将文件内容拷贝到另一个文件中
  5 f1 = open(file='sheve_test.py',mode='r',encoding='utf-8')
  6 f2 = open(file='sheve_test_new.py',mode='w',encoding='utf-8')
  7 shutil.copyfileobj(f1,f2)
  8 #AttributeError: module 'shutil' has no attribute 'copyfileobj'      不要将文件名称设置为与模块相同的。
  9 
 10 shutil.copyfileobj(f1,f2,length=10)                   #每次读10个
 11 
 12 
 13 #shutil.copyfile(src, dst)
 14 #拷贝文件(目标文件无需存在)
 15 shutil.copyfile('f1.log', 'f2.log')
 16 
 17 
 18 #shutil.copymode(src, dst)
 19 #仅拷贝权限。内容、组、用户均不变(目标文件必须存在)
 20 shutil.copymode('f1.log', 'f2.log')
 21 
 22 
 23 #shutil.copystat(src, dst)
 24 #仅拷贝状态的信息,包括:mode bits, atime, mtime, flags (目标文件必须存在)
 25 shutil.copystat('f1.log', 'f2.log')
 26 
 27 
 28 #shutil.copy(src, dst)
 29 #拷贝文件和权限
 30 shutil.copy('f1.log', 'f2.log')
 31 
 32 
 33 #shutil.copy2(src, dst)
 34 #拷贝文件和状态信息
 35 shutil.copy2('f1.log', 'f2.log')
 36 
 37 
 38 #shutil.ignore_patterns(*patterns)
 39 #shutil.copytree(src, dst, symlinks=False, ignore=None)
 40 #递归的去拷贝文件夹
 41 shutil.ignore_patterns()
 42 shutil.copytree("packages","packages1")
 43 shutil.copytree('folder1', 'folder2', ignore=shutil.ignore_patterns('*.pyc', 'tmp*')) #目标目录不能存在,注意对folder2目录父级目录要有可写权限,ignore的意思是排除
 44 
 45 
 46 #shutil.rmtree(path[, ignore_errors[, onerror]])
 47 #递归的去删除文件
 48 shutil.rmtree("folder1")
 49 
 50 
 51 #shutil.move(src, dst)
 52 #递归的去移动文件,它类似mv命令,其实就是重命名。
 53 shutil.move("folder1","folder3")
 54 
 55 
 56 '''
 57 shutil.make_archive(base_name, format,...)
 58 创建压缩包并返回文件路径,例如:zip、tar
 59 创建压缩包并返回文件路径,例如:zip、tar
 60 base_name: 压缩包的文件名,也可以是压缩包的路径。只是文件名时,则保存至当前目录,否则保存至指定路径,
 61 例如 data_bak =>保存至当前路径
 62 例如:/tmp/data_bak =>保存至/tmp/
 63 
 64 format: 压缩包种类,“zip”, “tar”, “bztar”,“gztar”
 65 root_dir: 要压缩的文件夹路径(默认当前目录)
 66 owner: 用户,默认当前用户
 67 group: 组,默认当前组
 68 logger: 用于记录日志,通常是logging.Logger对象
 69 '''
 70 #将 /data 下的文件打包放置当前程序目录
 71 ret = shutil.make_archive("data_bak", 'gztar', root_dir='/data')
 72 
 73 #将 /data下的文件打包放置 /tmp/目录
 74 ret = shutil.make_archive("/tmp/data_bak", 'gztar', root_dir='/data')
 75 
 76 
 77 import zipfile
 78 # 压缩
 79 z = zipfile.ZipFile('laxi.zip', 'w')
 80 z.write('a.log')
 81 z.write('data.data')
 82 z.close()
 83 
 84 # 解压
 85 z = zipfile.ZipFile('laxi.zip', 'r')
 86 z.extractall(path='.')
 87 z.close()
 88 
 89 
 90 
 91 import tarfile
 92 # 压缩
 93 t=tarfile.open('/tmp/egon.tar','w')
 94 t.add('/test1/a.py',arcname='a.bak')
 95 t.add('/test1/b.py',arcname='b.bak')
 96 t.close()
 97 
 98 # 解压
 99 t=tarfile.open('/tmp/egon.tar','r')
100 t.extractall('/egon')
101 t.close()