1. 字符串小练习

>>> s="1a2a3a4a5a"

>>> s1=s.split('a')

>>>

>>> s1

['1', '2', '3', '4', '5', '']

>>> 'b'.join(s1)

'1b2b3b4b5b'

  1. 小复习:

>>> import os

>>> os.linesep #查询换行符

'\r\n'

>>> os.name

'nt'

练习:

>>> os.path.exists("e: \\test1")
True
>>> os.path.exists("e: \\test1xxx")
False
题目:判断一个文件是否存在,如果不存在,则创建这个文件,如果在,就把文件的内容做个输出

>>> if os.path.exists("e:\\b.py"):
...     with open("e:\\b.py") as fp:
...         print fp.read()
... else:
...     with open("e:\\b.py",'w') as fp:
...         fp.write("")
...

  1. 查看环境变量换行符:

>>> os.sep

'\\'

>>> os.pathsep

';'

>>>

  1. 查看目录:

>>> os.system("dir")

>>> os.system("dir2")
'dir2' 不是内部或外部命令,也不是可运行的程序
或批处理文件。
1

这个命令的强大之处,利用linux命令在windows下执行。

  1. 面试:要会linux命令,30个左右。

Eg:怎么查询动态日志

tail -f

小技巧:被问到的命令不会,可以转移一下说自己忘记了,但是会其他的命令。表明自己不是一点都不懂。

awk列处理

sed行处理

shell

测试人员经常用到shell命令,安装和维护测试环境时使用。

常用shell:sort,unique,vmstat,iostat,free

  1. 判断当前所在目录:

>>> os.getcwd()

'E:\\'

  1. 查询方法:

>>> dir(os)

>>> dir(os.path)

  1. 创建目录:

>>> os.mkdir("test1")

练习:题目:创建一个10层深的目录,每个目录下面,创建一个和目录名一致的txt文件

算法:先创建一级目录,进入该目录,创建文件;再此目录下再次创建目录,进入,创建文件和目录……

# -*- coding: utf-8 -*- #
import os
os.chdir("e:\\test6")  #先进入到一个目录,在这个下面创建
for i in range(1,11):
    os.mkdir("gloryroad"+str(i))

os.chdir("gloryroad"+str(i))  #进入到新创建的目录
    with open("gloryroad"+str(i)+".txt","w") as fp:
        fp.write("")

也可以直接pass,不写入空

# -*- coding: utf-8 -*- #

import os

#os.chdir("e:\\test6")

for i in range(1,11):

os.mkdir("gloryroad"+str(i))  #用到str做类型强转,因为字符串和数字不能直接拼接

os.chdir("gloryroad"+str(i))

with open("gloryroad"+str(i)+".txt","w") as fp:

pass

直接用getcwd是不能进入到新建的以及目录中并且保持不变的。

# -*- coding: utf-8 -*- #

import os

#os.chdir("e:\\test6")

for i in range(1,11):

os.mkdir("gloryroad"+str(i))

os.getcwd()

with open("gloryroad"+str(i)+".txt","w") as fp:

fp.write("")

结果是都建立在了同一级。

  1. 创建多级目录:

>>> os.makedirs(r"e:\\1\2\3\4\5")

  1. 其他操作目录命令:

安装命令:os.system("pip list")

删除目录:>>> os.removedirs(r"e:\1\2\3\4\5")  有内容的没办法直接删

从后往前开始执行删除,4,5没有内容会删除,但如果3有内容会到此停止,不在往上继续删。

删除一个目录下所有内容:>>> shutil.rmtree("e:\\test1") 有内容也会直接删除,把根目录都直接删除了。

删除操作前要先看自己在哪个目录下才行。

判断目录下有哪些:

>>> os.listdir("e:")

判断是否是文件:

>>> os.path.isfile("e:\\b.py")

判断是否是目录:

>>> os.path.isdir("e:\\b.py")

路径拼接:从当前目录去到其他路径,而不是手动切换。

>>> os.path.join("e:\\","a.py")

'e:\\a.py'

练习:统计一个目录下的文件和目录的个数

# -*- coding: utf-8 -*- #

import os

os.chdir("e:\\test1")

file_num=0

dir_num=0

for i in os.listdir("e:\\test1"):

if os.path.isfile(i):

file_num+=1

if os.path.isdir(i):

dir_num+=1

print "file_num:%s" %file_num

print "dir_num:%s" %dir_num

老师的方法:

# -*- coding: utf-8 -*- #
import os
def count_file_and_dir_number(dir_path):
    if not os.path.exists(dir_path):
        return 0,0
    os.chdir(dir_path)
    file_num=0
    dir_num=0
    for i in os.listdir(dir_path):
        if os.path.isfile(i):
            file_num+=1
        else:
            dir_num+=1
    return file_num,dir_num
file_num,dir_num=count_file_and_dir_number("e:\\test1")
print "file number:%s" %file_num
print "dir number:%s" %dir_num

  1. Remove删除一个文件

>>> import os

>>> os.remove("e:\\b.py")

  1. 改名字

>>> os.rename("e:\\b.txt","e:\\c.txt")

  1. 查看文件的操作时间:

>>> import time

>>> time.localtime(1501111)

time.struct_time(tm_year=1970, tm_mon=1, tm_mday=18, tm_hour=16, tm_min=58, tm_s

ec=31, tm_wday=6, tm_yday=18, tm_isdst=0)

>>> t1=time.localtime(123444)

>>> time.strftime("%Y-%m-%d",t1) 年月日

'1970-01-02'

>>> time.strftime("%Y-%m-%d %H-%M-%S",t1) 年月日时分秒

'1970-01-02 18-18-24'

  1. 设定文件的访问时间和修改时间

os.utime(r'c:\gloryroadtest.txt',(1375448978,1369735977))

目录也适用: os.utime(r'c:\gloryroadtest',(1375448978,1369735977))

  1. 制造临时文件

#encoding=utf-8

import os

file=os.tmpfile()

file.write("hi1\n")

file.write("hi2\n")

file.write("hi3\n")

file.seek(0)

for i in file:

print i

print file

file.close()

  1. 获取系统环境变量

>>> os.environ

  1. 判断文件操作权限

import os
print os.access(r'c:\gloryroadtest.txt', os.W_OK)
print os.access(r'c:\gloryroadtest.txt', os.R_OK)
print os.access(r'c:\gloryroadtest.txt', os.X_OK)

  1. 修改文件操作权限

import os
os.chmod(r'c:\gloryroadtest.txt', 777)

在linux上才有效,设定文件权限为可读、可写、可执行。421

  1. 运行shell命令,并返回一个文件对象。然后通过操作文件的方法去操作这个文件对象。

>>> dirList = os.popen('dir d:\\test*.*')

>>> for i in dirList.readlines():

...     print i

...

驱动器 D 中的卷是 DATA

卷的序列号是 66BF-D3EA

d:\ 的目录

  1. *** 重点:遍历目录下所有目录和文件

import os

for root, dirs, files in os.walk("e:\\test1",topdown=False) :

print u"当前目录:",root #打印目录绝对路径

for name in files :

print u'文件名:',os.path.join(root,name) #打印文件绝对路径

for name in dirs :

print u'目录名:',name #打印目录绝对路径

False从最深往上开始遍历

import os

for root, dirs, files in os.walk("e:\\test1",topdown=True) :

print u"当前目录:",root #打印目录绝对路径

for name in files :

print u'文件名:',os.path.join(root,name) #打印文件绝对路径

for name in dirs :

print u'目录名:',name #打印目录绝对路径

True是从最浅往最深开始遍历

老师总结:

False#topdown =Fasle 表示遍历从下向上开始
#topdown =True 表示遍历从上向下开始
先把当前要遍历目录下的子目录从小到大排序,
然后从最小的目录开始遍历,如果是topdown =Fasle
则从下向上遍历,如果是topdown =True则
从上到下遍历。root:当前正在的遍历的目录名称
dirs:表示正在被遍历目录中的所有子目录,dirs是个list
files:表示正在被遍历目录中的所有文件,files是个list

同学的方法:

>>> for root,dirs,files in os.walk("e:\\test1",topdown=True) :

...     print root,dirs,files

...

  1. 获取绝对路径

>>> import os

>>> os.path.abspath("b.txt")

'E:\\b.txt' #返回值是一个字符串

  1. 文件和目录分离

>>> os.path.split("e:\\test1\\a.txt")

('e:\\test1', 'a.txt')

也可以把文件名进行切割:

>>> os.path.splitext("a.txt")

('a', '.txt')

实质上还是对字符串在进行操作,对文件名本身是没有任何影响的。

也可以用下面的方法进行文件和目录的分离:

>>> os.path.dirname("e:\\test1\\a.txt")

'e:\\test1'

>>> os.path.basename("e:\\test1\\a.txt")

'a.txt'

>>> os.path.basename(r"e:\test1\a.txt")

'a.txt'

不写两个\\时就要在前面加r

  1. 判断是否为绝对路径

#encoding=utf-8
import os
print os.path.isabs(r'd:\gloryroad\a.py')
print os.path.isabs(r'a.py')

  1. 获取文件大小

import os
print os.path.getsize("d:\\gloryroad\\a.py")

print os.path.getsize("e:\\a.py")

统计目录的大小结果是不可信的。

统计文件是可用的。

  1. 拼接路径

import os
print os.path.join('c:\\aa', 'test', 'a.txt')

  1. 拆分驱动器和文件路径

#encoding=utf-8
import os
>>> print os.path.splitdrive("e:\\test1\\a.txt")

('e:', '\\test1\\a.txt')

  1. 查询操作时间

>>> os.path.getctime("e:\\b.py")  创建时间creat
1485680291.1242003
>>> os.path.getmtime("e:\\b.py")  最近修改时间modify
1503212560.4156132
>>> os.path.getatime("e:\\b.py")   最近访问时间access
1495725806.1386025

  1. 终止当前进程:sys.exit(0)
    sys.exit(1) 非正常退出
  1. 参数传入

#encoding=utf-8
#encoding=utf-8
import sys

for i in sys.argv:
    print i
    if i =="--help":
        print "gloyrorad system help info:xxxxx"

练习:累加

#encoding=utf-8
#encoding=utf-8
import sys

def sum(*arg):
    result=0
    for i in arg[1:]:   从1开始切片是为了找到1 2 3,排除程序名称
        result+=int(i)
    return result

print sum(*sys.argv)  *表示拆包

**表示拆字典

  1. 传参例子

# -*- coding: utf-8 -*- #

import os

import sys

def readfile(filename):

'''Print a file to the standard output.'''

f = file(filename)

while True:

line = f.readline()

if len(line) == 0:

break

print line,

f.close()

#print "sys.argv[0]---------",sys.argv[0]

#print "sys.argv[1]---------",sys.argv[1]

#print "sys.argv[2]---------",sys.argv[2]

# Script starts from here

if len(sys.argv) < 2:

print 'No action specified.'

sys.exit()

if sys.argv[1].startswith('--'):

option = sys.argv[1][2:]

# fetch sys.argv[1] but without the first two characters

if option == 'version':

print 'Version 1.2'

elif option == 'help':

print '''"

This program prints files to the standard output.

Any number of files can be specified.

Options include:

--version : Prints the version number

--help    : Display this help'''

else:

print 'Unknown option.'

sys.exit()

else:

for filename in sys.argv[1:]:

readfile(filename)

sys.exit()

  1. 标准输入

#encoding=utf-8

import sys

counter = 1

while True:

line = sys.stdin.readline()

if not line.strip():  有回车时会终止循环输入

break

print "%s:%s" % (counter,line)

counter += 1

  1. 系统一般会提供标准输入,标准输出,标准错误输出。
  2. 复制操作

>>> import shutil

>>> shutil.copyfile("e:\\a.py","e:\\test1\\xx.txt")

>>> shutil.copytree("e:\\test1","e:\\test11")

>>> shutil.move("e:\\a.py","e://test1\\x.py")

shutil.rmtree("e:\\test5")

>>> dir(shutil)查询

最新文章

  1. Tips for newbie to read source code
  2. [Erlang 0104] 当Erlang遇到Solr
  3. web api authentication
  4. Linear regression with one variable算法实例讲解(绘制图像,cost_Function ,Gradient Desent, 拟合曲线, 轮廓图绘制)_矩阵操作
  5. 【Debug 报异常】Debug打断点报错
  6. Android---表格布局
  7. vim operation
  8. PHP输出表格的方法
  9. office安装不了 “windows installer 服务不能更新一个或多个受保护的windows文件”
  10. 如何减少不能重现的Bug
  11. RPC简介与Thrift框架
  12. 11.Java 加解密技术系列之 总结
  13. Gym 100952B&amp;&amp;2015 HIAST Collegiate Programming Contest B. New Job【模拟】
  14. Django 系列博客(十六)
  15. LAYUI select 下拉框得高度
  16. 爬坑之路---Google map
  17. lamp环境搭建(apache安装,mysql安装,php安装)
  18. PYTHON-流程控制之if/while/for-练习
  19. python QQTableView中嵌入复选框CheckBox四种方法
  20. java资源文件解读

热门文章

  1. ueditor单独调用图片上传
  2. android开发学习 ------- 上传本地项目到gitlab
  3. 【extjs6学习笔记】0.1 准备:基础概念 (01)
  4. uvm_object ——太极
  5. 【数据分析 R语言实战】学习笔记 第十一章 对应分析
  6. JavaScript数据格式验证探讨
  7. Azure 进阶攻略 | 关于Java 和事件中心的那不得不说的事
  8. Drools应用实例
  9. C# 一维数组 二位数组 多维数组
  10. Objective-C相关Category的收集(更新)