工作中經常需要提取apk檔案的特定URL地址,如是想到用Python指令碼進行自動處理。
需要用到的Python基礎知識如下:
os.walk()
函式宣告:os.walk(top,topdown=True,onerror=None)
(1)參數top表示需要遍曆的頂級目錄的路徑。
(2)參數topdown的預設值是“True”表示首先返回頂級目錄下的檔案,然後再遍曆子目錄中的檔案。當topdown的值為"False"時,表示先遍曆子目錄中的檔案,然後再返回頂級目錄下的檔案。
(3)參數onerror預設值為"None",表示忽略檔案遍曆時的錯誤。如果不為空白,則提供一個自訂函數提示錯誤資訊後繼續遍曆或拋出異常中止遍曆。
傳回值:函數返回一個元組,含有三個元素。這三個元素分別是:每次遍曆的路徑名、路徑下子目錄列表、目錄下檔案清單。
os.walk使用執行個體:刪除某個檔案夾(當然可以通過os.listdir的遞迴調用刪除)
複製代碼 代碼如下:
#! /usr/bin/env python
#coding=utf-8
import os
def Remove_dir(top_dir):
if os.path.exists(top_dir)==False:
print "not exists"
return
if os.path.isdir(top_dir)==False:
print "not a dir"
return
for dir_path,subpaths,files in os.walk(top_dir,False):
for file in files:
file_path=os.path.join(dir_path,file)
print "delete file:%s" %file_path
os.remove(file_path)
print "delete dir:%s" %dir_path
os.rmdir(dir_path)
#調用
Remove_dir(r"C:\Users\Administrator\Desktop\abc")
Python執行系統命令的方法 os.system(),os.popen(),commands.getstatusoutput()
os.system()無法獲得到輸出和傳回值;
通過os.popen() 返回的是 file read 的對象,對其進行讀取 read() 的操作可以看到執行的輸出,但是得不到傳回值。
通過 commands.getstatusoutput() 方法就可以獲得到傳回值和輸出
(status, output) = commands.getstatusoutput('cat /proc/cpuinfo')
3. Python中operator模組的contains(...) 函數
contains(a, b) -- Same as b in a (note reversed operands). 判斷b是否被a包含
基礎知識介紹完了,可以上代碼了:
複製代碼 代碼如下:
import os
import operator
import commands
#from signature import *
inputdir = "./tmp"
for path, dir, files in os.walk(inputdir):
for file in files:
if not file.endswith('.apk'):
#print "not apk file."
continue
apkpath = os.path.join(inputdir, file)
cmd = './xxx -d %s' %apkpath
output = os.popen(cmd)
s = set()
#按行尋找URL
for line in output:
if operator.contains(line, "http://"):
#print tmp
start = line.index('''http://''')
end = line.index('''"''',start)
url = line[start:end]
s.add(url)
cmd = './yyy -t a.expense.mdk.a.tvd %s' %apkpath
#擷取命令執行結果及傳回值
status, output = commands.getstatusoutput(cmd)
# print output
if output.startswith('find'):
print output
for url in s:
if url.find('imei')!=-1:
print 'url is %s' %url.strip()
#print '========================='
s = ''