ホームページ  >  記事  >  バックエンド開発  >  Python共通モジュールの使用状況分析

Python共通モジュールの使用状況分析

WBOY
WBOYオリジナル
2016-06-16 08:42:111025ブラウズ

この記事では、Python で一般的に使用されるモジュールについて詳しく説明し、参考のために共有します。詳細は以下の通りです。

1. 組み込みモジュール (インポートせずに直接使用可能)

よく使用される組み込み関数:

help(obj) オンライン ヘルプ、obj は任意のタイプです
callable(obj) obj が関数のように呼び出せるかどうかを確認します
repr(obj) は obj の表現文字列を取得します。この文字列 eval を使用してオブジェクト
のコピーを再構築できます。 eval_r(str) は正当な Python 式を表し、この式
を返します。 dir(obj) obj の名前空間に表示される名前
を表示します hasattr(obj,name) obj の名前空間に name
があるかどうかを確認します getattr(obj,name) は、obj の名前空間内の name
を取得します。 setattr(obj,name,value) は、obj
の名前空間内の名前のオブジェクト値を指します。 delattr(obj,name) は、obj の名前空間から name
を削除します vars(obj) は、オブジェクトの名前空間を返します。辞書を使って
を表現します locals() は、辞書
で表されるローカル名前空間を返します。 globals() は、辞書
で表されるグローバル名前空間を返します。 type(obj) obj
の型を確認します isinstance(obj,cls) obj が cls
のインスタンスであるかどうかを確認します。 issubclass(subcls,supcls) subcls が supcls

のサブクラスかどうかを確認します。

型変換関数:

chr(i) は ASCII 値を文字に変換します
ord(i) は文字または Unicode 文字を ASCII 値に変換します
oct(x) は、整数 x を 8 進数の文字列
に変換します。 hex(x) は、整数 x を 16 進数の文字列
に変換します。 str(obj) は、obj
の文字列説明を取得します。 list(seq) シーケンスをリストに変換します
tuple(seq) シーケンスをタプルに変換します
dict(),dict(list) を辞書に変換しました
int(x) は整数に変換されます
long(x) は長整数に変換されます
float(x) 浮動小数点数に変換
complex(x) は複素数に変換されます
max(...) は最大値を見つけます
min(...) は最小値を見つけます

プログラムを実行するための組み込み関数:

complie コードが頻繁に使用される場合は、最初にコンパイルしてから実行する方が高速です。

2. オペレーティング システムに関連する呼び出し

システム関連情報モジュール import sys

sys.argv は、すべてのコマンド ライン パラメーターを含むリストです。
sys.stdout sys.stdin sys.stderr は、それぞれ標準入力、出力、エラー出力のファイル オブジェクトを表します。
sys.stdin.readline() は標準入力から行を読み取ります sys.stdout.write("a") 画面出力 a
sys.exit(exit_code) プログラムを終了します
sys.modules は、システムで利用可能なすべてのモジュールを表す辞書です
sys.platform は実行中のオペレーティング システム環境を取得します
sys.path は、モジュールとパッケージを検索するすべてのパスを指定するリストです。

オペレーティング システム関連の呼び出しと操作インポート os

os.environ は環境変数のマッピング関係を含む辞書です。os.environ["HOME"] は環境変数 HOME
の値を取得できます。 os.chdir(dir) 現在のディレクトリを変更します os.chdir('d:\outlook') Windows ではエスケープ
が使用されることに注意してください os.getcwd() は現在のディレクトリを取得します
os.getegid() は有効なグループ ID を取得します os.getgid() はグループ ID
を取得します os.getuid() はユーザー ID を取得します os.geteuid() は有効なユーザー ID を取得します
os.setegid os.setegid() os.seteuid() os.setuid()
os.getgroops() はユーザーグループ名のリストを取得します
os.getlogin() はユーザーのログイン名を取得します
os.getenv は環境変数を取得します
os.putenv は環境変数を設定します
os.umask は umask
を設定します os.system(cmd) はシステムコールを使用して cmd コマンドを実行します

動作例:

os.mkdir('/tmp/xx') os.system("echo 'hello' > /tmp/xx/a.txt") os.listdir('/tmp/xx')
os.rename('/tmp/xx/a.txt','/tmp/xx/b.txt') os.remove('/tmp/xx/b.txt') os.rmdir('/tmp/xx')

Python で単純なシェルを作成します

#!/usr/bin/python
import os, sys
cmd = sys.stdin.readline()
while cmd:
  os.system(cmd)
  cmd = sys.stdin.readline()

os.path を使用してプラットフォームに依存しないプログラムを作成します

os.path.abspath("1.txt") == os.path.join(os.getcwd(), "1.txt")
os.path.split(os.getcwd()) は、ディレクトリ名のディレクトリ部分とファイル名部分を分離するために使用されます。
os.path.join(os.getcwd(), os.pardir, 'a', 'a.doc') はパス名を完成させます。
os.pardir は、現在のプラットフォームの上位ディレクトリの文字を表します。
os.path.getctime("/root/1.txt") 1.txt の ctime (作成時間) タイムスタンプを返します
os.path.exists(os.getcwd()) はファイルが存在するかどうかを判断します
os.path.expanduser('~/dir') は ~ をユーザーのルート ディレクトリ
に展開します os.path.expandvars('$PATH') は環境変数 PATH
を展開します。 os.path.isfile(os.getcwd()) はファイル名かどうかを判断します。1 は「はい」、0 は「いいえ」です。
os.path.isdir('c:Python26temp') はディレクトリかどうかを判断します。1 ははい、0 はいいえです
os.path.islink('/home/huaying/111.sql') はシンボリック リンクですか? Windows
では使用できません。 os.path.ismout(os.getcwd()) Windows では使用できないファイル システムのインストール ポイントですか? os.path.samefile(os.getcwd(), '/home/huaying') 2 つのファイル名が同じファイルを参照しているかどうかを確認します
os.path.walk('/home/huaying', test_fun, "a.c")

このディレクトリを含む /home/huaying の下のすべてのサブディレクトリを走査し、各ディレクトリに対して関数 test_fun を呼び出します。

例: 特定のディレクトリとそのすべてのサブディレクトリで a.c という名前のファイルまたはディレクトリを検索します:

def test_fun(filename, dirname, names): //filename即是walk中的a.c dirname是访问的目录名称
  if filename in names: //names是一个list,包含dirname目录下的所有内容
 print os.path.join(dirname, filename)
os.path.walk('/home/huaying', test_fun, "a.c")

文件操作

1.打开文件

f = open("filename", "r") r只读 w写 rw读写 rb读二进制 wb写二进制 w+写追加

2.读写文件

f.write("a") f.write(str) 写一字符串 f.writeline() f.readlines() 与下read类同
f.read() 全读出来 f.read(size) 表示从文件中读取size个字符
f.readline() 读一行,到文件结尾,返回空串. f.readlines() 读取全部,返回一个list. list每个元素表示一行,包含"\n"\
f.tell() 返回当前文件读取位置
f.seek(off, where) 定位文件读写位置. off表示偏移量,正数向文件尾移动,负数表示向开头移动。where为0表示从开始算起,1表示从当前位置算,2表示从结尾算.
f.flush() 刷新缓存

3.关闭文件
f.close()

regular expression 正则表达式 import re

简单的regexp

p = re.compile("abc") if p.match("abc") : print "match"
上例中首先生成一个pattern(模式),如果和某个字符串匹配,就返回一个match object
除某些特殊字符metacharacter元字符,大多数字符都和自身匹配。
这些特殊字符是 。^ $ * + ? { [ ] \ | ( )

字符集合(用[]表示)

列出字符,如[abc]表示匹配a或b或c,大多数metacharacter在[]中只表示和本身匹配。例:

a = ".^$*+?{\\|()" 大多数metachar在[]中都和本身匹配,但"^[]\"不同
p = re.compile("["+a+"]")
for i in a:
  if p.match(i):
 print "[%s] is match" %i
  else:
 print "[%s] is not match" %i

在[]中包含[]本身,表示"["或者"]"匹配.用\[和\]表示.
^出现在[]的开头,表示取反.[^abc]表示除了a,b,c之外的所有字符。^没有出现在开头,即于身身匹配。
-可表示范围.[a-zA-Z]匹配任何一个英文字母。[0-9]匹配任何数字。
\在[]中的妙用。
  \d [0-9]
  \D [^0-9]
  \s [ \t\n\r\f\v]
  \S [^ \t\n\r\f\v]
  \w [a-zA-Z0-9_]
  \W [^a-zA-Z0-9_]
  \t 表示和tab匹配, 其他的都和字符串的表示法一致
  \x20 表示和十六进制ascii 0x20匹配
  有了\,可以在[]中表示任何字符。注:单独的一个"."如果没有出现[]中,表示出了换行\n以外的匹配任何字符,类似[^\n].

regexp的重复

{m,n}表示出现m个以上(含m个),n个以下(含n个).  如ab{1,3}c和abc,abbc,abbbc匹配,不会与ac,abbbc匹配。
m是下界,n是上界。m省略表下界是0,n省略,表上界无限大。
*表示{,} +表示{1,} ?表示{0,1}
最大匹配和最小匹配 python都是最大匹配,如果要最小匹配,在*,+,?,{m,n}后面加一个?.
match object的end可以得到匹配的最后一个字符的位置。
  re.compile("a*").match('aaaa').end()     4  最大匹配
  re.compile("a*?").match('aaaa').end()    0  最小匹配

使用原始字符串

字符串表示方法中用\\表示字符\.大量使用影响可读性。
解决方法:在字符串前面加一个r表示raw格式。
a = r"\a" print a 结果是\a
a = r"\"a" print a 结果是\"a

使用re模块

先用re.compile得到一个RegexObject 表示一个regexp
后用pattern的match,search的方法,得到MatchObject
再用match object得到匹配的位置,匹配的字符串等信息

RegxObject常用函数:

  >>> re.compile("a").match("abab") 如果abab的开头和re.compile("a")匹配,得到MatchObject
  e8bc1f1db40512376e941d27760ea92d
  >>> print re.compile("a").match("bbab")
  None 注:从str的开头开始匹配        
  >>> re.compile("a").search("abab") 在abab中搜索第一个和re_obj匹配的部分
  e8bc1f1db40512376e941d27760ea92d
  >>> print re.compile("a").search("bbab")
  b7833e9d4029bf484fbb88b0aa790d3d 和match()不同,不必从开头匹配        
  re_obj.findall(str) 返回str中搜索所有和re_obj匹配的部分.
    返回一个tuple,其中元素是匹配的字符串.

MatchObject的常用函数

  m.start() 返回起始位置,m.end()返回结束位置(不包含该位置的字符).
  m.span() 返回一个tuple表示(m.start(), m.end())
  m.pos(), m.endpos(), m.re(), m.string()
    m.re().search(m.string(), m.pos(), m.endpos()) 会得到m本身
  m.finditer()可以返回一个iterator,用来遍历所有找到的MatchObject.
    for m in re.compile("[ab]").finditer("tatbxaxb"):
    print m.span()

高级regexp

| 表示联合多个regexp. A B两个regexp,A|B表示和A匹配或者跟B匹配.
^ 表示只匹配一行的开始行首,^只有在开头才有此特殊意义。
$ 表示只匹配一行的结尾
\A 表示只匹配第一行字符串的开头 ^匹配每一行的行首
\Z 表示只匹配行一行字符串的结尾 $匹配第一行的行尾
\b 只匹配词的边界 例:\binfo\b 只会匹配"info" 不会匹配information
\B 表示匹配非单词边界

示例如下:

 >>> print re.compile(r"\binfo\b").match("info ") #使用raw格式 \b表示单词边界
 <_sre.SRE_Match object at 0x817aa98>
 >>> print re.compile("\binfo\b").match("info ") #没有使用raw \b表示退格符号
 None
 >>> print re.compile("\binfo\b").match("\binfo\b ")
 <_sre.SRE_Match object at 0x8174948>

分组(Group) 示例:

re.compile("(a(b)c)d").match("abcd").groups()  ('abc', 'b')    
#!/usr/local/bin/python    
import re    
x = """
name: Charles
Address: BUPT

name: Ann
Address: BUPT
"""    
#p = re.compile(r"^name:(.*)\n^Address:(.*)\n", re.M)
p = re.compile(r"^name:(&#63;P<name>.*)\n^Address:(&#63;P<address>.*)\n", re.M)
for m in p.finditer(x):
 print m.span()
 print "here is your friends list"
 print "%s, %s"%m.groups()

Compile Flag

用re.compile得到RegxObject时,可以有一些flag用来调整RegxObject的详细特征.
  DOTALL, S 让.匹配任意字符,包括换行符\n
  IGNORECASE, I 忽略大小写
  LOCALES, L 让\w \W \b \B和当前的locale一致
  MULTILINE, M 多行模式,只影响^和$(参见上例)
  VERBOSE, X verbose模式

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。