愛上python(幾個小例子)


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",所以得到該方法。

未完待續。。。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM