2つの文章はPythonの文法と内蔵関数の機能を掌握します(第2編)
13004 ワード
Overview
この文章は前の文章に続いて書いたもので、主にPythonの辞書構造、操作ファイル、正規表現を紹介しています.前の記事のリンクは次のとおりです.
http://blog.csdn.net/xlinsist/article/details/50866079
辞書
まず次の例を見てみましょう.
文字列もメタグループも可変であるため、keyとして、数値もkeyとして、どのタイプでも値として使用できます.
次に、辞書を巡る方法をいくつか紹介します.
辞書の書式設定:
delオペレータ:
ファイル
Open()関数は、ファイルを開き、ファイルポインタを返します.
テキストファイルがどのような改行文字を使用するか分からない場合は、openの2番目のパラメータを「rU」に設定し、汎用改行変換を指定します.これにより、Windows、UNIX(Mac OS Xを含む)、その他の古いMacintoshプラットフォームでファイルを自由に交換することができ、問題を心配する必要はありません.コードがどのプラットフォームで実行されても、さまざまな改行文字が「」にマッピングされます.
正規表現
基本的なパターン . (点)–改行文字''を除く任意の文字を一致させる w–数字とアルファベットを合わせます.W取反 s–空白文字(スペース、改行、タブ...)を照合します.S取反 \t,\r – tab, newline, return d–一致数字 +–1回以上出現 *–0回以上出現 ? – 0回または1回出現 次の例を示します.
パターン列の前のアルファベットrはpython文字列を元の列として指定します.まず次の例を見てみましょう.
上図から分かるように、rを加えた文字列は2つの文字である:''と'n';rを付けていない文字列python解釈器は改行文字であると考えられるので、長さは1です.次の例を見てみましょう.
上記のコードの出力結果は「did not find」であり、strは「」と「n」を含む2文字であり、正規システムは「」と「n」を隣接して改行文字と認識しているため一致しない.しかし、上のstr=r’’をstr=’’に変更すると、出力結果はfoundになります(これは必ずしもこの文字列が見えるわけではありません.コンソールに空白の行が表示されます).
正則とpythonは文字列の扱い方が異なる2つの異なるプログラミング言語であると考えることができます.より具体的な説明の参考:http://stackoverflow.com/questions/12871066/what-exactly-is-a-raw-string-regex-and-how-can-you-use-it
かっこ
[abc]は「a」or「b」or「c」に一致する.
[^ab]は、「a」or「b」を除く任意の文字に一致します.
かっこでグループ抽出
findall()関数は、文字列内のすべての一致するアイテムを見つけ、文字列リストとして返します.
以上、Google’s Python Classより整理しました
https://developers.google.com/edu/python/dict-files
この文章は前の文章に続いて書いたもので、主にPythonの辞書構造、操作ファイル、正規表現を紹介しています.前の記事のリンクは次のとおりです.
http://blog.csdn.net/xlinsist/article/details/50866079
辞書
まず次の例を見てみましょう.
##
dict = {}
##
dict['a'] = 'alpha'
dict['g'] = 'gamma'
dict['o'] = 'omega'
## {'a': 'alpha', 'o': 'omega', 'g': 'gamma'}
print dict
## Simple lookup, returns 'alpha'
print dict['a']
## Put new key/value into dict
dict['a'] = 6
'a' in dict ## True
## print dict['z'] ## Throws KeyError
if 'z' in dict: print dict['z'] ## Avoid KeyError
print dict.get('z') ## None (instead of KeyError)
## Key , xlinsist
print dict.get('z', 'xlinsist')
文字列もメタグループも可変であるため、keyとして、数値もkeyとして、どのタイプでも値として使用できます.
次に、辞書を巡る方法をいくつか紹介します.
## key
for key in dict: print key
## , key
for key in dict.keys(): print key
## key
dict.keys()
## value
dict.values()
## .items() is the dict expressed as (key, value) tuples
print dict.items() ## [('a', 'alpha'), ('o', 'omega'), ('g', 'gamma')]
for k, v in dict.items(): print k, '-->', v
## a --> xlnb
## o --> omega
## g --> gamma
辞書の書式設定:
hash = {}
hash['count'] = 42
hash['word'] = 'garfield'
# %d int, %s string
s = 'I want %(count)d copies of %(word)s' % hash
# 'I want 42 copies of garfield'
delオペレータ:
#
var a = 5
del a
#
list = ['a', 'b', 'c', 'd']
del list[0] ## Delete first element
del list[-2:] ## Delete last two elements
print list ## ['b']
#
dict = {'a':1, 'b':2, 'c':3}
del dict['b'] ## Delete 'b' entry
print dict ## {'a':1, 'c':3}
ファイル
Open()関数は、ファイルを開き、ファイルポインタを返します.
# 'r' 、'w' 、'a'
f = open('foo.txt', 'rU')
for line in f:
print line
#
f.readlines()
#
f.read()
#
f.write(string)
f.close()
テキストファイルがどのような改行文字を使用するか分からない場合は、openの2番目のパラメータを「rU」に設定し、汎用改行変換を指定します.これにより、Windows、UNIX(Mac OS Xを含む)、その他の古いMacintoshプラットフォームでファイルを自由に交換することができ、問題を心配する必要はありません.コードがどのプラットフォームで実行されても、さまざまな改行文字が「」にマッピングされます.
正規表現
基本的なパターン
## i+ = one or more i's, as many as possible.
match = re.search(r'pi+', 'piiig') => found, match.group() == "piii"
## Finds the first/leftmost solution, and within it drives the +
## as far as possible (aka 'leftmost and largest').
## In this example, note that it does not get to the second set of i's.
match = re.search(r'i+', 'piigiiii') => found, match.group() == "ii"
## \s* = zero or more whitespace chars
## Here look for 3 digits, possibly separated by whitespace.
match = re.search(r'\d\s*\d\s*\d', 'xx1 2 3xx') => found, match.group() == "1 2 3"
match = re.search(r'\d\s*\d\s*\d', 'xx12 3xx') => found, match.group() == "12 3"
match = re.search(r'\d\s*\d\s*\d', 'xx123xx') => found, match.group() == "123"
## ^ = matches the start of string, so this fails:
match = re.search(r'^b\w+', 'foobar') => not found, match == None
## but without the ^ it succeeds:
match = re.search(r'b\w+', 'foobar') => found, match.group() == "bar"
パターン列の前のアルファベットrはpython文字列を元の列として指定します.まず次の例を見てみましょう.
上図から分かるように、rを加えた文字列は2つの文字である:''と'n';rを付けていない文字列python解釈器は改行文字であると考えられるので、長さは1です.次の例を見てみましょう.
str = r'
'
match = re.search(r'
', str)
if match:
print 'found', match.group() ## 'found word:cat'
else:
print 'did not find'
上記のコードの出力結果は「did not find」であり、strは「」と「n」を含む2文字であり、正規システムは「」と「n」を隣接して改行文字と認識しているため一致しない.しかし、上のstr=r’’をstr=’’に変更すると、出力結果はfoundになります(これは必ずしもこの文字列が見えるわけではありません.コンソールに空白の行が表示されます).
正則とpythonは文字列の扱い方が異なる2つの異なるプログラミング言語であると考えることができます.より具体的な説明の参考:http://stackoverflow.com/questions/12871066/what-exactly-is-a-raw-string-regex-and-how-can-you-use-it
かっこ
[abc]は「a」or「b」or「c」に一致する.
## ,
match = re.search(r'[\w.-]+@[\w.-]+', 'purple [email protected] monkey dishwasher')
if match:
print match.group() ## '[email protected]'
[^ab]は、「a」or「b」を除く任意の文字に一致します.
かっこでグループ抽出
str = 'purple [email protected] monkey dishwasher'
match = re.search('([\w.-]+)@([\w.-]+)', str)
if match:
print match.group() ## '[email protected]' (the whole match)
print match.group(1) ## 'alice-b' (the username, group 1)
print match.group(2) ## 'google.com' (the host, group 2)
findall()関数は、文字列内のすべての一致するアイテムを見つけ、文字列リストとして返します.
## Suppose we have a text with many email addresses
str = 'purple [email protected], blah monkey [email protected] blah dishwasher'
## Here re.findall() returns a list of all the found email strings
emails = re.findall(r'[\w\.-]+@[\w\.-]+', str) ## ['[email protected]', '[email protected]']
for email in emails:
# do something with each found email string
print email
str = 'purple [email protected], blah monkey [email protected] blah dishwasher'
tuples = re.findall(r'([\w\.-]+)@([\w\.-]+)', str)
print tuples ## [('alice', 'google.com'), ('bob', 'abc.com')]
for tuple in tuples:
print tuple[0] ## username
print tuple[1] ## host
以上、Google’s Python Classより整理しました
https://developers.google.com/edu/python/dict-files