每一天成长1%,一年成长多少倍?但是每天退步%1,那又会是什么样的结果呢?
不积跬步无以至千里,朋友们加油!
001:这两个方法都能得到当前python脚本的路径
import inspect
this_file = inspect.getfile(inspect.currentframe())
print this_file
this_file = inspect.stack()[0][1]
print this_file
结果:C:\Documents and Settings\Administrator\桌面\test_gtest.py
002:获取调用当前脚本的python脚本路径
import inspect
this_file = inspect.stack()[1][1]
print this_file
结果:C:\Python27\lib\idlelib\run.py
003:路径处理
import inspect,os
this_file = inspect.stack()[1][1]
print this_file
print os.path.dirname(this_file)#将完整路径中的文件名去掉,返回目录路径
print os.path.basename(this_file)#将完整路径中的路径去掉,返回文件名
结果:
C:\Python27\lib\idlelib\run.py
C:\Python27\lib\idlelib
run.py
004:相对路径、绝对路径
print os.path.abspath('')#返回this_file的绝对路径
print os.path.abspath('../')#返回this_file的绝对路径
print os.path.abspath('../../')#返回this_file的绝对路径
结果:
C:\Documents and Settings\Administrator\桌面
C:\Documents and Settings\Administrator
C:\Documents and Settings
005:遍历文件夹文件:
import inspect,os
for root, dirs, files in os.walk('D:\Python',False):
print("Root = \"", root, "\"dirs = ", dirs, "files = ", files)
def list_all_dir_and_file(deep,path):
for i in os.listdir(path):
print('|---'*(deep + 1) + i)
if os.path.isdir(path+'\\'+i):
list_all_dir_and_file(deep+1, path+'\\'+i)
path = 'D:\Python'
print(path)
list_all_dir_and_file(0, path)
006:模块引用---将自己定义的其他路径下的模块添加到当前脚本扫描路径下,以便可以找到那个模块并使用:
比如路径是这样的:
|-----boot
|-----file_path_ine
|----- py1.py
|-----file_path_two
|-----py2.py
而py1.py想要使用py2.py里边的内容,在py1.py中就要这样:
import sys,inspect
this_file = inspect.getfile(inspect.currentframe())
print this_file
sys.path.append("%s/../file_path_two"%this_file)#这样就相当于把py2.py拷贝到当前路径下一样
import py2
#接下来就可以直接使用py2里边的东西了
007:系统环境变量的读取与设置:
os.getenv('path')
os.putenv('path_1','d:\\Python')
008:
global全局变量
number = 0
print number
def test():
global number
print number
009:比较函数cmp:
print (cmp('test','test'))#结果是0
010:路径分割函数1
filepath,filetype = os.path.splitext(path)
比如path = c:\\path1\\a.text
那么,filepath = c:\\path1\\a , filetype = .text
filepath,filetype = os.path.split(path)
那么,filepath = c:\\path1 , filetype =a.text
012:字符串分割函数:
filepath = 'c:\\path\\py1.py'
filename = filepath.split("\\")[-1]
print filename
这里边的-1指的是返回倒数第一个分割下来的,等价于此例子的filepath.split("\\")[2]
013:字典、数组的使用:
list={'a':'1','b':'2','c':'3'}
array = []
array.append(list)
for key in array[0]:
print ('%s = \'%s\', ' % (key, array[0][key]))
list_info={'1':'a','2':'b','3':'c'}
for key in list_info.keys():
print ('%c'%(key))
014:数组的使用:
4*3维数组:
myList = [([1] * 3) for i in range(4)]
print myList
myList[0][0]=0
myList[0][1]=1
myList[0][2]=2
myList[1][0]=3
myList[1][1]=4
myList[1][2]=5
myList[2][0]=6
myList[2][1]=7
myList[2][2]=8
print myList
结果:
>>>
[[1, 1, 1], [1, 1, 1], [1, 1, 1], [1, 1, 1]]
[[0, 1, 2], [3, 4, 5], [6, 7, 8], [1, 1, 1]]
>>>
015:python调用bat批处理,并传递参数:
python代码:
batpath = 'd:\\test.bat'
args2 = "test_args_1"
args3 = "test_args_2"
import subprocess , os
args = [batpath,args2,args3]#数量不限
process = subprocess.Popen(args)
os.system('pause')
process.wait()
bat代码:
d:\test.bat:
@echo off
echo 0 = %0
echo 1 = %1
echo 2 = %2
pause
@echo on
脚本运行结果:
016:在使用中需要用CMD命令行调用python脚本并向python脚本传参,这如何实现呢?
Python测试脚本:
# -*- coding: cp936 -*-
import sys
argv = sys.argv
print ('脚本名字是:' + argv[0])
for argsIndex in range(1,len(argv)):
print ('获得的命令行参数是:%d - %s'%(argsIndex,argv[argsIndex]))
这个很容易理解,就与C里边的main函数参数一样的,而CMD传参的时候,总是失败,先说一下在python2.7下,CMD调用:
C:\Python27\python "C:\Documents and Settings\Administrator\桌面\cmdArgs.py" args1 args2 args3
运行结果:
说一下,第一个参数是调用的应用程序EXE,我们调用的是python的EXE文件,写成python和python.exe都可以,第二个参数是该exe调用的脚本名称,由于有路径,所以加上双引号,后边是想传进去的参数。
017:补充一下一个python调用另一个python里边定义的函数的方法:
非常简单,比如python1.py想调用python2.py里边的函数,那么在python1里边加入一句话:
import python2
这样就把python2.py添加进来了,而调用里边的函数的时候,跟其他公共库一样,比如os.path.isdir(),我们调用python2.py里边的函数也这样:
python2.func_xxx()
另外使用__init__.py是附加一些需要导入的模块的设置,其实导入的时候首先将这个里边的导入,个人感觉这个就好像是C语言里边那些头文件,当你不需要多文件或者这么“麻烦”的时候,大可不用使用它,但是标准来说,使用还是比较好的。
018:python函数使用指针传递参数:
我们习惯了C/C++/C#/JAVA 等等一系列的高级语言的函数指针,在这里当然也希望使用了,但是python中不能使用“*”号,那么我们就使用数组,最终也能达到预期的效果:
def func(args):
args[0] = 'new string'
testStr = []
testStr.append([])
testStr[0] = 'old string'
func(testStr)
print (testStr[0])
输出的结果显然是:
new string
019:日志函数
s = "我是日志信息"
win32api.OutputDebugString(s)
执行后,使用Dbgview可以看到日志信息
020:使用DLL的导出函数,比如使用kernel32.dll里边的函数
from ctypes import *
kernel32 = windll.LoadLibrary("kernel32.dll")
MEM_COMMIT = 0X1000
MEM_DECOMMIT = 0X1000
PAGE_EXECUTE_READWRITE = 0X40
def new(size):
return kernel32.VirtualAlloc(0,size,MEM_COMMIT,PAGE_EXECUTE_READWRITE)
def delete(p,size):
kernel32.VirtualFree(p,size,MEM_DECOMMIT)
s = new(10)
for i in range(10):
memset(s+i,i,1)
number = (c_byte*10)()
memmove(number,s,10)
for i in range(10):
print number[i]
delete(s,10)
Python 2.7 (r27:82525, Jul 4 2010, 09:01:59) [MSC v.1500 32 bit (Intel)] on win32
Type "copyright", "credits" or "license()" for more information.
>>> ================================ RESTART ================================
>>>
0
1
2
3
4
5
6
7
8
9
021:通过dll名字获取对应的句柄:
hModule = win32api.GetModuleHandle(dllPathName)
022:通过dll的句柄获取dll所在的全路径:
win32api.GetModuleFileName(hModule )
023:字符型转换为整形
s = ord('a')