Python在操作系统层面上的操作
文件
用open()创建文件
用exist()检查文件或者目录是否存在
用isfile()检查是否为文件;用isdir()检查是否为路径;用isabs()检查是否为绝对路径
用copy()复制文件(import shutil)
用rename()重命名文件
用link()或者symlink()创建链接
1.符号链接和硬链接的区别:
硬链接中,找到一个文件的所有名称并不容易。可以考虑使用符号链接,它会把新名称当作文件存储。
2.
在Unix中,文件只存在于一个位置,但是可以有多个名称,这种机制叫做链接。link()会创建一个硬链接。symlink()会创建一个符号链接。islink()函数会检查参数是文件还是符号链接。
用chmod()修改权限
在Unix系统中,chomd()可以修改文件权限。可以设置用户(如果是你创建文件,那用户通常就是你),当前用户所在用户组以及其他用户组的读、写和执行权限。
这个命令接收一个压缩过的八进制值,这个值包含用户、用户组和权限。
# 让oops.txt只能被拥有者读
os.chmod('oops.txt', 0o400)
# 如果你不想用压缩过的八进制值,可以从stat模块中导入一些常量
import stat
os.chmod('oops.txt', stat.S_IRUSR)
用chown()修改所有者
这个函数也是Unix/Linux/Mac特有的。**你可以指定用户的ID(uid)和用户组(gid)来导入一些常量并用在语句中:
uid = 5
gid = 22
os.chown('oops', uid, gid)
用abspath()获取路径名(把一个相对路径名扩展成绝对路径名)
用realpath()获取符号的路径名(注意:Linux下os.path.realpath(‘jeeper.txt’的结果本应该是oops.txt的路径,而我的实验室在win7下,所以结果还是jeeper.txt的路径))
用remove()删除文件
目录
在大多数操作系统中,文件被存储在多级目录(现在经常被称为文件夹)。包含所有这些文件和目录的容器是文件系统(有时候被称为卷)。
使用mkdir()创建目录
使用rmdir()删除目录
使用listdir()列出目录内内容
使用chdir()修改当前目录
使用glob()列出匹配文件
glob()函数会使用Unix shell的规则来匹配文件或者目录,而不是更复杂的正则表达式。具体规则如下所示:
- *会匹配任意名称(正则表达式(re)是.*)
- ?会匹配一个字符
- [abc]会匹配字符a、b或c
- [!abc]会匹配除了a、b和c之外的所有字符
程序和进程
当运行一个程序时,操作系统会创建一个进程。它会使用系统资源(CPU、内存和磁盘空间)和操作系统内核中的数据结构(文件、网络连接、用量统计等)。进程之间是相互隔离的,即一个进程既无法访问其他进程的内容,也无法操作其他进程。
操作系统会跟踪所有正在运行的进程,给每个进程一小段运行时间,然后切换到其他进程,这样既可以做到公平又可以响应用户操作。
注意:后面两个函数出错,主要是因为操作系统是windows而不是linux
使用subprocess创建进程
到目前为止,你看到的所有程序都是单进程程序。你可以使用Python标准库中的subprocess模块来启动和终止其他程序。
getoutput()
如果只是想在shell中运行其他程序并获取它的输出,可以使用getoutput()函数。
# 这里获取了Unix date程序的输出
import subprocess
ret = subprocess.getoutput('date')
注意:在程序执行完毕之前,你获取不到任何内容。如果需要调用一些比较耗时的程序,可以使用并发。
因为getoutput()的参数是一个字符串,可以表示一个完整的shell命令,所以你可以在里面使用参数、管道、I/O重定向<和>,等等:
ret = subprocess.getoutput('date -u')
ret = subprocess.getoutput('date -u | wc')
check_output()
check_output()可以接受一个命令和参数列表。默认情况下,它返回的不是字符串,而是字节类型的标准输出。此外,这个函数并没有使用shell:
ret = subprocess.check_output(['date', '-u'])
getstatusoutput()
getstatusoutput()返回一个包含状态码和输出的元组:
ret = subprocess.getstatusoutput('date')
call()
call()只返回退出状态(在Unix类操作系统中,退出状态0通常表示运行成功)
ret = subprocess.call('date')
你可以用两种方式来运行带参数的程序。
在字符串中写明参数
# 需要加上参数shell=True,这个样子函数就会用shell来执行命令
ret = subprocess.call('date -u', shell=True)
出入一个参数列表
# 不需要调用shell
ret = subprocess.call(['date', '-u'])
使用multiprocessing创建进程
你可以在一个单独的进程中运行一个Python函数,也可以使用multiprocessing模块在一个程序中运行多个进程。
import multiprocessing
import osdef whoami(what):print("Process %s says: %s" % (os.getpid(), what))def do_this(what):whoami(what)if __name__ == "__main__":whoami("I'm the main program")for n in range(4):# Process()函数会创建一个新进程来运行do_this()函数p = multiprocessing.Process(target=do_this, args=("I'm function %s" % n,))p.start()
结果:
Process 28356 says: I'm the main program
Process 28644 says: I'm function 0
Process 28572 says: I'm function 3
Process 28628 says: I'm function 1
Process 28612 says: I'm function 2
multiprocessing模块真正的功能比这个例子中展示的要强大得多。当你需要用多线程来减少运行时,它非常有用,比如下载需要抓取的页面,调整图片尺寸等。它支持任务队列和进程间通信,而且可以等待所有进程执行完毕。
使用terminate()终止进程
如果创建了一个或者多个进程并且想终止它们。下面的例子中,我们的进程会一直计数到百万,每次计数之后都会等待1秒并打印出相关信息。然而,主程序只会保持5秒耐心,之后就会终止程序:
import multiprocessing
import time
import osdef whoami(name):print("I'm %s, in process %s" % (name, os.getpid()))def loopy(name):whoami(name)start = 1stop = 10000000for num in range(start, stop):print("\tNumber %s of %s. Honk!" % (num, stop))time.sleep(1)if __name__ == "__main__":whoami("I'm the main program")p = multiprocessing.Process(target=loopy, args=("loopy",))p.start()time.sleep(5)p.terminate()
结果:
I'm I'm the main program, in process 29692
I'm loopy, in process 25944Number 1 of 10000000. Honk!Number 2 of 10000000. Honk!Number 3 of 10000000. Honk!Number 4 of 10000000. Honk!Number 5 of 10000000. Honk!Process finished with exit code 0
日期和时间
datetime模块
datetime模块定义了4个主要的对象,每个对象都有很多方法:
- date 处理年、月、日(date的范围是date.min(1-1-1)到date.max(9999-12-31),不能使用它来进行和历史或者天文相关的计算)
- time 处理时、分、秒和微秒
- datetime 处理日期和时间同时出现的情况
- timedelta 处理日期和/或时间间隔
使用time模块
Python的datetime模块中有一个time对象,Python还有一个单独的time模块。
一种表示绝对时间的方法是计算从某个起始点开始的秒数。Unix时间使用的是从1970年11月1日0点开始的秒数。这个值通常被称为纪元。它是不同系统之间最简单的交换日期时间的方法。
time模块的time()函数会返回当前时间的纪元值:
尽量多实用UTC来代替时区。UTC是绝对时间,和时区无关。如果你有服务器,把它的时间设置为UTC,不要使用本地时间。
读写日期和时间
isoformat()并不是唯一一种可以打印日期和时间的方法,如time模块中的ctime()函数。
strftime()
strftime()把日期和时间转换成字符串,这个方法在datetime、date和time对象中都有,在time模块中也有。
strftime()的格式化字符串
格式化字符串 | 日期/时间单元 | 范围 |
---|---|---|
%Y | 年 | 1900-… |
%m | 月 | 01-12 |
%B | 月名 | January,… |
%b | 月名缩写 | Jan,… |
%d | 日 | 01-31 |
%A | 星期 | Sunday,… |
%a | 星期缩写 | Sun,… |
%H | 时(24小时制) | 00-23 |
%I | 时(12小时制) | 01-12 |
%p | 上午/下午 | AM, PM |
%M | 分 | 00-59 |
%S | 秒 | 00-59 |
数字都是左侧补零
strptime()
如果要把字符串转换成日期或者时间,可以对同样的格式化字符串使用strptime()函数。
setlocale()打印出不同的月和日名称
unsupported locale setting
or
下面是结合了语言和国家名称的缩写字符串
其他模块
第三方模块:
- arrow(这个模块有许多日期和时间函数,并提供了简单易用的API)
- dateutil(这个模块可以解析绝大多数日期格式,并且可以很好地处理相对日期和时间)
- iso8601(这个模块会完善标准库中对于ISO8601格式的处理)
- fleming(这个模块提供了许多时区函数)
Python在操作系统层面上的操作相关推荐
- Python解决操作系统习题中PV操作过桥问题
上图是一道操作系统PV操作的习题,用Python解决之,建立一个线程模拟行人从北向南过桥,另一个线程模拟行人从南向北过桥,建立四个信号量,分别实现对桥.北桥段.南桥段和桥中央的互斥. north_si ...
- SAP fiori上直接连接到操作系统层面 然后进行相关操作的需求
哪位童鞋弄过 fiori上直接连接到操作系统层面 然后进行相关操作的需求啊? 现在在做一个串口的, 我是在OS上跑一个nodeJS的服务, 网页(fiori)直接websocket和OS的服务通讯 应 ...
- python上传文件到windows_python自动化-WinSpy+pywin32文件上传操作
'''百度首页搜索上传图片为例''' #前提条件 1.使用winspy定位绝对路径 #前提条件 2.安装库pywin32 采用pip安装pip install pywin32 或其他途径安装 #1.访 ...
- python selenium 文件上传_python-selenium -- 文件上传操作
一.文件上传操作 win32gui.FindWindow(IPClassName,IPWindowName) 自顶层窗口开始寻找匹配条件的窗口,并返回这个窗口的句柄: IPClassName:类名,在 ...
- 多线程操作数据库时为了防止数据的增删改的混乱该在数据库层还是程序层面上进行同步?
多线程操作数据库时为了防止数据的增删改的混乱该在数据库层还是程序层面上进行同步? [问题点数:60分,结帖人jiao_zg] 不显示删除回复 显示所有回复 显示星级回复 显示得分回复 只显示楼主 收藏 ...
- python语言type board_菜鸟学Python,双手奉上老司机给上路新手总结的Python实战问题……...
针对Python这一话题每天后台都会有不少小伙伴提出问题,下面我就将这些问题进行汇整,产出"Python实战问题篇",我认为这些问题非常具有代表性,希望可以帮到大家. 第一类问题: ...
- python wx窗口无法关闭_菜鸟学Python,双手奉上老司机给上路新手总结的Python实战问题…...
针对Python这一话题每天后台都会有不少小伙伴提出问题,下面我就将这些问题进行汇整,产出"Python实战问题篇",我认为这些问题非常具有代表性,希望可以帮到大家. 第一类问题: ...
- python 读取word_教你怎么使用 Python 对 word文档 进行操作
使用Python对word文档进行操作 一.安装Python-docx Python-docx是专门针对于word文档的一个模块,只能读取docx 不能读取doc文件.说白了,python就相当于wi ...
- python的优点有哪些-Python有哪些技术上的优点?比其他语言好在哪儿?
原标题:Python有哪些技术上的优点?比其他语言好在哪儿? 作者:马克·卢茨(Mark Lutz) 导读:本文是对Python一些最优的技术特性的快速介绍,以解答初学者关心的问题并消除他们最常见的疑 ...
最新文章
- 之前遇到一位老面试官,问我的问题真的有点东西
- java语法基础(总结)
- 李开复:谷歌产品经理眼中的产品经理
- Elasticsearch入门hello world (macos)【二】java请求Elasticsearch
- hadoop学习6 运行map reduce出错
- 深度学习之边框回归(Bounding Box Regression)
- php免费根据ip查城市,根据ip获取城市的方法
- 3、什么是控制反转(IoC),什么是依赖注入
- win8 配置要求
- 提升你幽默感的经典短句
- 设计模式私家笔记——概述:设计模式是银弹吗?
- 工具推荐——Apt_t00ls
- node生成唯一设备id(node-machine-id)
- Word文档怎样添加图片?技巧分享!怎么在Word文档中加入图片?
- UiBot 邮件群发
- 搭积木的诀窍(数学题)
- python 处理soap-post方法
- 《战略人力资源管理》
- QQ网页微信、QQ二维码登录原理分析(整理)
- VMware Workstation 虚拟机安装Linux centos 6.5 系统步骤