Python系统学习第十八课

OS - 操作系统相关

  • 跟操作系统相关,主要是文件操作
  • 于系统相关的操作,主要包含在三个模块里
    • os, 操作系统相关目录
    • os.path 系统路径相关操作
    • shutil , 高级文件操作,目录树的操作,文件赋值,删除,移动
  • 路径
    • 绝对路径
    • 相对路径
# getcwd()获取当前的工作目录
# 格式:os.getcwd()
# 返回值,当前工作目录的字符串
#当前工作目录就是程序在进行文件相关操作,默认查找文件的目录
import os
mydir = os.getcwd()
print(mydir)

C:\Users\Administrator\Desktop\py
# chdir()改变当前的工作目录
#格式: os.chdir(路径)
#返回值:无
os.chdir('C:\\Users\\Administrator\\Desktop\\libudf')
mydir = os.getcwd()
print(mydir)
C:\Users\Administrator\Desktop\libudf
#listdir()获取一个目录中所有子目录和文件的名称列表
#格式:os.listdir(路径)
#返回值:所有子目录中的文件名称的列表
ld = os.listdir()
print(ld)

['src', 'win64']
# makedirs()递归创建文件夹
#格式:os.makedirs(递归路径)
#返回值
#递归路径: 多个文件夹夹层包含的路径就是递归路径,例如a/b/c...
rst = os.makedirs("lizi")
print(rst)
None
#system()运行系统shell命令
#格式:os.system(系统命令)
#返回值:打开一个shell或者终端界面
#ls是列出当前文件和文件夹的命令
rst  = os.system("ls")
print(rst)
#在当前目录下创建一个dana.hha的文集
rst = os.system("touch lizi.hh")
print(rst)
1
1
#getnv()获取制定的系统环境变量变量值
#格式:os.getev('环境变量名')
#返回值:指定环境变量名对应的值
rst = os.getenv("PATH")
print(rst)
H:\tecplot\tecplot2\Tecplot Chorus 2017 R3\bin;H:\tecplot\tecplot2\Tecplot 360 EX 2017 R3\bin;C:\Program Files\Microsoft MPI\Bin\;C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\BIN\amd64;C:\Windows\Microsoft.NET\Framework64\v4.0.30319;C:\Windows\Microsoft.NET\Framework64\v3.5;C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\VCPackages;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Common7\IDE;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Common7\Tools;C:\Program Files (x86)\HTML Help Workshop;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Performance Tools\x64;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Performance Tools;C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\bin\NETFX 4.0 Tools\x64;C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\bin\x64;C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\bin;C:\Program Files\Intel\Intel(R) Management Engine Components\iCLS\;C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPowerShell\v1.0\;C:\Windows\System32\OpenSSH\;C:\Program Files (x86)\NVIDIA Corporation\PhysX\Common;C:\Program Files\Intel\Intel(R) Management Engine Components\DAL;C:\Program Files\Intel\Intel(R) Management Engine Components\IPT;"C:\Program Files (x86)\Microsoft SQL Server\100\Tools\Binn\;";"C:\Program Files\Microsoft SQL Server\100\Tools\Binn\;";"C:\Program Files\Microsoft SQL Server\100\DTS\Binn\;";"C:\Users\Administrator\AppData\Local\Programs\Python\Python35\Scripts;";"C:\Users\Administrator\AppData\Local\Programs\Python\Python35\;";"C:\Program Files\dotnet\;";"H:\Anaconda;";"H:\Anaconda\Library\mingw-w64\bin;";"H:\Anaconda\Library\usr\bin;";"H:\Anaconda\Library\bin;";"H:\Anaconda\Scripts;";"C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin\amd64;";"C:\Program Files (x86)\Microsoft Visual Studio 10.0\Common7\IDE;";G:\TMD-GCC\bin;H:\Anaconda\Lib\site-packages\gdbgui;H:\Anaconda\Scripts\gdbgui.exe;H:\Anaconda;H:\Anaconda\Library\mingw-w64\bin;H:\Anaconda\Library\usr\bin;H:\Anaconda\Library\bin;H:\Anaconda\Scripts;H:\Anaconda\Lib\site-packages\gdbgui;H:\MinGW\bin;H:\MinGW\bin\gdb.exe;H:\MinGW\include\gdb;H:\MinGW\share\gdb;H:\MinGW\share\gdb\python\gdb;H:\MinGW\include\gdb;
#exit()退出当前程序
#格式:exit()
#返回值:无

值部分

  • os.cudir:curretn dir, 当前目录
  • os.pardir: parent dir, 父亲目录
  • os.sep: 当前系统的路径分隔符
  • os.linesep: 当前系统的路径分隔符
    • windows:"\r\n"
    • linux:"/"
    • unix,linux,macos:“\n”
  • os.name: 当前系统名称
    • Windows:nt
    • mac,unix,linux:posix
print(os.pardir)
print(os.curdir)
..
.

#在路径的相关操作中,不要手动拼写地址,因为手动拼写的路径可能不具有移植性

os.path 模块, 跟路径相关的模块

import os.path as op
# abspath()将路径转化为绝对路径
# abselute绝对
#格式: os.path.abspath('路径')
#返回值:路径的绝对路径形式

# linux中
# .号。代表当前目录
#..双号,代表父目录
abs = op.abspath(".")
abs1 = op.abspath("..")
print(abs)
print(abs1)
C:\Users\Administrator\Desktop\libudf
C:\Users\Administrator\Desktop
#basename()获取路径中文件名部分
# 格式:os.path.basename(路径)
#返回值:文件名字符串
bn = op.basename("\\Desktop\\libudf")
print(bn)
bn = op.basename("\\Desktop\\libudf\\lizi")
print(bn)
libudf
lizi
#join()将多个路径拼合成一个路径
# 格式:os.path.join(路径1,路径2.。。。)
#返回值:组合之后的新路径字符串
bd = "\\Desktop\\libudf"
fn = "lizi.hah"

p = op.join(bd, fn)
print(p)
\Desktop\libudf\lizi.hah
#split()将路径切割为文件夹部分和当前文件部分
#格式:os.split("\\Desktop\\libudf\\lizi.hah")
#返回值:路径和文件名组成的元组
t = op.split("\\Desktop\\libudf\\lizi.hah")
print(t)
d,p = op.split("\\Desktop\\libudf\\lizi.hah")
print(d,p)
('\\Desktop\\libudf', 'lizi.hah')
\Desktop\libudf lizi.hah
#isdir()检测是否是目录
# 格式:os.path.isdir(路径)
#返回值:布尔值
rst = op.isdir("C:\\Users\\Administrator\\Desktop\\libudf\\a")
rst
False
#exist()检测文件或者目录是否存在
#格式:os.path.exits(路径)
#返回值:布尔值
e = op.exists("C:\\Users\\Administrator\\Desktop\\libudf\\lizi")
e
True

shutil 模块

import shutil

#copy()复制文件
# 格式:shutil.copy(来源路径,目标路径)
#返回值:返回目标路径
#拷贝的同时,可以给文件重命名

rst = shutil.copy("C:\\Users\\Administrator\\Desktop\\libudf\\lizi", "C:\\Users\\Administrator\\Desktop\\py\\liziqiang")
print(rst)
---------------------------------------------------------------------------

PermissionError                           Traceback (most recent call last)

<ipython-input-44-2bdcc131b148> in <module>()
      4 #拷贝的同时,可以给文件重命名
      5 
----> 6 rst = shutil.copy("C:\\Users\\Administrator\\Desktop\\libudf\\lizi", "C:\\Users\\Administrator\\Desktop\\py\\liziqiang")
      7 print(rst)


H:\Anaconda\lib\shutil.py in copy(src, dst, follow_symlinks)
    239     if os.path.isdir(dst):
    240         dst = os.path.join(dst, os.path.basename(src))
--> 241     copyfile(src, dst, follow_symlinks=follow_symlinks)
    242     copymode(src, dst, follow_symlinks=follow_symlinks)
    243     return dst


H:\Anaconda\lib\shutil.py in copyfile(src, dst, follow_symlinks)
    118         os.symlink(os.readlink(src), dst)
    119     else:
--> 120         with open(src, 'rb') as fsrc:
    121             with open(dst, 'wb') as fdst:
    122                 copyfileobj(fsrc, fdst)


PermissionError: [Errno 13] Permission denied: 'C:\\Users\\Administrator\\Desktop\\libudf\\lizi'
# copy2()复制文件,保留元数据(文件信息)
#格式:shutil.copy2(来源路径, 目标路径)
#返回值:返回目标路径
#注意:copy,copy2的唯一区别在于从copy2复制文件时尽量保留元数据
#copyfile()将一个文件中的内容复制到另一个文件中
# 格式:shutile.copyfile(原路径, 目标路径)
#返回值:无
#move()移动文件/文件夹
#格式:shutil.move(原路径,目标路径)
#返回值:目标路径

归档和压缩

  • 归档:把多个文件或者文件夹合并到一个文件夹中
  • 压缩:用算法把多个文件或者文件夹无损或者有损合并到一个文件夹当中
#make_archive()归档操作
# 格式:shutil.make_archive("归档之后的目录和文件名",‘后缀’, ‘需要归档的文件夹’)
#返回值:归档之后的地址

#unpack_archive()解包操作
#格式:shuilt.unpack_archive('归档文件地址', ‘解包之后的地址’)
#返回值:解包之后的地址

zip-压缩包

  • 模块名称叫做zipfile
#zipfile.ZipFile(file[, model[, compression[, allowZip64]]])
#创建一个ZipFile对象,表示一个zip文件,参数file表示文件的路径或类文件对象
import zipfile
zf = zipfile.ZipFile("C:\\Users\\Administrator\\Desktop\\libudf")
---------------------------------------------------------------------------

PermissionError                           Traceback (most recent call last)

<ipython-input-50-07754eafbc7b> in <module>()
      2 #创建一个ZipFile对象,表示一个zip文件,参数file表示文件的路径或类文件对象
      3 import zipfile
----> 4 zf = zipfile.ZipFile("C:\\Users\\Administrator\\Desktop\\libudf")


H:\Anaconda\lib\zipfile.py in __init__(self, file, mode, compression, allowZip64)
   1088             while True:
   1089                 try:
-> 1090                     self.fp = io.open(file, filemode)
   1091                 except OSError:
   1092                     if filemode in modeDict:


PermissionError: [Errno 13] Permission denied: 'C:\\Users\\Administrator\\Desktop\\libudf'
#ZipFile.getinfo(name)
#获取zip文档内指定文件的信息,返回一个zipfile.XipInfo对象,他包括文件的详细信息


#ZipFile。namelist()
#获取zip文档内所有文件的名称列表

random-模块

  • 随机数
  • 所有的随机模块都是伪随机
import random
#random()获取0-1之间的随机小数
#返回值:随机0-1之间的小数
print(random.random())
0.8190165770375151
#choice()随机返回序列中的某个值
#格式:random.choice(序列)
#返回值:序列中的某个值
l = [str(i)+"haha" for i in range(10)]
s = random.choice(l)
print(s)
4haha
#shuffle()随机打乱列表
#格式:random.shuffle(列表)
#返回值:打乱顺序之后的列表
l1 = [i for i in range(10)]
print(l1)
random.shuffle(l1)
print(l1)
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
[1, 2, 3, 4, 0, 6, 9, 8, 5, 7]
#randint(a,b):返回一个a到b之间的随机整数,包含a和b
print(random.randint(0, 100)) 
59

猜你喜欢

转载自blog.csdn.net/qq_42633819/article/details/85692709