Python脚本总结--01

每一天成长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

011:路径分割函数2

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
脚本运行结果:


一些参考: http://www.doc88.com/p-796929153232.html

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')




评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值