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)查询

python基础-文件和目录的更多相关文章

  1. python基础--文件开发目录规范

    bin start.py 主要是放着当前项目的启动文件 conf settiings.py 放着对当前文件的配置文件 core src.py 主要核心逻辑 db 数据存储文件 lib common.p ...

  2. 【转】Python之文件与目录操作(os、zipfile、tarfile、shutil)

    [转]Python之文件与目录操作(os.zipfile.tarfile.shutil) Python中可以用于对文件和目录进行操作的内置模块包括: 模块/函数名称 功能描述 open()函数 文件读 ...

  3. Python操作文件和目录

    Python操作文件和目录 读写文件比较简单,有一点特别注意就好了 windows下Python默认打开的文件以gbk解码,而一般我们的文件是utf-8编码的,所以如果文本含有中文,就会出现异常或者乱 ...

  4. python 基础-文件读写'r' 和 'rb'区别

    原文链接: python基础-文件读写'r' 和 'rb'区别 一.Python文件读写的几种模式: r,rb,w,wb 那么在读写文件时,有无b标识的的主要区别在哪里呢? 1.文件使用方式标识 'r ...

  5. Python之文件与目录操作及压缩模块(os、shutil、zipfile、tarfile)

    Python中可以用于对文件和目录进行操作的内置模块包括: 模块/函数名称 功能描述 open()函数 文件读取或写入 os.path模块 文件路径操作 os模块 文件和目录简单操作 zipfile模 ...

  6. Python之文件与目录操作(os、zipfile、tarfile、shutil)

    Python中可以用于对文件和目录进行操作的内置模块包括: 模块/函数名称 功能描述 open()函数 文件读取或写入 os.path模块 文件路径操作 os模块 文件和目录简单操作 zipfile模 ...

  7. Python之文件与目录

    file 通常建议使用open()打开文件,file用于类型判断 如果要把数据写到磁盘上,除调用flush()外,还得用sync(),以确保数据从系统缓冲区同步到磁盘.close()总是会调用这两个方 ...

  8. python获取文件所在目录

    1.执行的python程序获取自己文件所在目录 import os,sys os.chdir(sys.path[0]); dir_name = os.path.abspath(os.path.join ...

  9. 【Python】Python基础教程系列目录

    Python是一个高层次的结合了解释性.编译性.互动性和面向对象的脚本语言. 在现在的工作及开发当中,Python的使用越来越广泛,为了方便大家的学习,Linux大学 特推出了 <Python基 ...

随机推荐

  1. EF Core MySql GUID配置方式

    builder.Property(m => m.Id) .HasColumnName("Id") .ForMySQLHasColumnType("char(36)& ...

  2. C# 连接 Oracle,读取Blob字段数据,存到文件中去,包括pdf等等

    代码如下,记得引入Oracle的dll using System; using System.Collections.Generic; using System.ComponentModel; usi ...

  3. poj3046

    dp,可以再优化. #include <iostream> #include <cstdio> #include <cstring> using namespace ...

  4. WebService学习之旅(四)Apache Axis2的安装

    一.Axis2简介 Axis2是目前使用较多的WebService引擎,它是Axis1.x的升级版本,不仅支持SOAP1.1和SOAP1.2,而且也提供了对REST风格WebService的支持. A ...

  5. iOS之创建CocoaPods公有库教程

    简介 在开发过程中,经常会使用到第三框架,我们通过一个pod install命令,很方便的就将第三方框架加到我们自己的项目中. 如果我们也想将自己写的组件或库开源出去,让别人也可以通过pod inst ...

  6. COGS 1144. [尼伯龙根之歌] 精灵魔法

    ★   输入文件:alfheim.in   输出文件:alfheim.out   简单对比时间限制:1 s   内存限制:128 MB [题目背景] 『谜题在丛林中散发芳香绿叶上露珠跳跃着歌唱火焰在隐 ...

  7. block的优势

    https://developer.apple.com/library/content/documentation/Cocoa/Conceptual/Blocks/Articles/bxOvervie ...

  8. Shell脚本之for循环、while循环,if语句、case语句

    1. for循环一般格式: 格式1: for((条件)) do 动作 done 格式2: for 变量名 in 范围 do 动作 done1234567891011121314实验:##1. 输出数字 ...

  9. python之路——目录

    目录 python基础部分 基础部分 介绍.基本语法.流程控制 列表 元祖 字符串 字典 集合 文件操作 函数 变量 递归 迭代器,生成器,装饰器,Json和pickle 数据序列化 函数 初识函数 ...

  10. webpack 使用总结

    参考:http://www.ferecord.com/webpack-summary.html#base64 写的比较详细了