情景一:
在文件夹里有六十多个RM格式的视频文件,我现在需要把它们的文件名都提取出来,并去掉文件的扩展名,以便放到需要的网页里。
应该有什么软件可以完成这个简单的要求,可是一时间到哪里去找这 样一个符合要求的软件呢?总不能手工完成把。在Linux上用强大的shell脚本应该也可以完成,可是使用Windows的朋友呢?其实象这样一个简单 任务用Python这个强大脚本语言只要几条语句就可以搞定了。个大家知道,要完成这样一个任务根本不用动用C/C++或Java这样的大家伙。
好来看看Python的身手,用自己喜欢的文本编辑器或者直接使用安装包自带的IDE都可以:
# --- picknames.py ---
import os
filenames=os.listdir(os.getcwd())
for name in filenames:
filenames[filenames.index(name)]=name[:-3]
out=open('names.txt','w')
for name in filenames:
out.write(name+'\n')
out.close()
句字不多,一句句看。
# --- picknames.py --- 是注释行,Python是用#作为注释符的,每行注释的开始都要添加。Python的源代码是一扩展名py结尾的。
import os和其他大多数语言一样,导入os这个函数库,在Python的术语里 ......
#!/usr/bin/env python
#coding=utf-8
def buildConnectionString(params):
return ":".join(["%s=%s" %(k, v) for k, v in params.items()])
if __name__ == "__main__":
myParams = {"server":"mpilgrim", \
"database":"master", \
"uid":"sa", \
"pwd":"secret"\
}
print buildConnectionString(myParams)
print __name__
......
#使用类
class CPerson:
#类变量好比C++中的静态成员变量
population = 0
def SayHi(self):
print('Hello World')
def HowMany(self):
if CPerson.population == 1:
print('I am the only person here.')
else:
print(('We have %d persons here.') % CPerson.population)
#类中有很方法的名字有特殊的意义
#__init__好比C++中的构造函数
def __init__(self, name):
self.name = name
print(('Initializing %s') % self.name)
CPerson.population += 1
#__del__好比C++中的析构函数
def __del__(self):
CPerson.population -= 1
if CPerson.population == 0:
print('I am the last one.')
else:
print(('There are still %d people left.') % CPerson.population)
p = CPerson('123456')
p.SayHi()
p.HowMany()
p0 = CPerson('987654321')
p0.SayHi()
p0.HowMany()
p.SayHi()
p.HowMany()
print('----------------------------------------- ......
我的环境是:Linux version 2.4.21-4.EL
(bhcompile@daffy.perf.redhat.com) (gcc version 3.2.3 20030502 (Red Hat
Linux 3.2.3-20)) #1 Fri Oct 3 18:13:58 EDT 2003 + Python2.6.4
本文结合我安装时候的问题,总结而成
用户目录如/home/liuguanyu/ , 保证用户有root权限
1,看看有没有安装
进入python的命令行,输入 import MySQLdb 如果没有报错,证明此模块已经安装,可以跳过以下步骤。
2,切换到用户目录/home/liuguanyu,去下载最新的MySQLdb安装包:我下载的是MySQL-python-1.2.3c1.tar.gz 。这一步所有命令集如下:
wget -O python-1.2.3c1.tar.gz http://cdnetworks-kr-1.dl.sourceforge.net/project/mysql-python/mysql-python-test/1.2.3c1/MySQL-python-1.2.3c1.tar.gz
tar xzvf python-1.2.3c1.tar.gz
cd MySQL-python-1.2.3c1
python setup.py build
3,出现报错:ImportError: No module named setuptools
4,回到用户目录/home/liuguanyu,安装setuptools,我安装的是setuptools-0.6c8 ,这一步的所有命令集如下:
  ......
参考链接:http://www.woodpecker.org.cn/diveintopython/functional_programming/dynamic_import.html
一 动态导入模块
Python的import不能接受变量,所以应该用 __import__函数来动态导入。
如下的代码无法正常导入模块
modules = ['OpenSSL', 'Crypto', 'MySQLdb', 'sqlite3', 'zope.interface', 'pyasn1', 'twisted', 'django']
for each in modules:
try:
import each
except Exception, e:
print e
这样导入会抛出 No module named each
的异常
将 import each 改为 __import__(each)就可以正常导入了。
二 检查模块是否安装
使用__import__函数也可以用来检查模块是否已安装,略微修改上面的代码即可。
使用imp.find_module()来检查不方面,如find_module('zope.interface')会抛出异常——因为这个函数无法查找子模块。
模块加载后,就可以在sys.module这个字典里找到加载的模块名了。 ......
# coding=gb2312
# 用中文注释前务必加上第一行
# 求模运算符,和C语言一样
print 10%9
# 整数相除仍然是整数
print 5/2
# 2后加上.就变成浮点数了
print 5/2.
# **表示求幂运算
print 7**4
# 函数用时要加上module.function
import math
print math.floor(19.8)
# 函数名也可以成为变量
func = math.floor
print func(1.9)
# 可以用 + 来连接两个字符串
print "abc" + "def"
# 如果句子中有 ’,可以用\'代替
print 'He\'s a student'
# 或者用双引号
print "He's a teacher"
# 字符串可以索引
print "abcdefgf"[3]
# 将数字变成字符串的三种方法
x = 12345
print 'number:' + str(x)
print 'number:' + repr(x)
print 'number:' + `x`
# 输入数字的方法
x = input('Please Enter a number:')
print x
# 输入字符串的方法
xx = raw_input();
#print xx
# 程序结尾可以加上这一行,程序就不会一闪而过了
raw_input('Press Enter to Continue...') ......