本文实例讲述了python清除指定目录内所有文件中script的方法。分享给大家供大家参考。具体如下:将脚本存储为stripscripts.py 调用语法 : python stripscripts.py <directory>使用范例 : python stripscripts.py d:\myfiles# Hello, this is a script written in Python. See http://www.pyhon.orgimport os,sys,string,remessage = """ stripscripts 1.1p - Script stripper This script will walk a directory (and its subdirectories) and disable all scripts (javascript, vbscript...) from .html and .htm files. (The scripts will not be deleted, but simply deactivated, so that you can review them if you like.) Can be usefull for sites you have downloaded with HTTrack or similar tools. No more nosey or buggy scripts in your local html files. Syntax : python %s <directory> Example : python %s d:\myfiles This script is public domain. You can freely reuse it. The author is Sebastien SAUVAGE <sebsauvage at sebsauvage dot net> http://sebsauvage.net More quick & dirty scripts are available at http://sebsauvage.net/python/""" % ((sys.argv[0], )*2)def stripscripts ( directoryStart ) : os.path.walk( directoryStart, callback, '' )def callback ( args, directory, files ) : print 'Scanning',directory for fileName in files: if os.path.isfile( os.path.join(directory,fileName) ) : if string.lower(os.path.splitext(fileName)[1]) in ['.html','.htm'] : stripScriptFromHtml ( os.path.join(directory,fileName) )def stripScriptFromHtml ( filepath ) : print ' Processing',os.path.split(filepath)[1] file = open(filepath, 'rb') html = file.read() file.close() regexp = re.compile(r'<script.*?>', re.IGNORECASE) html = regexp.sub('<script language="MonthyPythonsScript">',html) file = open(filepath, 'w+') file.write(html) file.close()if len(sys.argv) > 1 : stripscripts( sys.argv[1] )else: print message希望本文所述对大家的Python程序设计有所帮助。

最简单的条件语句:if expression: expr_true_suite如上,if是关键字,expression是条件表达式,条件表达式支持多重条件判断,可以用布尔操作符and、or和not连接,expr_true_suite是代码块,expression为true时执行,代码块如果只有一行,上面的整个条件语句便可全部写到一行,但可读性差。带elif和else的条件语句:if expression1: expr1_true_suiteelif expression2: expr2_true_suiteelif expressionN: exprN_true_suiteelse: none_of_the_above_suite如上,语法同其它语言的条件语句类似,elif和else是可选的。条件表达式实现三元操作符:在C/C++中,三元操作符如下(E成立时执行X,否则执行Y)——E ? X : Ypython模拟的三元操作符——(E and [X] or [Y])[0]python三元操作符的实现——X if E else Y来看几个判断实例:>>> if 1 < x < 2: print('True') True and 表示且or 表示 或>>> x 2 >>> if x == 2 or x == 3: print(x) 2 如果 b 为真则返回a,

return (1==1) ? "is easy" : "my god" //C#中的用法 其实,在Python中,是这样写的: print (1==2) and 'Fool' or 'Not bad' 输出结果:

re.match   re.match 尝试从字符串的开始匹配一个模式,如:下面的例子匹配第一个单词。 复制代码 代码如下: import re text = "JGood is a handsome boy, he is cool, clever, and so on..." m = re.match(r"(\w+)\s", text) if m: print m.group(0), '\n', m.group(1) else: print 'not match' re.match的函数原型为:re.match(pattern, string, flags) 第一个参数是正则表达式,这里为"(\w+)\s",如果匹配成功,则返回一个Match,否则返回一个None; 第二个参数表示要匹配的字符串; 第三个参数是标致位,用于控制正则表达式的匹配方式,如:是否区分大小写,多行匹配等等。 re.search   re.search函数会在字符串内查找模式匹配,只到找到第一个匹配然后返回,如果字符串没有匹配,则返回None。 复制代码 代码如下: import re text = "JGood is a handsome boy, he is cool, clever, and so on..." m = re.search(r'\shan(ds)ome\s', text) if m: print m.group(0), m.group(1) else: print 'not search' re.search的函数原型为: re.search(pattern, string, flags) 每个参数的含意与re.match一样。 re.match与re.search的区别:re.match只匹配字符串的开始,如果字符串开始不符合正则表达式,则匹配失败,函数返回None;而re.search匹配整个字符串,直到找到一个匹配。 re.sub   re.sub用于替换字符串中的匹配项。下面一个例子将字符串中的空格 ' ' 替换成 '-' : 复制代码 代码如下: import re text = "JGood is a handsome boy, he is cool, clever, and so on..." print re.sub(r'\s+', '-', text) re.sub的函数原型为:re.sub(pattern, repl, string, count) 其中第二个函数是替换后的字符串;本例中为'-' 第四个参数指替换个数。默认为0,表示每个匹配项都替换。 re.sub还允许使用函数对匹配项的替换进行复杂的处理。如:re.sub(r'\s', lambda m: '[' + m.group(0) + ']', text, 0);将字符串中的空格' '替换为'[ ]'。 re.split   可以使用re.split来分割字符串,如:re.split(r'\s+', text);将字符串按空格分割成一个单词列表。 re.findall   re.findall可以获取字符串中所有匹配的字符串。如:re.findall(r'\w*oo\w*', text);获取字符串中,包含'oo'的所有单词。 re.compile   可以把正则表达式编译成一个正则表达式对象。可以把那些经常使用的正则表达式编译成正则表达式对象,这样可以提高一定的效率。下面是一个正则表达式对象的一个例子: 复制代码 代码如下: import re text = "JGood is a handsome boy, he is cool, clever, and so on..." regex = re.compile(r'\w*oo\w*') print regex.findall(text) #查找所有包含'oo'的单词 print regex.sub(lambda m: '[' + m.group(0) + ']', text) #将字符串中含有'oo'的单词用[]括起来。 更详细的内容,可以参考Python手册。

名字空间Python 的名字空间是 Python 一个非常核心的内容。其他语言中如 C 中,变量名是内存地址的别名,而在 Python 中,名字是一个字符串对象,它与他指向的对象构成一个{name:object}关联。Python 由很多名字空间,而 LEGB 则是名字空间的一种查找规则。作用域Python 中name-object的关联存储在不同的作用域中,各个不同的作用域是相互独立的。而我们就在不同的作用域中搜索name-object。举个栗子,来说明作用域是相互独立的。In [11]: i = "G"In [12]: def test(): i = "L" print i, "in locals" ....:In [13]: test() L in localsIn [14]: print i, "in globals" G in globals 在上面的栗子中,我们定义了两次 i,在 test 函数中是 i-L,在外面是 i-G。为什么在 test 函数中,我们 i 指向的是对象 L,而在外面,i 指向的则是 G?这就是 LEGB 的作用。简述简而言之,LEGB 代表名字查找顺序: locals -> enclosing function -> globals -> __builtins__     locals 是函数内的名字空间,包括局部变量和形参     enclosing 外部嵌套函数的名字空间(闭包中常见)     globals 全局变量,函数定义所在模块的名字空间     builtins 内置模块的名字空间所以,在 Python 中检索一个变量的时候,优先回到 locals 里面来检索,检索不到的情况下会检索 enclosing ,enclosing 没有则到 globals 全局变量里面检索,最后是到 builtins 里面来检索。当然,因为 builtins 的特殊性,我们可以直接在 builtins 里面添加变量,这样就可以在任意模块中访问变量,不过这种方法太过于变态,不推荐这么做。locals,globals函数的形参跟内部变量都存储在 locals 中。In [1]: def f(x): ...: a = x ...: print a ...: print locals() ...:In [2]: f("hello")hello{'a': 'hello', 'x': 'hello'}不过在函数内部调用global 声明的时候,可以将变量存储在 globals 中In [6]: def f(x): ...: global a ...: a = x ...: print a ...: print locals() ...:In [7]: f("hello")hello{'x': 'hello'}In [8]: print ahelloIn [9]: print x---------------------------------------------------------------------------NameError Traceback (most recent call last)<ipython-input-9-2d264e11d975> in <module>()----> 1 print xNameError: name 'x' is not defined如上面栗子中那样,在函数中声明 a 为全局变量,则函数 f 的 locals只有参数 x,而没有变量,而在外部可以使用变量 a,而使用 x 的时候则是NameErrorEnclosedEnclosing 是外部嵌套函数的名字空间。我们经常在闭包中用到。在 Python3中提供了一个 nonlocal关键字来修改外部嵌套函数的名字空间,但是要使用 Python3才有,我等使用 Python2的只能眼馋一下。In [11]: def outer(): ....: a_var = 'enclosed value' ....: print a_var ....: def inner(): ....: a_var = 'local value' ....: print(a_var) ....: inner() ....: print a_var ....:In [12]: outer()enclosed valuelocal valueenclosed value下面的栗子简单示范一下 nonlocal 的用法,实在 Python3下面才可以正常运行的:In [1]: a_var = 'global value'In [2]: def outer(): ...: a_var = "local value" ...: print("outer befor", a_var) ...: def inner(): ...: nonlocal a_var ...: a_var = "inner value" ...: print("in inner():", a_var) ...: inner() ...: print("outer inner:", a_var) ...:In [3]: outer()outer befor local valuein inner(): inner valueouter inner: inner valueIn [4]: print(a_var)global valuebuiltinsbuiltins 则是内置模块,轻易不要修改In [19]: b---------------------------------------------------------------------------NameError Traceback (most recent call last)<ipython-input-19-3b5d5c371295> in <module>()----> 1 bNameError: name 'b' is not definedIn [20]: __builtins__.b = "builtins"In [21]: bOut[21]: 'builtins'上面栗子中在第一次调用b的时候报错NameError,之后我们修改 builtins 的名字空间,将名字b与值"builtins"进行关联,就可以正常调用了。这种非常规用法不建议使用。

分类:腾博会手机版下载

时间:2016-04-13 12:05:10