Python ☞ day 6

Python学习笔记之 os模块 & 递归函数 & 栈 & 队列

  • os模块:包含了普遍的操作系统的功能
#   获取操作系统类型    nt->windows     posix->Linux,Unix或者 Mac OS X
print(os.name)
#   打印操作系统详细的信息 注意:windows不支持
#print(os.uname())
'''
posix.uname_result(sysname='Linux', nodename='www.yj.user', release='3.10.0-514.26.2.el7.x86_64', version='#1 SMP Tue Jul 4 15:04:05 UTC 2017', machine='x86_64')
'''
#   获取操作系统中的环境变量
print(os.environ)
#   获取指定环境变量
print(os.environ.get("ALLUSERSPROFILE"))
#   获取当前目录
print(os.curdir)
#   获取当前工作目录,即当前python脚本所在的目录
print(os.getcwd())
#   以列表的形式返回指定目录下的所有的文件
print(os.listdir())
#   在当前目录下创建新目录
os.mkdir("lee")     #也可以写绝对路径
os.mkdir(r"C:\Users\yanji\Desktop\lee")
#   删除目录
os.rmdir("lee")
os.rmdir(r"C:\Users\yanji\Desktop\lee")
#   获取文件属性
print(os.stat("lee"))
#   重命名
os.rename("lee","li")
#   删除普通文件
os.remove("test11")
#   运行shell命令
os.system("notepad")
os.system("write")
os.system("mspaint")
os.system("msconfig")
os.system("shutdown -s -t 500")
os.system("shutdown -a")
os.system("taskkill /f /im notepad.exe")
  • 有些方法存在os模块里,还有些存在于os.path
#   查看当前的绝对路径
print(os.path.abspath("."))
#   拼接路径
#   注意:参数2里开始不要有斜杠
path1 = r"C:\Users\yanji\Desktop\day7"
path2 = "sunck"
print(os.path.join(path1,path2))
path3 = "/root/lee/home"
path4 = "lee"
print(os.path.join(path3,path4))
#   拆分路径
path5 = r"C:\Users\yanji\Desktop\day7\leee.txt"
print(os.path.split(path5))
#   获取扩展名
path6 = r"C:\Users\yanji\Desktop\day7\leee.txt"
print(os.path.splitext(path6))
#   判断是否是目录(是返回True,否返回False)
path7 = r"C:\Users\yanji\Desktop\day7"
print(os.path.isdir(path7))
#   判断文件是否存在
path8 = r"C:\Users\yanji\Desktop\day7\file1.txt"
print(os.path.isfile(path8))
#   判断目录是否存在
path9 = r"C:\Users\yanji\Desktop\day7"
print(os.path.exists(path9))
#   获取文件大小(字节)
path10 = r"C:\Users\yanji\Desktop\day7\file1.txt"
print(os.path.getsize(path10))
#   文件的目录
path11 = r"C:\Users\yanji\Desktop\day7\file1.txt"
print(os.path.dirname(path11))
print(os.path.basename(path11))
  • os模块实例
    1、 列出当前目录下的所有目录
    [x for x in os.listdir('.') if os.path.isdir(x)]    
    
    2、列出当前目录下的所有的.py文件,也只需一行代码
    [x for x in os.listdir('.') if os.path.isfile(x) and os.path.splitext(x)[1]=='.py']
    
# print(os.getcwd())    #查看当前目录
# os.chdir("/tmp")  #改变当前目录
# print(os.getcwd())
# print(os.curdir)  #打印当前目录.
# print(os.pardir)  #打印上级目录..

# print(os.listdir("/"))    #列出目录里的文件,结果不是绝对路径
# print(os.stat("/tmp/1.txt"))  #得到文件的状态信息
# print(os.path.getsize(__file__))  #得到文件的大小信息,__file__是特殊变量,代表文件本身
#
# print(os.path.abspath(__file__))  #得到文件的绝对路径
# print(os.path.dirname(__file__))  #得到文件的绝对路径的目录名,不包括文件
# print(os.path.basename(__file__)) #得到文件的文件名,不包括目录
# print(os.path.split(__file__))    #把dirname和basename分开
# print(os.path.join("/tmp","1.txt"))   #把dirname和basename合并
#
# print(os.path.isfile("/tmp/1.txt"))   #判断是否为文件
# print(os.path.isabs("1.txt"))     #判断是否为绝对路径
# print(os.path.exists("/tmp/11.txt"))  #判断是否存在
# print(os.path.isdir("/tmp/"))     #判断是否为目录
# print(os.path.islink("/etc/rc.local"))#判断是否为链接文件
#
# print(os.rename("/tmp/1.txt","/tmp/11.txt"))  #改名
# print(os.remove("/tmp/11.txt"))       #删除
#
# os.mkdir("/tmp/aaa")              #创建目录
# os.rmdir("/tmp/aaa")              #删除目录 
# os.makedirs("/tmp/a/b/c/d")           #连续创建多级目录
# os.removedirs("/tmp/a/b/c/d")         #从内到外一级一级的删除空目录,目录非空则不删除
# print(os.popen("ls /test").read())        #相当于os.system("ls /test"),可以读到命令的值

os.system("touch /tmp/1.txt")
os.system("ls -l /tmp/1.txt")           #强大的调用shell命令的操作,几乎能调任何命令
递归函数
  • 递归调用:一个函数,调用了自身,称为递归调用
  • 递归函数:一个会调用自身的函数称为递归函数
    凡是循环能干的事,递归都能干
  • 编写递归函数的方式:
    1、写出临界条件
    2、找这一次和上一次的关系
    3、假设当前函数已经能用,调用自身计算上一次的结果,再求出本次的结果
需求,输入一个数(大于等于1),求1+2+3+……+n的和
#  普通函数写法:
def sun1(n):
    sum = 0
    for x in range(1,n + 1):
        sum += x
    return sum

#   递归来写
'''
1+2+3+4+5
sum2(1) + 0 = sum2(1)
sum2(1) + 2 = sum2(2)
sum2(2) + 3 = sum2(3)
sum2(3) + 4 = sum2(4)
sum2(4) + 5 = sum2(5)


5 + sum2(4)
5 + 4 + sum2(3)
5 + 4 + 3 + sum2(2)
5 + 4 + 3 + 2 + sum2(1)
5 + 4 + 3 + 2 + 1
'''
def sum2(n):
    if n == 1:
        return 1
    else:
        return n * sum2(n - 1)
res = sum2(5)
print(res)
  • 栈 : 先进后出
模拟栈结构
'''
stack = []
stack.append("A")
print(stack)
stack.append("B")
print(stack)
stack.append("C")
print(stack)

#   出栈(在栈里取数据)
res1 = stack.pop()
print("res =",res1)
print(stack)
res2 = stack.pop()
print("res =",res2)
print(stack)
res3 = stack.pop()
print("res =",res3)
print(stack)
队列
  • 队列:先进先出
    import collections
import collections
#   创建一个队列
queue = collections.deque()
print(queue)
print(type(queue))

#   进队(存数据)
queue.append("A")
print(queue)
queue.append("B")
print(queue)
queue.append("C")
print(queue)

#   出对(取数据)
res1 = queue.popleft()
print("res1 =", res1)
print(queue)
res2 = queue.popleft()
print("res2 =", res2)
print(queue)
res3 = queue.popleft()
print("res2 =",res3)
print(queue)
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 173,203评论 25 708
  • 〇、前言 本文共108张图,流量党请慎重! 历时1个半月,我把自己学习Python基础知识的框架详细梳理了一遍。 ...
    Raxxie阅读 19,035评论 17 410
  • # Python 资源大全中文版 我想很多程序员应该记得 GitHub 上有一个 Awesome - XXX 系列...
    aimaile阅读 26,563评论 6 427
  • 使用方法 模拟select 会触发 原生select 的onchange 事件,改变select 值。
    moxhuis阅读 1,445评论 0 1
  • 这段时间感觉自己精神状态好了很多,想说说自己的变化。 虽然我知道现在并没有什么特别之处值得拿出来说的,但是如果你知...
    韵之加油阅读 198评论 0 1