Python系统(os)相关操作

文件操作

python中常用于文件处理的模块有os,shutil等。

1 创建文件

文件的创建可以使用open()函数,如下创建一个test_file.txt的文件:

>>> with open(‘/Users/xxx/test_file.txt‘,‘wt‘) as f_obj:
...     print("This is the content from the test file---John",file=f_obj)
...
>>> 

执行完后,可以找到该文件/Users/xxx/test_file.txt

2 判断文件是否存在

判断文件是否存在可以使用os模块的exists()函数,如下:

>>> import os
>>> os.path.exists(‘/Users/xxx/test_file.txt1‘)
False
>>> os.path.exists(‘/Users/xxx/test_file.txt‘)
True>>> os.path.exists(‘/Users/xxx‘)True>>> os.path.exists(‘/Users/xxx‘)False

exists()函数也可以判断目录是否存在。

3 检查是否为文件

可以使用os 模块中的isfile()来检查是否是文件,如下:

>>> os.path.isfile(‘/Users/xxx‘)
False
>>> os.path.isfile(‘/Users/xxx/test_file.txt‘)
True
>>> 

4 文件复制

使用shutil模块中的copy()/remove()函数可以用来复制文件,如下:

>>> import shutil
>>> shutil.copy(‘/Users/xxx/test_file.txt‘,‘/Users/xxx/test_file_copy.txt‘)
‘/Users/xxx/test_file_copy.txt‘
>>>
>>> shutil.move(‘/Users/xxx/test_file_copy.txt‘,‘/Users/xxx/test_file_copy2.txt‘)
‘/Users/xxx/test_file_copy2.txt‘
>>> 

remove()相比copy(),会把原文件删除。

5 重命名文件

使用os模块中的rename()函数可以用来重命名一个文件,如下:

>>> import os
>>> os.rename(‘/Users/xxx/test_file_copy2.txt‘,‘/Users/xxx/test_file_will_be_delete.txt‘)
>>> 

6 删除文件

使用os模块中的remove()函数可以删除一个文件,如下:

>>> os.remove(‘/Users/liuchun/test_file_will_be_delete.txt‘)
>>> 

7 创建link

os模块中的link()函数可以用来创建文件的硬链接,symlink()函数可以用来创建软链接,如下:

>>> import os
>>> os.link(‘/Users//test_file.txt‘,‘/Users/xxx/test_file_hardlink‘)
>>> os.symlink(‘/Users/xxx/test_file.txt‘,‘/Users/xxx/test_file_softlink‘)
>>> 

xxxdembp:~ xxx$ ls -l test_file*
-rw-r--r--  2 xxx  staff  46 11 14 18:09 test_file.txt
-rw-r--r--  2 xxx  staff  46 11 14 18:09 test_file_hardlink
lrwxr-xr-x  1 xxx  staff  28 11 14 18:36 test_file_softlink -> /Users/xxx/test_file.txt

有关硬链接和软链接的知识请自行科普。

8 修改权限/所有者

os模块中的chmod()用来修改文件权限,这个命令接收一个压缩过的八进制(基数为 8)值,这个值包含用户、用户组和权限。而chown()用来修改文件的所有者,如下:

xxxdembp:~ xxx$ ls -l test_file.txt
-rw-r--r--  2 xxx  staff  46 11 14 18:09 test_file.txt

>>> os.chmod(‘/Users/xxx/test_file.txt‘,0o777)

xxxdembp:~ xxx$ ls -l test_file.txt
-rwxrwxrwx  2 xxx  staff  46 11 14 18:09 test_file.txt
xxxdembp:~ xxx$ 
>>> uid = 5
>>> gid = 22
>>> os.chown(‘/Users/xxx/test_file.txt‘, uid, gid)

9 获取路径

使用os模块中的abspath()可以获取文件的绝对路径,使用realpath()可以获取软链接对应的路径。

>>> os.path.abspath(‘/Users/xxx/test_file.txt‘)
‘/Users/xxx/test_file.txt‘
>>> os.path.realpath(‘/Users/xxx/test_file_hardlink‘)
‘/Users/xxx/test_file_hardlink‘
>>> os.path.realpath(‘/Users/xxx/test_file_softlink‘)
‘/Users/xxx/test_file.txt‘
>>> 

目录操作

os模块中的一些函数也可以对操作系统中的目录进行操作。

1 创建目录

使用os模块中的mkdir()可以创建目录,如下:

>>> import os
>>> os.mkdir(‘/Users/xxx/test_dir‘)
>>> os.path.exists(‘/Users/xxx/test_dir‘)
True
>>> 

2 列出目录内容

使用os模块的listdir()可以列出目录中的内容,如下:

test_dir目录为空
>>> os.listdir(‘/Users/liuchun/test_dir‘)
[]

在test_dir中创建一个子目录2nd_layer_dir和一个文件test_file1
>>> os.listdir(‘/Users/liuchun/test_dir‘)
[‘2nd_layer_dir‘, ‘test_file1‘]
>>> 

3 切换工作目录

使用os模块中的chdir()可以切换当前的工作目录,如下:

>>> os.listdir(‘/Users/xxx/test_dir‘)
[‘2nd_layer_dir‘, ‘test_file1‘]
>>> os.chdir(‘/Users/xxx/‘)
>>> os.listdir(‘.‘)
[‘.anyconnect‘, ‘.bash_history‘, ‘.bash_profile‘, ‘.bash_sessions‘, ‘.CFUserTextEncoding‘, ‘.cisco‘,  ‘test_dir‘, ‘test_file.txt‘, ‘test_file_hardlink‘, ‘test_file_softlink‘, ‘VirtualBox VMs‘]
>>> 

4 删除目录

使用os模块中的rmdir()函数可以删除目录,如下:

>>> os.rmdir(‘/Users/xxx/test_dir‘)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
OSError: [Errno 66] Directory not empty: ‘/Users/xxx/test_dir‘

# 目录不为空的时候删除会报如上错误,清空后可以删除如下
>>> os.rmdir(‘/Users/xxx/test_dir‘)
>>> 

5 查找匹配的文件目录

使用glob模块的glob()函数可以用来查找匹配文件或者目录,匹配的规则如下:

? *  匹配任意名称
? ?  匹配一个字符
? [abc]  匹配字符 a、b 和 c
? [!abc] 匹配除了 a、b 和 c 之外的所有字符

几个例子如下:

>>> import glob
>>> glob.glob(‘/Users/xxx/test*‘)
[‘/Users/xxx/test_dir‘, ‘/Users/xxx/test_file.txt‘, ‘/Users/xxx/test_file_hardlink‘, ‘/Users/xxx/test_file_softlink‘]
>>>
# 匹配以test开头的文件和目录

# 匹配以M或者D开头,s结尾的文件或目录
>>> glob.glob(‘/Users/xxx/[MD]*s‘)
[‘/Users/xxx/Documents‘, ‘/Users/xxx/Downloads‘, ‘/Users/xxx/Movies‘, ‘/Users/xxx/MyDocuments‘]
>>> 

程序/进程操作

1 一些基础操作

os模块中的函数可以获取进程号,当前工作目录,用户id和组id,如下:

>>> import os
>>> os.getpid()  #获取python解释器的pid
5541
>>> os.getcwd()  #获取当前工作目录
‘/Users/xxx‘
>>> os.getuid()   #获取 user id
501
>>> os.getgid()   # 获取 group id
20
>>> 

2 启动/执行进程

2.1 使用subprocess

使用subprocess模块可以执行命令,这个会生成一个子进程去执行。

getoutput()函数

返回命令执行结果

>>> import subprocess
>>> ret = subprocess.getoutput(‘date‘)
>>> ret
‘2016年11月14日 星期一 22时14分39秒 CST‘
>>> 

getstatusoutput()函数

返回状态码和命令执行结果

>>> ret = subprocess.getstatusoutput(‘date‘)
>>> ret
(0, ‘2016年11月14日 星期一 22时18分04秒 CST‘)
>>> ret2 = subprocess.getstatusoutput(‘ll‘)
>>> ret2
(127, ‘/bin/sh: ll: command not found‘)
>>> 

call()函数

获取命令执行状态

>>> ret3 = subprocess.call(‘ls -l‘,shell=True)
total 80
drwx------+  8 xxx  staff    272 11 14 14:34 Desktop
drwx------+  8 xxx  staff    272 11  3 15:21 Documents
drwx------+ 23 xxx  staff    782 11 14 18:04 Downloads
drwxr-xr-x   3 xxx  staff    102 11  3 16:07 IBMERS
drwx[email protected] 57 xxx  staff   1938 11 14 12:45 Library
drwx------+  3 xxx  staff    102 11  3 11:09 Movies
drwx------+  4 xxx  staff    136 11  4 18:36 Music

2.2 使用multiprocessing创建执行多个进程

import multiprocessing
import os

def do_this(what):
    whoami(what)

def whoami(what):
    print("Process %s says: %s" % (os.getpid(), what))

if __name__ == "__main__":
    whoami("I‘m the main program")
    for n in range(4):
        p = multiprocessing.Process(target=do_this,
        args=("I‘m function %s" % n,))
        p.start()

192:python$ python3 mp.py
Process 9088 says: I‘m the main program
Process 9089 says: I‘m function 0
Process 9090 says: I‘m function 1
Process 9091 says: I‘m function 2
Process 9092 says: I‘m function 3

时间和日期操作

python中提供了多种模块用于时间和日期的操作,比如calendar,datetime,time等模块。

1 datetime模块

定义了4个主要的对象,每个对象有各自的方法:

? date 处理年、月、日
? time 处理时、分、秒和分数
? datetime 处理日期和时间同时出现的情况
? timedelta 处理日期和 / 或时间间隔

 1 >>> from datetime import date
 2 >>> halloween = date(2014, 10, 31)
 3 >>> halloween
 4 datetime.date(2014, 10, 31)
 5 >>> halloween.day
 6 31
 7 >>> halloween.month
 8 10
 9 >>> halloween.year
10 2014
11
12 >>> halloween.isoformat()
13 ‘2014-10-31‘
14 >>>
15
16 >>> now=date.today()
17 >>> now
18 datetime.date(2016, 11, 14)
19 >>>
20
21 >>> from datetime import timedelta
22 >>> one_day = timedelta(days=1)
23 >>> tomorrow = now + one_day
24 >>> tomorrow
25 datetime.date(2016, 11, 15)
26 >>> now + 17*one_day
27 datetime.date(2016, 12, 1)
28 >>> yesterday = now - one_day
29 >>> yesterday
30 datetime.date(2016, 11, 13)
31 >>>
32
33 #datetime 模块中的 time 对象用来表示一天中的时间
34 >>> from datetime import time
35 >>> noon = time(12,0,0)
36 >>> noon
37 datetime.time(12, 0)
38 >>> noon.hour
39 12
40 >>> noon.minute
41 0
42 >>> noon.second
43 0
44 >>> noon.microsecond
45 0
46 >>>
47
48 >>> from datetime import datetime
49 >>> some_day = datetime(2016, 11, 12, 13, 24, 35,56)
50 >>> some_day.isoformat()
51 ‘2016-11-12T13:24:35.000056‘
52 >>>
53
54 >>> now = datetime.now()
55 >>> now
56 datetime.datetime(2016, 11, 14, 23, 46, 4, 459142)
57 >>> 

example

2 time模块

 1 #time 模块的 time() 函数会返回当前时间的纪元值,距离1970年1月1日0点开始的秒数
 2 >>> import time
 3 >>> now = time.time()
 4 >>> now
 5 1479138472.081136
 6 >>>
 7
 8 >>> time.ctime(now)
 9 ‘Mon Nov 14 23:47:52 2016‘
10 >>>
11
12 #struct_time对象,ocaltime() 会 返回当前系统时区下的时间,gmtime() 会返回 UTC 时间
13 >>> time.localtime(now)
14 time.struct_time(tm_year=2016, tm_mon=11, tm_mday=14, tm_hour=23, tm_min=47, tm_sec=52, tm_wday=0, tm_yday=319, tm_isdst=0)
15 >>> time.gmtime(now)
16 time.struct_time(tm_year=2016, tm_mon=11, tm_mday=14, tm_hour=15, tm_min=47, tm_sec=52, tm_wday=0, tm_yday=319, tm_isdst=0)
17 >>>
18
19 # 转换为纪元值
20 >>> tm = time.localtime(now)
21 >>> time.mktime(tm)
22 1479138472.0
23 >>>
24
25 #strftime()把时间和日期转换成字符串
26 >>> import time
27 >>> fmt = "It‘s %A, %B %d, %Y, local time %I:%M:%S%p"
28 >>> t = time.localtime()
29 >>> t
30 time.struct_time(tm_year=2014, tm_mon=2, tm_mday=4, tm_hour=19,
31 tm_min=28, tm_sec=38, tm_wday=1, tm_yday=35, tm_isdst=0)
32 >>> time.strftime(fmt, t)
33 "It‘s Tuesday, February 04, 2014, local time 07:28:38PM"
34
35 #strptime()把字符串转换成时间和日期
36 >>> time.strptime("2012-01-29", fmt)
37      time.struct_time(tm_year=2012, tm_mon=1, tm_mday=29, tm_hour=0, tm_min=0,
38      tm_sec=0, tm_wday=6, tm_yday=29, tm_isdst=-1)
39
40 #针对不同的语言地区输出不同的日期
41 >>> import locale
42 >>> from datetime import date
43 >>> halloween = date(2014, 10, 31)
44 >>> for lang_country in [‘en_us‘, ‘fr_fr‘, ‘de_de‘, ‘es_es‘, ‘is_is‘,]:
45      ...     locale.setlocale(locale.LC_TIME, lang_country)
46 ... halloween.strftime(‘%A, %B %d‘) ...
47 ‘en_us‘
48 ‘Friday, October 31‘
49 ‘fr_fr‘
50 ‘Vendredi, octobre 31‘
51 ‘de_de‘
52 ‘Freitag, Oktober 31‘
53 ‘es_es‘
54 ‘viernes, octubre 31‘
55 ‘is_is‘
56 ‘fo?studagur, okto?ber 31‘
57 >>>
58
59 #lang_country的值可以这样获取
60 >>> import locale
61 >>> names = locale.locale_alias.keys()

example

时间: 2024-12-14 13:26:27

Python系统(os)相关操作的相关文章

Selenium2+python自动化40-cookie相关操作【转载】

前言 虽然cookie相关操作在平常ui自动化中用得少,偶尔也会用到,比如登录有图形验证码,可以通过绕过验证码方式,添加cookie方法登录. 登录后换账号登录时候,也可作为后置条件去删除cookie然后下个账号登录 一.获取cookies:get_cookies() 1.获取cookies方法直接用:get_cookies() 2.先启动浏览器,获取cookies,打印出来发现是空:[] 3.打开博客首页后,重新获取cookies,打印出来,就有值了 二.登录后的cookies 1.先登录博客

Selenium2+python自动化40-cookie相关操作

前言 虽然cookie相关操作在平常ui自动化中用得少,偶尔也会用到,比如登录有图形验证码,可以通过绕过验证码方式,添加cookie方法登录. 登录后换账号登录时候,也可作为后置条件去删除cookie然后下个账号登录 一.获取cookies:get_cookies() 1.获取cookies方法直接用:get_cookies() 2.先启动浏览器,获取cookies,打印出来发现是空:[] 3.打开博客首页后,重新获取cookies,打印出来,就有值了 二.登录后的cookies 1.先登录博客

Python字典及相关操作(内含例题)

Python字典类型 今天将会介绍一种在python中十分常见的组合数据类型——字典 通过一些实例来理解字典中的常规操作 什么是字典类型? 列表中查找是通过整数的索引(元素在列表中的序号)来实现查找功能. 但很多应用程序需要更加灵活的查找方式,即表示索引的键和对应的值组成. 比如说:“用户名”查找“手机号”,“学号”查找“学院班级”等等 通过任意键信息查找一组数据中值信息的过程叫“映射” Python语言中,通过字典来实现映射. 简单理解为,字典为处理信息与信息相对应映射关系的组合数据类型. 字

python数据类型及相关操作

python数据类型详解 目录1.字符串2.布尔类型3.整数4.浮点数5.数字6.列表7.元组8.字典9.日期 1.字符串1.1.如何在Python中使用字符串a.使用单引号(')用单引号括起来表示字符串,例如:str='this is string';print str; b.使用双引号(")双引号中的字符串与单引号中的字符串用法完全相同,例如:str="this is string";print str; c.使用三引号(''')利用三引号,表示多行的字符串,可以在三引号

【python】conda相关操作

conda --version     检查conda版本conda update conda    升级conda --------------------------------------环境操作--------------------------------------conda info --envs    列出所有环境列表conda create --name snowflake biopython  创建新环境(名字叫snowflake )conda create -n bunni

LINUX系统---初级相关操作和知识

LINUX系统的初级,从安装LINUX开始,到处理简单的运维问题.搭建各种服务.解决网路问题.缓解服务器压力,写简单的shell脚本. 我们从基本的入门开始搞事情: 安装LINUX系统 对磁盘的使用 创建用户.管理用户.管理和创建用户组 分配权限 搭建服务 DNS MySQL Tomcat Nginx Apache zibbix 原文地址:https://www.cnblogs.com/george92/p/8439409.html

LINUX系统---中级相关操作和知识

LINUX系统的中级,来搞一些LINUX安全相关的东西,还有在公司生成中长搞的集群. RHCS集群 什么是高可用 什么是热备 什么是分布式 原文地址:https://www.cnblogs.com/george92/p/8439549.html

python中os模块操作目录与文件名小结

(1). 创建目录: SigleDir = 'sigle_layer' MultiDir = 'D:\\Web\\multi_layer' 创建单层目录: os.mkdir(SigleDir) 创建多层目录: os.makedirs(MultiDir) (2). 文件路径和文件名的折分与合并 拆分:  dirname, filename = os.path.split('D:\\python_code\\split_functon.py') print 'dirname=',dirname,';

Python字符串的相关操作

1.大小写转换 判断字符串 1 2 3 4 5 6 7 s.isalnum() #所有字符都是数字或者字母 s.isalpha() #所有字符都是字母 s.isdigit() #所有字符都是数字 s.islower() #所有字符都是小写 s.isupper() #所有字符都是大写 s.istitle() #所有单词都是首字母大写,像标题 s.isspace() #所有字符都是空白字符.\t.\n 大小写转换 1 2 3 4 s.upper() #把所有字符中的小写字母转换成大写字母 s.low