1、任務:簡單測試局域網中的網絡是否連接,ip范圍:192.168.2.101到192.168.2.200。
python 實現代碼:
import subprocess cmd="cmd.exe" begin=101 end=200 while begin<end: p=subprocess.Popen(cmd,shell=True,stdout=subprocess.PIPE,stdin=subprocess.PIPE,stderr=subprocess.PIPE) p.stdin.write("ping 192.168.2."+str(begin)+"\n") p.stdin.close() p.wait() print "excution result:\n" print "%s\n"%p.stdout.read() begin=begin+1
import subprocess 是引進subprocess包,其作用主要是執行外部的命令和程序;
child.stdin,child.stdout,child.stderr分別是標准輸入流,標准輸出流,標准錯誤流;
在輸入流中輸入ping ip 回車即是在dos命令符下查看兩個計算機之間是否有網絡連接的操作,利用stdin.write()實現;
p.stdin.close()關閉輸入流,p.wait()等待子進程p進行完;
print出運行結果,即p.stdout.read();%在python中有格式化輸出的作用,比如:a = 'test' print 'it is a %s' %(a) 打印結果 it is a test
begin+1循環。
簡單有效的python就實現了該任務。
2、刪除某個文件夾(刪除沒有子文件夾的文件,就相當於樹的葉子結點)
1 # -*- coding: utf-8 -*- 2 import os 3 ipath='C:\\Users\\hzj\\Desktop\\haha' 4 filepath=unicode(ipath,'utf8') 5 os.remove(filepath)
代碼很簡單,但是刪除的時候遇到含中文路徑的文件夾就出錯,后來加了# -*- coding: utf-8 -*-,即把文件編碼類型改為UTF-8的類型,輸入這個代碼就可以讓.py源文件里面有中文了,用unicode()轉換一下就好用了,不過這種方法不能刪除空的文件夾,下面的方法可以把一個文件夾及其包含的所有子文件夾刪除:(刪除一個文件,包含子文件的,相當於樹的根)
1 # -*- coding: utf-8 -*- 2 import shutil 3 ipath=('c:\\Users\\hzj\\Desktop\\刪除file') 4 filepath=unicode(ipath,'utf8') 5 shutil.rmtree(filepath)
用shutil.rmtree()方法就能全部刪除。而且,用python刪除的文件都不會進入回收站。
清空某個文件夾:(最后只剩下一個空文件夾,樹的根)
1 # -*- coding: utf-8 -*- 2 import os 3 ipath="c:\\Users\\hzj\\Desktop\\emptyFile" 4 filepath=unicode(ipath,'utf8') 5 for root,dirnames,filenames in os.walk(filepath,topdown=False): 6 for name in filenames: 7 os.remove(os.path.join(root,name)) 8 for name in dirnames: 9 os.rmdir(os.path.join(root,name))
os.walk()函數可以得到三個參數,路徑、路徑下的文件夾(有子文件的)、路徑下的文件,這樣循環遞歸就可以把一個文件清空了,注意os.rmdir()函數只能刪除空的文件夾,所以os.walk()函數里面的參數topdown設為False,即由下到上順序刪除文件。先刪除子文件,再刪除空文件夾。最后只剩下空的主文件夾。
3、修改文件名稱:
1 # -*- coding: utf-8 -*- 2 import os,sys 3 path="c:\\Users\\hzj\\Desktop\\file" 4 newName=unicode('楠楠.txt','utf8') 5 ipath=unicode(path,'utf8') 6 files=os.listdir(ipath) 7 if 'nannan.txt' in files: 8 os.rename(os.path.join(ipath,'nannan.txt'),os.path.join(ipath,newName))
1、如果path指定的文件夾不是這個程序所在的目錄,rename函數里面的路徑就必須是絕對路徑,否則就會報“WindowsError: [Error 2]”錯誤;
2、os.listdir()函數獲取當前文件夾下面的子文件夾名稱列表。
4、修改文件后綴:
1 # -*- coding: utf-8 -*- 2 import os,sys 3 path="c:\\Users\\hzj\\Desktop\\file" 4 ipath=unicode(path,'utf8') 5 files=os.listdir(ipath) 6 for name in files: 7 pos=name.find(".") 8 if pos>=0: 9 if name[pos+1:]=="html": 10 os.rename(os.path.join(ipath,name),os.path.join(ipath,name[:pos+1]+"txt"))
pos=name.find("."),就是找到字符串name中的"."的位置,比如nannan.txt,pos就是6,和數組一樣,下表從0開始,這樣name[pos+1:]就是name[7:],就是"txt",name[:pos+1]就是"nannan.",name[1:5]就是"anna",其它同理。
find()函數如果找不到指定的字符串的話就會返回 ‘-1' 。
還有一種方式可以同時實現上面的功能,代碼如下:
1 # -*- coding: utf-8 -*- 2 import os,sys 3 path="c:\\Users\\hzj\\Desktop\\file" 4 ipath=unicode(path,'utf8') 5 files=os.listdir(ipath) 6 for name in files: 7 li=os.path.splitext(name) 8 if li[1]==".txt": 9 os.rename(os.path.join(ipath,name),os.path.join(ipath,li[0]+".html"))
用到了os.path.splitext()函數,它可以把一個文件名分割成兩部分,比如nannan.txt,分割后得到li,li[0]="nannan",li[1]=".txt",所以得到該方法。
未完待續。。。