- dir(object):可以看出該對象有什麼方法
- type(object):對象的類型
- str.find('a'): 查找第一個a字符串
.upper() 全部大寫
.lower() 全部小寫
.lstrip() .rstrip() .strip():去掉左右空格
.split() 對字符串進行切片
- dic.get(list()/str(),0):在dic中,把屬於list中的所有key的keyvalue找出來,後面的0是默認值,類似[NSDictionary forkeypath:],不過list參數也能用,並且不會出現空字典,並且會自動賦值
- list(dicObj),打印出來是全部keys,約等於dicObj.allkeys()
- dicObj.items 列出所有元素,所有也可以用: for a,b in dicObj.items 把a,b打印出來,items返回的(key,value)的tuples
- sorted(dicObj.items()):可以對dic的key進行排序輸出
- sorted([(v,k)for k,v in dicObj.items()]) 字典轉成數組排序
- import re 引入正則表達式庫 re.search('^From',strObj)進行匹配,返回T/F
^X.: :X開頭,【.】代表任何字符,【】代表重複0次以上,所以是X開頭,然後任意字符串,並且【:】結尾
^X-\S+: : X-開頭,【\S】代表任何非空格字符,【+】代表重複1次以上,並且【:】結尾
- 查找匹配字符re.findall
[0-9]+ :符合【[]】的字符查找出來,【+】表示重複多次,所以是把目標STR全部字符串找出來
^F.+: :F開通,【.】【+】配合適配任意字符,最後字符是【:】,這是【貪婪】原則,導致中間有多個【:】只取最後
^F.+?: :【?】非貪婪原則,變成只取第一個【:】的字符串
\S+@\S+ :把【@】字符左右非空字符都截取,查找郵箱
^From (\S+@\S+) :從From 之後開始查找郵箱
@([^ ]*) :【@】開始,【[^ ]】查找非零字符串(【^】就是非的意思),把第一串找出來
$[0-9.]+ :從【$】開始,把數字和小數點查找出來
符號 |
功能 |
^ |
匹配一行的開頭 |
$ |
匹配線的末尾 |
. |
匹配任何角色 |
\ S |
匹配空白 |
\ S |
匹配任何非空白字符 |
* |
重複一個字符零次或多次 |
*? |
重複一個字符零次或多次(非貪婪) |
+ |
重複一次或多次角色 |
+? |
重複一次或多次角色(非貪婪) |
[AEIOU] |
匹配列出的集合中的單個字符 |
[^ XYZ] |
匹配不在列出的集合中的單個字符 |
[A-Z0-9] |
字符集可以包括範圍 |
( |
指示字符串提取的開始位置 |
) |
指示字符串提取結束的位置 |
- 快捷鍵:
command+ alt + L :把函數格式重構對齊
Tab/ shift + Tab :代碼縮進提出
command + [ :鼠標回到上一個鼠標地方
command + Y :對應函數彈框展示定義 Esc退出窗口
fn + F1 :顯示函數幫助文檔
command + E 可打開最近訪問過的文件或者用 command+Shift+E打開最近編輯過的我文件。
連續按兩下 Shitf 鍵可以搜索文件名、類名、方法名,還可以搜索目錄名,搜索目錄的技巧是在在關鍵字前面加斜槓/。
要使用還沒有引入到模塊則沒法自動提示了,使用 Alt + Enter 智能提示你選擇合適的操作。
擊左邊的Structure按鈕就進入代碼結構界面。從Structure我們可以看出當前代碼文件中有多少個全局變量、函數、類以及類中有多少個成員變量和成員函數。
其中V圖標表示全局變量,粉紅色的f圖標表示普通函數,左上角帶紅色小三角的f圖標表示內嵌函數,C圖標表示類,類中m圖標表示成員函數,f圖標表示成員變量。點擊圖片可以跳轉到對應的代碼。
-
main 對象初始化的時候會調用,del 對象銷燬的時候會調用
- SQL
Logical key : 邏輯key,用於表內查詢
Foreign key:外部key,用於連接其他表的對應key
Primary key:主key,用於查詢
- SQL 創建表:
conn = sqlite3.connect('trackdb.sqlite')
cur = conn.cursor()
# Make some fresh tables using executescript()
cur.executescript('''
DROP TABLE IF EXISTS Artist;
DROP TABLE IF EXISTS Album;
DROP TABLE IF EXISTS Track;
DROP TABLE IF EXISTS Genre;
CREATE TABLE Artist (
id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT UNIQUE,
name TEXT UNIQUE
);
CREATE TABLE Genre (
id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT UNIQUE,
name TEXT UNIQUE
);
CREATE TABLE Album (
id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT UNIQUE,
artist_id INTEGER,
title TEXT UNIQUE
);
CREATE TABLE Track (
id INTEGER NOT NULL PRIMARY KEY
AUTOINCREMENT UNIQUE,
title TEXT UNIQUE,
album_id INTEGER,
genre_id INTEGER,
len INTEGER, rating INTEGER, count INTEGER
);
''')
- SQL表中插入數據:
cur.execute('''INSERT OR IGNORE INTO Artist (name)
VALUES ( ? )''', ( artist, ) )
cur.execute('SELECT id FROM Artist WHERE name = ? ', (artist, ))
artist_id = cur.fetchone()[0]
cur.execute('''INSERT OR IGNORE INTO Album (title, artist_id)
VALUES ( ?, ? )''', ( album, artist_id ) )
cur.execute('SELECT id FROM Album WHERE title = ? ', (album, ))
album_id = cur.fetchone()[0]
cur.execute('''INSERT OR IGNORE INTO Genre (name) VALUES ( ? )''',(genre, ))
cur.execute('SELECT id FROM Genre WHERE name = ?', (genre, ))
# print('genre_id',cur.fetchone())
genre_id = cur.fetchone()[0]
cur.execute('''INSERT OR REPLACE INTO Track
(title, album_id, len, rating, count, genre_id)
VALUES ( ?, ?, ?, ?, ?, ?)''',
( name, album_id, length, rating, count, genre_id ) )
conn.commit()
- SQL表查詢數據:
cur.execute('''SELECT Track.title, Artist.name, Album.title, Genre.name
FROM Track JOIN Genre JOIN Album JOIN Artist
ON Track.genre_id = Genre.ID and Track.album_id = Album.id
AND Album.artist_id = Artist.id
ORDER BY Artist.name LIMIT 3''')
print('result',cur.fetchone())