0928クラスの概要

時間モジュール

タイムスタンプ

タイムスタンプ(タイムスタンプ):タイムスタンプは1970年1月秒午後十二時00分00秒第一の初めから今の時間を計算することを示しています

import time

time_stamp = time.time()
print(time_stamp, type(time_stamp))

# 1569638627.6091728 <class 'float'>

時間のフォーマット

(フォーマットストリング)フォーマットされた時刻文字列は:一般的な時間フォーマット文字列フォーマット時間を表します。

# 格式的-是拼接符号
format_time = time.strftime("%Y-%m-%d %X")
print(format_time, type(format_time))

# 2019-09-28 11:21:17 <class 'str'>

構造化された時間

構造化された時間(構造体の時間):9つの要素のなstruct_timeタプルの合計は(年、月、日、時、分、秒、年の最初の数週間、今年の日、それぞれ、9つの要素でした夏時間)

print('本地时区的struct_time:\n{}'.format(time.localtime()))
print('UTC时区的struct_time:\n{}'.format(time.gmtime()))


'''
本地时区的struct_time:
time.struct_time(tm_year=2019, tm_mon=9, tm_mday=28, tm_hour=11, tm_min=22, tm_sec=2, tm_wday=5, tm_yday=271, tm_isdst=0)

UTC时区的struct_time:
time.struct_time(tm_year=2019, tm_mon=9, tm_mday=28, tm_hour=3, tm_min=22, tm_sec=2, tm_wday=5, tm_yday=271, tm_isdst=0)'''
# 结构化时间的基准时间
print(time.localtime(0))
# 结构化时间的基准时间上增加一年时间
print(time.localtime(3600*24*365))

3つのフォーマット変換時間

now_time定義された構造化された時、

now_time = time.localtime()
print(now_time)

時間との間のフォーマット変換

# 把结构化时间转换为时间戳格式
print(time.mktime(now_time))   


# 1569641093.0
# 把结构化时间转换为格式化时间
# %Y年-%m月-%d天 %X时分秒=%H时:%M分:%S秒
print(time.strftime("%Y-%m-%d %X", now_time))


# 2019-09-28 11:26:18
# 把格式化时间化为结构化时间,它和strftime()是逆操作
print(time.strptime('2013-05-20 13:14:52', '%Y-%m-%d %X'))


# time.struct_time(tm_year=2013, tm_mon=5, tm_mday=20, tm_hour=13, tm_min=14, tm_sec=52, tm_wday=0, tm_yday=140, tm_isdst=-1)
# 把结构化时间表示为这种形式:'Sun Jun 20 23:21:05 1993'。
print(time.asctime())


# Sat Sep 28 11:26:47 2019

その他の利用状況を把握

# 推迟指定的时间运行,单位为秒
start = time.time()
time.sleep(3)
end = time.time()

print(end-start)

datetimeモジュール

足し算と引き算のための時間

import datetime

# 返回当前时间
print(datetime.datetime.now())

# 当前时间+3天
print(datetime.datetime.now() + datetime.timedelta(3))

# 当前时间-3天
print(datetime.datetime.now() + datetime.timedelta(-3))

# 当前时间-3小时
print(datetime.datetime.now() + datetime.timedelta(hours=3))

# 当前时间+30分钟
print(datetime.datetime.now() + datetime.timedelta(minutes=30))

# 时间替换
c_time = datetime.datetime.now()
print(c_time.replace(minute=20, hour=5, second=13))

hashlibモジュール

暗号化のためのhashlib

hashlibモジュールの機能:

  1. ハッシュアルゴリズムに関係なく、どのくらいの量のチェックのため、そのまま使用している限り、結果は常に文字列の長さが同じです
  2. 重ね合わせ

hashlib基本的な使い方

import hashlib

m = hashlib.md5()
m.update('hello'.encode('utf8'))
print(m.hexdigest())

# 5d41402abc4b2a76b9719d911017c592



m2 = hashlib.md5()
m2.update('hellohash'.encode('utf8'))
print(m2.hexdigest())

# 97fa850988687b8ceb12d773347f7712

hashlib亀裂ヒットライブラリー

import hashlib

# 假定我们知道hash的微信会设置如下几个密码
pwd_list = [
    'hash3714',
    'hash1313',
    'hash94139413',
    'hash123456',
    '123456hash',
    'h123ash',
]


def make_pwd_dic(pwd_list):
    dic = {}
    for pwd in pwd_list:
        m = hashlib.md5()
        m.update(pwd.encode('utf-8'))
        dic[pwd] = m.hexdigest()
    return dic


def break_code(hash_pwd, pwd_dic):
    for k, v in pwd_dic.items():
        if v == hash_pwd:
            print('hash的微信的密码是===>%s' % k)


hash_pwd = '0562b36c3c5a3925dbe3c4d32a4f2ba2'
break_code(hash_pwd, make_pwd_dic(pwd_list))

hash的微信的密码是===>hash123456

HMACモジュール

HMACのhashlibと似ていますが、塩(秘密鍵)、同じ特性とhashlibがあるでしょう

import hmac

# 注意hmac模块只接受二进制数据的加密
h1 = hmac.new(b'hash')
h1.update(b'hello')
h1.update(b'world')
print(h1.hexdigest())

# 905f549c5722b5850d602862c34a763e

h2 = hmac.new(b'hash')
h2.update(b'helloworld')
print(h2.hexdigest())

# 905f549c5722b5850d602862c34a763e

タイピングモジュール

入力モジュールの役割:

  1. 型チェックは、実行時に一致しないパラメータと戻り値のタイプが登場しました。
  2. 開発文書が注釈を付けて着信パラメータや戻り値の型、ユーザーフレンドリーなコール。
  3. プログラムの動作に影響を与えないモジュールを追加した後、それが正式にのみ通知をエラーを報告しません。
  • 注意:タイピングモジュールはpython3.5バージョンよりも多くでのみ使用することができ、pycharmは、現在入力して検査をサポートしています

タイピングモジュールを使用します

from typing import List, Tuple, Dict

# 指定函数参数的数据类型
def add(a: int, string: str, f: float,
        b: bool) -> Tuple[List, Tuple, Dict, bool]:
    list1 = list(range(a))
    tup = (string, string, string)
    d = {"a": f}
    bl = b
    return list1, tup, d, bl


print(add(5, "hhhh", 2.3, False))

# ([0, 1, 2, 3, 4], ('hhhh', 'hhhh', 'hhhh'), {'a': 2.3}, False)
  • パラメータを通過する際に:タイプ「パラメータのタイプ」パラメータ宣言形;
  • タイプ結果の宣言の形で「>結果タイプ」 - 結果がで返されます。
  • typeパラメータが正しくない場合pycharmは、通話時に思い出しされますが、プログラムの動作には影響しません。
  • 、 - 「>リスト[STR]」所定のリストを返し、要素が文字列である。そのようなリストのようなリストのために、規定はまたなど、より具体的な数にすることができます。

モジュールを入力して一般的なタイプ

  • int型、長い、フロート:整数、長整数、浮動小数点
  • BOOL、STR:ブール値、文字列型
  • リスト、タプル、辞書ですが、設定します:リスト、タプル、辞書、コレクション
  • 反復可能な、イテレータ:反復が入力でき、イテレータ型
  • 発電:発電機の種類

要求モジュール

爬虫類で使用される要求モジュールは、ブラウザにアナログを演技することは要求URLを送信し、データを取得します

import requests

response = requests.get('https://ishuo.cn')
data = response.text
print(data)

# 常与re模块连用

モジュールの再

モジュール再正規表現自体は、Pythonの一部ではない小さな、高度に専門的なプログラミング言語であります

アクションは、モジュールを再される:文字列が大きい特性列から選択一定の形状を有します

共通のメタ文字

^:で開始。..

s = 'abcdabc' 
res = re.findall('^ab', s)
print(res)  

# ['ab']

$:で終わります。..

s = 'abcdabc'
res = re.findall('bc$', s)
print(res)  

# ['bc']

:任意の文字

s = 'abc红abc'
res = re.findall('abc.', s)
print(res)  

# ['abc红']

\ D:デジタル

s = 'skld2342ljk'
res = re.findall('\d', s)
print(res)  

# ['2', '3', '4', '2']

\ D:非デジタル

s = 'skld2342ljk'
res = re.findall('\D', s)
print(res)

# ['s', 'k', 'l', 'd', 'l', 'j', 'k']

\ W:null以外の文字、つまり英数字、アンダースコア

s = 'skld_2你3 42ljk'
res = re.findall('\w', s)
print(res)

# ['s', 'k', 'l', 'd', '_', '2', '你', '3', '4', '2', 'l', 'j', 'k']

\ W:スペースを含むヌル文字、改行

s = 'skld_23 42ljk'
res = re.findall('\W', s)
print(res)

# [' ']

\ S:スペース、改行を含む空の文字、

s = 'skld_23 42ljk'
res = re.findall('\s', s)
print(res)

# [' ']

\ S:null以外の文字、つまり英数字、アンダースコア

s = 'skld_23 42ljk'
res = re.findall('\S', s)
print(res)

# ['s', 'k', 'l', 'd', '_', '2', '3', '4', '2', 'l', 'j', 'k']

+:[1の前面で少なくとも一つの文字、無限大)

s = 'abcddabdabcdd abcd abc'
print(re.findall('abcd+', s))

# ['abcdd', 'abcdd', 'abcd']

:文字の前の文字の前に0-1 [0,1]のみ最大

s = 'abcddddd abcd abc ab'
print(re.findall('abcd?', s))

# ['abcd', 'abcd', 'abc']

***:少なくとも0直前の文字[0、+無限大)の前にある文字**

s = 'abcddddd abcd abc ab'
print(re.findall('abcd*', s))

# ['abcddddd', 'abcd', 'abc']

[]:角括弧であってもよいが、一つだけ配置することができます

s = 'abc bbc cbc dbc abcd '
print(re.findall('[abc]bc', s))

# ['abc', 'bbc', 'cbc', 'abc']

[^]:括弧内はできません

s = 'abc bbc cbc dbc'
print(re.findall('[^abc]bc', s))

# ['dbc']

|:、3の1または2を満たす、または印刷するには

s = 'abc bbd dbc'
print(re.findall('abc|bbc', s))

# ['abc']

{2}:前の文字は、二つ繰り返しました

s = 'abccabc abccc'
print(re.findall('abc{2}', s))

# ['abcc', 'abcc']

{1,2}直前の文字が繰り返される1-2区間[1,2]

s = 'abccabc abccc'
print(re.findall('abc{1,2}', s))

# ['abcc', 'abc', 'abcc']

特別建設

A(= \ D?):数字が、数字の背後にある文字列の内容を消費しません。

s = 'a123 aaaa a234 abc'
#    a1   aa
#          aa
#           aa 
#               a2  ab

print(re.findall('a(?=\d)', s))
# ['a', 'a']

print(re.findall('a(?=\w)', s))
# ['a', 'a', 'a', 'a', 'a', 'a']

貪欲

デフォルトの数量詞でPythonは貪欲で、常に、できるだけ多くの文字に一致するようにしようと停止し、最後を見つけてください

**。(任意の文字)*(0〜無限数)**

s = 'abcdefgbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbg'
print(re.findall('a.*g', s))

# ['abcdefgbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbg']

非貪欲モード

非貪欲、対照的に、いつものようにいくつかの文字を一致させようと、ストップを見つけるために戻ります

**。(任意の文字)*(0〜無限数)?**(非貪欲モードに彼をしてみましょう)

s = 'abcdefgbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbg'
print(re.findall('a.*?g', s))

# ['abcdefg']

一般的に使用される機能の再

findAll:最も一般的に関数内で直接マッチングルールを記述することをお勧めします

import re
a = re.findall("匹配规则", "这个字符串是否有匹配规则的字符")
print(a)

コンパイル:特定のルールテンプレートを書きます

# 定义邮箱、手机号匹配规则,直接调用
email_pattern = re.compile('\w+@\w+.com')
phone_patter = re.compile('\d{13}')
print(re.findall(email_pattern, s))

試合:文字列の先頭から見て、見つけることができません見つけるには、エラーが見つかりません

s = 'ab abcddd abc'
res = re.match('abcd*', s)
print(res.group())

検索:マッチ全体からの検索、コンテンツ、一つだけが見つからないエラーを発見します

s = 'ab abcddd abc'
res = re.search('abcd*', s)
print(res.group())

文字列分割に相当分割カット、

s = 'ab23423abcddd234234abcasdfjlasjdk234l23lk4j2kl34kl25k3j2kl3j5lkj'
print(re.split('\d+', s))

# ['ab', 'abcddd', 'abcasdfjlasjdk', 'l', 'lk', 'j', 'kl', 'kl', 'k', 'j', 'kl', 'j', 'lkj']

サブ代わりに、文字列を置き換えるために、対応します

s = 'ab23423abcddd234234abcasdfjlasjdk234l23lk4j2kl34kl25k3j2kl3j5lkj'
print(re.sub('\d+', ' ', s))

# ab abcddd abcasdfjlasjdk l lk j kl kl k j kl j lkj

SUBN交換、返品数の交換

s = 'ab23423abcddd234234abcasdfjlasjdk234l23lk4j2kl34kl25k3j2kl3j5lkj'
print(re.subn('\d+', ' ', s))

# ('ab abcddd abcasdfjlasjdk l lk j kl kl k j kl j lkj', 12)

モジュールサプリメント再

re.Sは作る。改行

a = '''asdfhellopass:
    worldaf
    '''
b = re.findall('hello(.*?)world', a)
c = re.findall('hello(.*?)world', a, re.S)
print(b)
# []

print(c)
# ['pass:\n    ']

いいえマッチ改行ありません

s = '''abc
abcabc*abc
'''
print(re.findall('abc.abc', s))  
# ['abc*abc']

print(re.findall('abc.abc', s, re.S))  
# ['abc\nabc', 'abc*abc']

パケット - >限り括弧として(...)

s = 'abc abcd abcdd'
print(re.findall('a(.)c(d)', s))

# [('b', 'd'), ('b', 'd')]

有名なグループ化

s = 'abc abcd abcdd'
print(re.search('a(?P<name>.)c(?P<name2>d)', s).groupdict())

# {'name': 'b', 'name2': 'd'}

reモジュールについての知識は知っている必要があります

  1. 。*?

非欲張りマッチ

  1. 貪欲および非貪欲:

    貪欲なマッチ:貪欲マッチング、デフォルトでは、できるだけ長く、一致する文字列を満たし

    非欲張りマッチ(?):あなたは試合を満たした場合、結果を返す、停止を見つけます

  2. findAll:

    findall(pattern, string, flags=0) リストに文字列を一致させるために、一緒にすべてのルールをすべての文字列一致する文字列を参照し、空のリストの成功を一致しませんでした

  3. re.S:

    彼は表しています。「\ n」「このアクションを含む文字列全体を、拡張します」。次のコードを見てください:

  4. 試合とsarch違い:

    マッチ()関数文字列のみで開始位置を一致させる、あなたがエラーを見つけることができません
    (検索)が一致するものを見つけるために、文字列全体をスキャンします、それは文字列全体をスキャンし、最初に一致した結果を返します

  5. グループ:

    (AB | CD)、組み合わせて使用​​|()人口ができることを示した文字または文字AB、CDと一致しています

  6. よく知られているグループ:

    ?P<name> #?P <>キー(キー)グループの定義が一致し、内部書かれた<>キー名、(のみ正規関数のための有用なオブジェクトを返す)値をコンテンツに適合されています

おすすめ

転載: www.cnblogs.com/faye12/p/11604564.html