python基礎知識總結(不斷更新。。。。)

可以簡便的方法:
(1)lambda x,y:x*y
(2)list1 = list(filter(lambda x:x%3 == 0,range(100)))
filter 第一個參數是過濾條件,第二個是要過濾的內容
返回值是個Object,得轉換爲其他類型
(3)map: list1 = map(lambda x:x**2,[1,2,3,4,5])
第一個是處理條件,第二個是序列
返回值是Object
(4)[i for i in range(10) if i%2 ==0] 直接生成列表

1.縮進是python的靈魂
2.獲取變量類型,type(),isinstance(,)
3.s爲字符串

4.怎麼才能讓int四捨五入?
int(x+0.5)
5.python3支持中文變量名,但源碼是utf-8
6.python對象3個特性:身份,類型,值
7.python數字類型:int,long,float,boolean,complex(複數),
字符類型:string
序列類型:字典,元組,列表
8.典型python文件結構:
(1)起始行 #/usr/bin/env/python
(2) 模塊文檔 "this is a test module"
(3) 模塊導入 import os
(4) (全局)變量定義 debug = True
(5) 類定義(若有) class FooClass(Object):
pass
(6) 函數定義: def test():
(7) 主程序 if name = "main"
9.元組不可變,列表可變,字典可變
10.set函數,去除集合中重複元素,li = set(list2)
11.兩個集合求交集:list1 & list2,求並集:list1 | list2

  1. parent
    --_init.py
    --child
    -- _init.py
    --a.py
    目錄結構如上,如果要引用a文件,可這樣
    import sys,os
    sys.path.append(os.getcwd()+"\parent\child")
    from a import func
    13.os.walk(path)
    14.p,f = os.path.split(spath) 分隔目錄和文件名
    drv,left = os.path.splitdrive(spath) 分隔盤符和文件名
    f,ext = os.path.splitext(spath) 分隔文件和擴展名
    15.時間處理
    16.三目運算符:sm = x if x>y else y
    17.None表示空類型
    18.a=[1,2,3] b=[1,2,4] id(a[1]) == id(b[1]) True
    19.python是基於值的內存管理方式,不同變量的值 如果相等,則他們的內存地址id(變量名)也相等
    20.dict.get(key,error) 有則返回值,無則返回提示
    21.列表:
    append(),intsert(1,'two'),extend(),sort(),reverse(),list[:],pop(),del li[0],copy(),clear()
  2. [i for i in range(10) if i>10]
    23.元組:x = 1, x = 1,2,3
    24.x = (1,2,3,4)
    2,3之間插入5
    x[:2] + ('5',) + x[2:]
    25.python內置方法:
    divmod(10,2) 返回10對2的除法和餘數
    pow(x,y,z) x的y次方,如果z存在,則%z
    float,int,long,list,tuple,str,dict 轉換爲其類型
    round四捨五入 sum求和
    isinstance(1,int) 前者是否屬於後者類型
    'I am {0} ,I like {1}'.format('xy','d')
    enumerate,返回一個可枚舉的對象(tuple)
    set
    sorted 排序
    all(集合) 集合中所有的元素都爲真才爲真
    any(集合) 集合中有一個元素都爲真才爲真
    cmp(x,y) x<y 返回負數 x==y返回0 x>y返回正數
    next() 返回迭代對象中的下一個元素
    reversed(range(10)) 逆置對象
    sorted() 對對象進行排序,返回一個新的列表
    zip 返回元組型
    x = [1,2,3]
    y = [4,5,6,7]
    print(list(zip(x,y))) [(1, 4), (2, 5), (3, 6)]
    map: list1 = map(lambda x:x**2,[1,2,3,4,5])
    第一個是處理條件,第二個是序列
    返回值是Object
    filter: list1 = list(filter(lambda x:x%3 == 0,range(100)))
    filter 第一個參數是過濾條件,第二個是要過濾的內容
    返回值是個Object,得轉換爲其他類型
    help() 返回對象的幫助信息
    input 讀取用戶輸入的信息
    open 打開文件
    exec 執行動態語句塊 exec('a=1+2')

26.使用函數名doc可以查看函數文檔
27.閉包函數:
def fun1(x):
def fun2(y):
return xy
return fun2
28.字符串處理:
capitalize() 首字母大寫
title 首字母小寫
replace('1','2') 替換
upper 全部大寫
lower 全部小寫
swapcase 大小寫互換
lstrip 去掉左空格 strip 左右 rstrip右空格
split
startswith 以。。開頭 endswith以。。結尾
s.isalnum() 所有字符都是數字或者字母,爲真返回 Ture,否則返回 False。
s.isalpha() 所有字符都是字母,爲真返回 Ture,否則返回 False。
s.isdigit() 所有字符都是數字,爲真返回 Ture,否則返回 False。
s.islower() 所有字符都是小寫,爲真返回 Ture,否則返回 False。
s.isupper() 所有字符都是大寫,爲真返回 Ture,否則返回 False。
s.istitle() 所有單詞都是首字母大寫,爲真返回 Ture,否則返回 False。
s.isspace() 所有字符都是空白字符,爲真返回 Ture,否則返回 False。
replace
find('t') 有則返回位置,無則返回-1
count('t') 字符串中數量
29.關鍵字:global 修改函數外的全局變量,nonlocal內部函數修改外部函數的局部變量
30.lambda函數:
g = lambda x,y:x
y
g(2,3) ---------6

31.字典:d = {k:v,k1:v1}
訪問:d[k],d.get(k)
修改:d[k] = 'v2'
刪除:del d[k] 刪除一個
d.clear() 清空所有
del dict 刪除字典
d.items() 返回(鍵,值)元組
d.key()
d.values()
d.pop(k) 刪除並返回值
x = {}
x = x.fromkeys((1,2,3),'a')

  1. set
    特點:無序,不能通過索引或執行切片操作
    frozenset() 不可修改的集合
    創建:
    a = {1,2,3}
    a = set('boy')
    a = set(['a','b','c','d'])
    比較:s = {1,2,3} b = {2,5}
    s.difference(b) //找到s中存在,b中不存在的集合,返回新值
    添加:s.add()
    刪除:discard s.discard(3) //刪除不存在的元素不會報錯
    remove s.remove(3) //刪除不存在的元素會報錯
    pop s.pop() //刪除最後一個元素並返回新值
    取交集: s = {1,2,3} b = {2,5}
    s.intersection(b) //取交集,賦給新值
    判斷: s = {1,2,3} b = {2,5}
    s.isdisjoint(b) //判斷是否不存在交集(有交集False,無交集True)
    s.issubset(b) //判斷s是否是b的子集合
    s.issuperset(b) //判斷s是否是b的父集合
    取並集:s = {1,2,3} b = {2,5}
    s.union(b) //取並集,並賦新值
    更新:s = {1,2,3} b = {2,5}
    s.update(b)
    print(s) {1,2,3,5}
    33.文件處理:
    r 只讀 r+讀寫 w可寫,存在則覆蓋 w+讀寫,存在則覆蓋 a追加,不存在則創建

    f.read() 讀取文件全部內容爲一個str
    f.readline() 讀取一行
    f.readlines() 讀取所有行,放到一個list中

    f.write() 只可寫字符串
    f.writelines() 可寫序列

    當出現提示亂碼時:添加encoding='UTF-8'
    open('', 'w+', encoding='UTF-8')

  2. xlrd處理表格

    #打開文件
    workbook = xlrd.open_workbook(r'F:\')
    #獲取所有sheet
    workbook.sheet_names() 返回一個列表
    #根據sheet索引或者名稱獲取sheet內容
    sheet2 = workbook.sheet_by_index(1)
    sheet2 = workbook.sheet_by_name('sheet2')
    #獲取sheet2的名稱,行數,列數
    sheet2.name,sheet2.nrows,sheet2.ncols
    #獲取整行和整列的值(數組)
    rows = sheet2.row_values(3) #第四行內容
    cols = sheet2.col_values(2) #第三列內容
    #獲取單元格內容
    sheet2.cell_value(1,0).encode('utf-8')
    #獲取單元格內容的數據類型
    sheet2.cell(1,0).ctype

    xlwt 寫文件
    #創建工作簿
    f = xlwt.Workbook(encoding='utf-8')
    #創建第一個sheet
    sheet1 = f.add_sheet('sheet1')
    #寫數據,對應 行 列 值
    sheet1.write(0,1,label = 'this is the test')
    #保存
    f.save('xx.xlsx')

  3. os模塊
    示例目錄:path = C:\Users\hwx518534\Desktop
    os.name nt/posix
    os.getcwd() 得到當前工作目錄
    os.curdir 當前目錄
    os.listdir(path) 返回指定目錄下的所有文件和目錄名 列表
    os.remove() 刪除一個文件
    os.rename() 重命名
    os.system() 執行系統命令
    os.mkdir()
    os.rmdir() 刪除文件夾,文件夾須爲空
    os.unlink(path) 刪除path下所有文件
    os.exit() 終止當前進程
    os.chdir() 改變當前目錄
    os.walk() 返回三元組 第一個是文件夾地址 第二個是list,當前文件夾下所有目錄名字(不包括子目錄)
    第三個返回的是list,返回的是該文件夾下的所有文件(不包括子目錄)

    os.path模塊
    示例目錄:path = C:\Users\hwx518534\Desktop\temp.py
    os.path.abspath(file) 當前文件的絕對路徑
    os.path.dirname() 獲取當前文件目錄 C:\Users\hwx518534\Desktop
    os.path.split() 返回一個路徑的目錄名和文件名 ('C:\Users\hwx518534\Desktop', 'temp.py')
    os.path.isfile() os.path.isdir 檢測是否是文件或目錄
    os.path.exists() 檢測路徑是否存在
    os.path.getsize() 獲得文件大小(字節),如果是目錄返回0L,
    os.path.splitext() 分離文件名與擴展名
    os.path.join() 連接目錄與文件名 返回值爲路徑
    os.path.basename() 返回文件名

  4. _開頭變量含義

    _xx表示受保護變量,不能通過from x import x 導入,可在對象和子類中訪問
    x表示系統定義的特殊變量
    __xx 私有成員,只有類對象自己可以訪問

  5. time模塊
    time.time() 紀元開始的秒數
    time.ctime() Wed Jan 31 17:50:57 2018
    time.localtime() time.struct_time(tm_year=2018, tm_mon=1, tm_mday=31, tm_hour=9, tm_min=51, tm_sec=54, tm_wday=2, tm_yday=31, tm_isdst=0)
    s = time.gmtime() s.tm_year ---2018
    time.strftime("%Y-%m-%d %H:%M:%S",time.localtime())
    2018-01-31 18:06:25
    38.shutil模塊 --- 高級的文件,文件夾,壓縮包處理模塊
    shutil.copyfileobj(open('xx.py','r'),open('x.txt','w')) -- 拷貝文件內容到另一個文件
    shutil.copyfile('xx.py','x1.py') --拷貝文件到另一個文件
    shutil.copystat(src,dst) --僅拷貝狀態信息
    shutil.copy(src,dst) --拷貝文件和狀態
    shutil.copytree('folder1','folder2') --遞歸拷貝文件夾
    shutil.rmtree('f1') --遞歸刪除文件(夾)
    shutil.move(src,dst) --重命名
    39.常見異常
    AssertionError 斷言語句失敗
    AttributeError 未知的對象屬性
    IndexError 索引序列超出範圍
    KeyError 字典中查找一個不存在的關鍵字
    NameError 嘗試訪問一個不存在的變量
    OSError 操作系統產生的異常
    FileNotFoundError 文件未找到
    SyntaxError 語法異常
    TypeError 不同類型間的操作異常
    ZeroDivisionError 除數爲0異常
    40.面像對象
    init方法,預處理
    __name ,私有變量,只能通過內部去訪問,但是是僞裝的還可以這樣訪問
    p = Fish()
    p._Fish__name
    41.正則表達式
    字符:
    .:匹配任意字符 a.c ---abc
    \:轉義字符 a.c --- a.c
    [...]:匹配括號中的任意一個 a[bx]c --abc,axc

    預定義字符集:
    \d:匹配數字[0-9] a\dc --a0c,a1c
    \D:匹配非數字[^\d] a\Dc --amc,abc
    \s:匹配空白字符[<空格>\t\r\n\f\v] a\sc -- a c
    \S:匹配非空白字符[^\s] a\Sc -- abc
    \w:匹配單詞字符[A-Za-z0-9_] a\wc -- abc
    \W:匹配非單詞字符[^\w] a\Wc --a c

    數量詞:
    :匹配前一個字符0或多次 abc ----ab,abc,abcccc
    +:匹配前一個字符1或多次 abc+ -----abc,abccc
    ?:匹配前一個字符0或1次 abc? ----ab,abc
    {m}:匹配前一個字符m次 a{2}c -- aac
    {m,n}:匹配前一個字符m次-n次 a{1,2}c -- ac aac

    邊界匹配:
    ^:匹配以。。開頭的 ^a ----abc
    $:匹配以。。結尾的 c$ ----abc

    貪心模式:.
    非貪心模式: .
    ?

    匹配或:
    (a|b|c) 不能使用[a|b|c]

    flag:
    re.I:IGNORECASE,忽略大小寫
    re.M:re.MULTILINE,多行模式,改變^和$的行爲
    re.S:re.DOTALL,點任意匹配模式,改變.的行爲

    pattern = re.compile(r'one')
    str = 'one1two2three3four4five5'

    (1)re.match() 只從開頭匹配,有則返回,無則None
    x = re.match(pattern,str) x.group() === one

    pattern = re.compile(r'ne')
    x = re.match(pattern,str) x.group() === None
    (2)re.search() 掃描整個str,有則匹配,匹配完成就返回,無則None
    pattern = re.compile(r'ne')
    x = re.search(pattern,str) x.group() === ne
    (3)re.split() 返回列表 根據可匹配的子串將字符串分隔
    pattern = re.compile(r'\d+')
    x = re.split(pattern,str) x === ['one','two','three','four','five']
    (4)re.findall() 以列表形式返回所有匹配的子串
    pattern = re.compile(r'\d+')
    x = re.findall(pattern,str) x === ['1','2','3','4','5']
    (5)re.finditer() 返回一個順序訪問第一個匹配結果的迭代器
    pattern = re.compile(r'\d+')
    x = re.finditer(pattern,str)
    for m in x:
    print(m) 1 2 3 4 5
    (6)re.sub(pattern,匹配到的處理,待處理的字符串) 返回值爲處理後的字符串
    去掉前後空格
    s = " hello world "
    pattern = re.compile(r'(^\s+)(\w.*)(\s+$)')
    print(re.sub(pattern, r'\2', s))

  6. t = threading.Thread(targets=func,args=(1,2,...))
    t.setDeamon(True) //設置爲守護進程,隨着主進程一起退出,寫在t.start()前面
    t.start() //啓動線程
    t.join(x) //x代表秒數,可爲空,爲空時表示子線程執行時父線程阻塞,不爲空時表示子線程執行x秒後,父線程執行

  7. datetime.datetime.fromtimestamp(time.time())
    datetime.datetime(2015, 2, 27, 11, 13, 0, 604980)

44.python導包順序:
當前目錄---當前項目---pythonpath---python中lib文件夾---python中lib文件夾下的site-pakage
45.sys模塊
sys.path 返回模塊的搜索路徑
sys.exit() 退出當前程序
sys.argv[0] 返回參數 0返回當前文件名稱 1,2,3。。返回參數
sys.modules.keys() 返回所有已經導入的模塊列表
sys.platform 返回操作系統平臺名稱
sys.getdefaultencoding() 獲取編碼
sys.setdefaultencoding('utf-8') 設置腳本編碼
46.chr(64) -- 根據ascii碼轉換爲字符
ord('a') -- 根據字符轉換爲ascii碼

47.openpyxl
新建: wb = openpyxl.Workbook()
刪除工作表 wb.remove(sheet)
讀取一個表格 wb = openpyxl.load_workbook('')
獲取所有工作表名 sheets = wb.get_sheet_names()
獲取某一個特定的工作表 sheet = wb.get_sheet_by_name('Sheet2')
獲取工作表的表名 sheet_name = sheet.title
獲取激活的工作表 sheet = wb.active
獲取單元格內容 a = sheet['A2'] a = sheet.cell(1,2) a.value
獲取行 sheet.rows
獲取列 sheet.columns

獲取最大行 sheet.max_row
獲取最大列 sheet.max_column
給單元格賦值 sheet['A2'].value = 3
保存單元格 wb.save('')
48.下載圖片,得到圖片url
i = requests.get(url)
open('xx.png','wb').write(i.content)

習題總結:

1.range(100):0-99,range(1,101):1-100,range(1,101,2):1開始,101結束不包含101,每次增加2,range(10,0,-1):10開始,0結束但不包含0,每次增加-1
2.註釋:單行:# 多行:'''內容'''
3.3//2 = 1 地板除(先對被除數進行四捨五入),得到的結果無條件截斷
4.print方法 print(1,2,seq='&&' end='\t') 輸出多個對象,用,隔開,對象間的分隔符
5.for index, data in enumerate(x) 遍歷索引和數據
6.\起到換行的作用
x = 'ddddd\
sdfdsfsf'
7.多元賦值:(a,b,c) = (1,2,'string')
8.while-else
x = 13
while x > 10:
print(x)
else:
print('xx')

  1. x += 1
  2. 迭代器和生成器
    迭代器:
    it = iter([1,2,3])
    for i in it:print(i)
  3. collections模塊下的deque 雙向隊列 ---左右兩端操作列表
    import collections
    d = collections.deque()
    d.appendleft('1')
    d.appendleft("2")
    print(d)
    返回值 :deque(['2', '1'])

12.copy與deepcopy區別
見總結文檔
13.%r與%s區別
1.%r調用的是repr方法,%s調用的是str方法
2.%r打印時能顯示出它所屬的對象。
實例:
打印數字類型,二者一樣
打印字符類型,%r打印出來的會帶着單引號
打印日期類型:
d = datetime.date.today()
print('%r,%s' %(d,d)) ---- datetime.date(2018,6,8) 2018-06-08
14.python如何讀取大文件
使用read()方法是一次性將文件內容讀取並存在到內存中,一旦文件大小大於內存大小時,就會出現內存溢出
解決方法:
(1) 使用read(參數),指定讀取大小 ,也可readline()一行一行讀取,不能使用readlines()
(2)使用with open(filename,'r') as file: for i in file:...
(3)使用模塊fileinput for line in fileinput.input('filename')
15.bin()轉換爲二進制
oct()轉換爲八進制
hex()轉換爲十六進制

16.裝飾器
def hello(o):
print("hello,%s" % o, t)
對其擴展加入一些步驟
(1)固定參數
def deco(hello):
def x(name):
print("before myfunc()...")
hello(name)
print("after func()....")
return xbr/>@deco
def hello(o):
print("hello,%s" % o, t)

(2)不固定參數
def deco(hello):
    def x(*args, **kargs):
        print("before myfunc()...")
        hello(*args, **kargs)
        print("after func()....")
    return x

@deco
def hello(o, t):
    print("hello,%s,%s" % (o, t))

(3)一個函數可以有多個裝飾器

17.方法名或類名獲取
(1)方法名:方法名.name
(2)類名:self.class.name
(3)sys._getframe().f_code.co_name

  1. and or
    or:從左到右,返回每一個爲真的值,若都爲假,則返回最後一個值
    and:從左到右,返回第一個爲假的值,若都爲真,則返回一個值
    19.連接兩個字符串:({} {}!).format('hello','world')
    20.is比較的是內存值是否相同,==比較的是值是否相同
    (1)a = [1,2,3]
    b = a
    a is b ---True
    a ==b -----True
    (2)a = [1,2,3]
    b = a[:]
    a is b ---False
      1. a ==b ----True``
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章