令人窒息的python騷操作

2021-03-02 python

 本文用作記錄,在使用python過程中遇到的一些技巧,有些代碼是本人所寫,有些則是python內置函數,有些則取之網際網路。在此記錄,只為備份以及遺忘時方便查找。

內容僅限記錄一些常用好用卻又永遠記不住的代碼或者模塊。

控制臺操作

控制臺不閃退

os.system('pause')

獲取控制臺大小

rows, columns = os.popen('stty size', 'r').read().split()

輸入輸出控制

解決輸入提示中文亂碼問題

raw_input(unicode('請輸入文字','utf-8').encode('gbk'))

格式化輸出

print a.prettify()

接受多行輸入

text=""
while 1:data=raw_input(">>")
if data.strip()=="stop":
break
text+="%s\n" % dataprint text--
>>1
>>2
>>3
>>stop
1
2
3

同行輸出

Print '%s' Print '%s \r'

標準輸入輸出

sys.stdout.write("input") 標準輸入
sys.stdout.flush() 刷新緩衝區

print的功能與sys.stdout.write類似,因為2.x中print默認就是將輸出指定到標準輸出中(sys.stdout)。

顏色控制

控制臺顏色控制(適用於windows)

WConio.textcolor(WConio.YELLOW)
print "yellow"
WConio.textcolor(WConio.BLUE)
print "blue"

輸出顏色控制(全平臺)

red = '\033[1;31m'
green = '\033[1;32m'
yellow = '\033[1;33m'
white = '\033[1;37m'
reset = '\033[0m』 print red+"color is red"+resetprint green+"color is green"+reset

進度條控制

方案一

from __future__ import division
import sys,timej = '#'
for i in range(1,61):j += '#'
sys.stdout.write(str(int((i/60)*100))+'% ||'+j+'->'+"\r")sys.stdout.flush()time.sleep(0.1)

方案二

import sys
import time
for i in range(1,61):
sys.stdout.write('#'+'->'+"\b\b")
sys.stdout.flush()
time.sleep(0.5)

方案三

from progressbar import *
import time
import osrows, columns = os.popen('stty size', 'r').read().split() console_width=int(columns)total = 10
progress = ProgressBar()
def test():
'''進度條函數,記錄進度'''
for i in progress(range(total)):test2()
def test2():
'''執行函數,輸出結果'''
content="nMask'Blog is http://thief.one"
sys.stdout.write("\r"+content+" "*(console_width-len(content)))time.sleep(1)sys.stdout.flush() test()

更多高級用法可以使用progressbar模塊。

系統作業系統信息

獲取python安裝路徑

from distutils.sysconfig import get_python_lib
print get_python_lib

獲取當前python版本

sys.version_info
sys.version

獲取當前時間

c=time.ctime()
ISOTIMEFORMAT=』%Y-%m-%d %X’time.strftime( ISOTIMEFORMAT, time.localtime() )

查看系統環境變量

os.environ["PATH"]

獲取系統磁碟

os.popen("wmic VOLUME GET Name")

獲取當前路徑(包括當前py文件名)

os.path.realpath(__file__)

當前平臺使用的行終止符

os.linesep

獲取終端大小

rows, columns = os.popen('stty size', 'r').read().split()#python3以後存在可以使用os
os.get_termial_size()

退出程序

return:返回函數的值,並退出函數。

exit():直接退出。

sys.exit(): 引發一個SystemExit異常,若沒有捕獲錯誤,則python程序直接退出;捕獲異常後,可以做一些額外的清理工作。

sys.exit(0):為正常退出,其他(1-127)為不正常,可拋異常事情供捕獲。(一般用於主線程中退出程序)

os._exit(0): 直接退出python程序,其後的代碼也不會執行。(一般用於線程中退出程序)

網絡操作

域名解析為ip

ip= socket.getaddrinfo(domain,'http')[0][4][0]

獲取伺服器版本信息

sUrl = 'http://www.163.com'sock = urllib2.urlopen(sUrl)sock.headers.values()

文件操作

open函數,使用wb、rb代替w、r

with open("test.txt","wr") as
w:w.write("test")

這種寫法可以兼容python2/3。

輸出一個目錄下所有文件名稱

def search(paths):
if os.path.isdir(paths): files=os.listdir(paths) for i in files:i=os.path.join(paths,i) search(i) elif os.path.isfile(paths): print paths

文件查找

import globprint glob.glob(r"E:/*.txt") 查找文件只用到三個匹配符:」*」, 「?」, 「[]「」*」匹配0個或多個字符;」?」匹配單個字符;」[]「匹配指定範圍內的字符,如:[0-9]匹配數字。

查找指定名稱的文件夾的路徑

def search(paths,file_name,tag,lists):
if os.path.isdir(paths): if file_name==tag: lists.append(paths) else: try:files_list=os.listdir(paths) for file_name in files_list:path_new=os.path.join(paths,file_name) search(path_new,file_name,tag,lists) except: pass 

elif os.path.isfile(paths): pass 

return lists

數據操作

判斷數據類型

isinstance("123",(int,long,float,complex)

字符串(string)

字符串推導

a="True"
b=a if a=="True" else "False"
>>>print bTrue

format方法拼接字符串與變量

a="{test} abc {test2}".format(test="123",test2="456")
>>>>print a
123 abc 456
或者:a="{},{}".format(1,2)
>>>>>print a
1,2

去掉小數點後面的數字

a=1.21311
b=Int(math.floor(a))

字符串倒置

>>> a = "codementor"
>>> a[::-1]

字符串首字母變大寫

info = 'ssfef'
print info.capitalize()print info.title()

返回一個字符串居中,並使用空格填充至長度width的新字符串。

"center string".center(width)

列舉所有字母

print string.ascii_uppercase 所有大寫字母
print string. ascii_lowercase 所有小寫字母
print string.ascii_letters 所有字母(包括大小寫)

列表(list)

列表去重

ids = [1,4,3,3,4,2,3,4,5,6,1]
ids = list(set(ids))

判斷列表為空

a=[]
if not a:

列表運算

a=[1,2,3]b=[3,4,5]
set(a)&set(b) 與
set(a)|set(b) 或
set(a)-set(b) 非

單列表元素相加

a = ["Code", "mentor", "Python", "Developer"]
>>> print " ".join(a)Code mentor Python Developer

多列表元素分別相加

list1 = ['a', 'b', 'c', 'd']list2 = ['p', 'q', 'r', 's']
>>> for x, y in zip(list1,list2):
print x, yapbqcrds

將嵌套列錶轉換成單一列表

a = [[1, 2], [3, 4], [5, 6]]
>>> import itertools>>> list(itertools.chain.from_iterable(a))[1, 2, 3, 4, 5, 6]

列表內元素相加

a=[1,2,3](數字)sum(a)

產生a-z的字符串列表

map(chr,range(97,123))

列表複製

a=[1,2,3]b=a當對b進行操作時,會影響a的內容,因為共用一個內存指針,b=a[:] 這樣就是單獨複製一份了。

列表推導

if+else配合列表解析

[i if i >5 else -i for i in range(10)]

多層嵌套列表

a=[[1,2],[3,4]]
b=[for j in i for i in a]
print b[1,2,3,4]

生成一個生成器,調用next方法,可以減少內存開支。

a=(i else i+1 for i in b if i==1)

字典推導

更換key與value位置

dict={"a":1,"b":2}
b={value:key for key value in dict.items()}

字典操作(dict)

篩選出值重複的key

list1=self.dict_ip.items()ddict=defaultdict(list)
for k,v in list1:ddict[v].append(k)list2=[(i,ddict[i]) for i in ddict if len(ddict[i])>1]dict_ns=dict(list2)

字典排序(py2)

file_dict={"a":1,"b":2,"c":3}
file_dict_new=sorted(file_dict.iteritems(), key=operator.itemgetter(1),reverse=True) ##字典排序,reverse=True由高到低,itemgetter(1)表示按值排序,為0表示按key排序。

字典值判斷

b={"a":1}a=b.get("a","") c=a if a else 0

模塊操作

導入模塊時,設置只允許導入的屬性或者方法。

fb.py:---__all__=["a","b"]a="123"
c="2345"
def b():
print 「123」---
from fb import *可以導入__all__內定義的變量,a跟b()可以導入,c不行。如果不定義__all__則所有的都可以導入。

導入上級目錄下的包

sys.path.append("..")
from spider.spider_ import spider_

導入外部目錄下的模塊

需要在目標目錄下創建__init__.py文件,內容隨便。

增加模塊屬性

有時候原始碼中,我們需要寫上自己的名字以及版本介紹信息,可以用__name__的方式定義。a.py:
#! -*- coding:utf-8 -*-
__author__="nMask"

然後當我們導入a這個模塊的時候,可以輸出dir(a)看看

>>> import p
>>> print dir(p)['__author__', '__builtins__', '__doc__', '__file__', '__name__', '__package__']
>>> print p.__author__
nmask

動態加載一個目錄下的所有模塊

目錄:
c.py導入test下面的所有模塊:
for path in ["test"]:
for i in list(set([os.path.splitext(i)[0] for i in os.listdir("./"+path)])):
if i!="__init__" and i!=".DS_Store": ##排除不必要的文件import_string = "import path+"."+i+"
exec import_string #執行字符串中的內容

函數操作eval/exec

def test(content):
print content
exec(「test(『abc')」)

輸出:abc

說明:exec函數沒有返回值

def test(content):
return content
print eval(「test(『abc')」)

輸出:abc

說明:eval函數有返回值

裝飾器函數

輸出當前時間裝飾器

def current_time(aclass):
def wrapper():
print "[Info]NowTimeis:",time.ctime()
return aclass()
return wrapper

itertools迭代器

p=product([,,,],repeat=2)----[(,),(,).]

reduce函數

函數本次執行的結果傳遞給下一次。

def test(a,b):
return a+breduce(test,range(10))結果:從0+1+2.+9

enumerate函數

輸入列表元素以及序列號

n=["a","b","c"]
for i,m in enumerate(n):
print(i,m)

函數超時時間設置

利用signal設置某個函數執行的超時時間

import time
import signal
def test(i):
time.sleep(0.999)print "%d within time"%(i)
return i
def fuc_time(time_out):
def handler(signum, frame):
raise AssertionError
try:signal.signal(signal.SIGALRM, handler)signal.alarm(time_out)temp = test(1) return temp
except AssertionError:
print "%d timeout"%(i)if __name__ == '__main__':
for i in range(1,10):fuc_time(1)

函數出錯重試

利用retrying模塊實現函數報錯重試功能

import randomfrom retrying import retry 
@retry
def have_a_try():
if random.randint(0, 10) != 5:raise Exception('It's not 5!')print 'It's 5!'

如果我們運行have_a_try函數,那麼直到random.randint返回5,它才會執行結束,否則會一直重新執行,關於該模塊更多的用法請自行搜索。

程序操作Ctrl+C退出程序

利用signal實現ctrl+c退出程序。

import signal
import sys
import time
def handler(signal_num,frame):
print "\nYou Pressed Ctrl-C."
sys.exit(signal_num)signal.signal(signal.SIGINT, handler)
while 1:time.sleep(10)

程序自重啟

利用os.execl方法實現程序自重啟

import time
import sys
import os
def restart_program():
python = sys.executable
print "info:",os.execl(python, python, * sys.argv)

if __name__ == "__main__":
print 'start...'
print u"3秒後,程序將結束...".encode("utf8")time.sleep(3)restart_program()

作者:小翊丶源自:http://thief.one/2017/04/19/1/
聲明: 文章著作權歸作者所有,如有侵權,請聯繫小編刪除。

相關焦點

  • Python 4 種不同的存取文件騷操作
    想到這種先保存再加載調用的過程,之前很多地方都遇到過呀,最簡單常用的就是python中文件的存取哇!於是乎,小詹夜觀星象,就著手整理記錄各種文件存取的騷操作,具體如下。(PS:雖然我知道技術文章太長,耐心看完的人很少,曝光率和點讚率會下降,更不會有什麼收益,但是還是想記錄下自己學習過程中的一些筆記,以後自己或者別人查起來方便些!)
  • 那些令人窒息的操作!外賣小哥與顧客的幽默對話,我笑抽了!
    令人窒息的操作!外賣小哥與與顧客有哪些幽默對話?下方高能預警,請君查看:你是真聽不懂呢還是故意不想帶呢?小哥還是你騷!內心的愧疚的同時還有點想笑!哈哈哈……抱歉,沒忍住!
  • 遊戲中令人「窒息」的新手教程!萌新玩一個月卻還沒入門?
    要說令人窒息的新手教程,師妹第一個想到的就是我的世界。 但是等到上手操縱,實際情況卻是又搞笑又令人窒息,每每師妹已經很努力的在操作了,奈何手下的角色有自己的想法,完全不受控制!
  • Python 讀取 JSON 數據的騷操作
    >>> from urllib.request import urlopen>>> import json>>> u = urlopen('http://search.twitter.com/search.json?
  • Python 資料庫騷操作 -- MySQL
    閱讀本文大約需要 13 分鐘目錄前言MySQL GUI 工具MySQL 遇上 Docker增刪改查一對多一對一多對多後記前言今天這篇是三大資料庫的結尾篇,前面兩篇分別是:《Python 資料庫騷操作-- MongoDB》《Python 資料庫騷操作 -- Redis》,這篇主要介紹 MySQL 的 orm 庫 SQLAlchemy 。
  • 令人窒息的操作!一男子住賓館打包帶走電視機
    31556768,.令人窒息的操作
  • 這樣皮一下你開心嗎,肯德基新出了一款華夫餅,什麼叫做騷操作!
    而在日本,肯德基和麥當勞常常會出一些令人意想不到的新品,讓人不得不感嘆:這真是令人窒息的操作啊!比如說日本的肯德基最近新出了一款華夫餅,就展示了什麼叫做騷操作!這款華夫餅,從表面上看和一般的華夫餅並沒有什麼區別。
  • 【Python基礎】Python十大文件騷操作!!
    來源:Python數據科學作者:東哥起飛日常對於批量處理文件的需求非常多,用Python寫腳本可以非常方便地實現,但在這過程中難免會和文件打交道,第一次做會有很多文件的操作無從下手,只能找度娘。本篇整理了10個Python中最常用到的文件操作,均採用內置函數實現,無論是批處理還是讀取文件都會用到,相信這個梳理對大家有所幫助。1.
  • 渣男的騷操作了解一下
    渣男的騷操作了解一下時間:2020-06-08 18:38   來源:小雞詞典   責任編輯:沫朵 川北在線核心提示:原標題:跳軌什麼意思什麼梗?渣男的騷操作了解一下 是指微博上某網友分享的一種渣男的騷操作,即渣男每次和三兒睡之前,都先和女朋友分手,睡完再和好,使的在和人任何一個人睡時都保持單身, 簡直是道德楷模 (如下圖) 後網友又總結出《出軌詞典》如下: 跟原配掰   原標題:跳軌什麼意思什麼梗?
  • 《中餐廳》菜單被曝光,英文語法漏洞百出,網友:令人窒息的操作
    除此之外,《中餐廳》菜單被曝光,英文語法漏洞百出,讓網友看到後直呼是令人窒息的操作。菜單上的拼音和英文翻譯都出現不同程度的錯誤,要麼就是用詞,要麼就是拼寫。
  • 268小劇場 | 檢察院辦公室到底是什麼「騷」操作?
    268小劇場 | 檢察院辦公室到底是什麼「騷」操作? 一提到檢察院,最熟悉的莫過於唇槍舌劍的「公訴」加班加點的「批捕」除了這些令人肅然起敬的業務部門
  • 那些提高論文引用的「騷操作」
    「騷操作」之一:想過審?[1,2,3]  此外,調查還顯示此君在為其他雜誌審稿時也會進行這樣的「騷操作」,脅迫論文作者為他的引用數做貢獻。Bioinformatics的副主編還專門為這事發了篇文章進行說明,標題就是「被審稿人脅迫的引用(Reviewer-coerced citation)」。[3]說起來這種現象算是同行評議的一個副作用。由於學術評價的複雜性和專業性,小同行互評往往被認為是最靠譜的方式。
  • python字典操作大全,學習python第7天
    python字典跟列表類型,能存儲多個數據,並且還能在訪問元素的時候可以很快定位到需要的元素。而python字典操作方法有多少種呢?下面羽憶教程為您介紹。python字典python字典概念:python字典可以用來存儲任意類型對象,python字典都是由一個鍵和一個值組成的「鍵值對」,兩者之間用冒號隔開
  • python自動化辦公手冊之python操作PPT
    基於此,我花了整整一周時間真理出來的python自動化文檔手冊,涉及到五個章節(如下圖所示),① python使用openpyxl操作excel;② python使用PyPDF2和pdfplumber操作pdf;③ python使用python-docx操作word;④ python使用python-pptx操作PPT;⑤ python如何自動收發郵件;⑥ python製作電話號碼歸屬地查詢工具。
  • 定位功能防出軌 網友:這令人窒息的愛情
    這操作的確很騷。據某位兒童手錶商家表示,近一年確實有很多年輕人來買兒童手錶,多是覺得時尚有趣,但用來互相定位防出軌的情況還是第一次聽說。據悉,這類兒童手錶多是父母買給孩子使用,定位功能強大,可以定位到具體建築物的樓層,用於兒童防走丟。但是能想出來這麼個用法的人,的確不是很多。
  • 【Python基礎】python使用python-docx操作word
    1、python-docx庫介紹該模塊兒可以創建、修改Word(.docx)文件;python-docx使用官網:python-docx官網我們在安裝此模塊兒使用的是pip install python-docx,但是在導入的時候是import docx;2、Python讀取Word文檔內容注意:每進行一個操作,必須保存一下,否則等於白做;1)word文檔結構介紹在這裡插入圖片描述2)python-docx
  • Python列表簡單操作
    python列表的定義:定義一個空列表打開cmder,輸入python36(根據自己的環境去輸入,python3或者python),筆者這裡是python36,如圖:定義一個空列表,並用type函數檢查類型列表添加數據age = [10,20] 定義一個列表age.append(30) 在age這個列表中添加一個元素
  • 第105天: Python 操作 Word
    上次給大家介紹了 Python 如何操作 Excel ,是不是感覺還挺有趣的,今天為大家再介紹下,用 Python 如何操作 Word ,這個可能跟數據處理關係不大,用的也不多,不過可以先了解下都能實現什麼功能,以備不時之需。
  • Python 操作MySQL資料庫
    Python 使用操作MySQL第一步:
  • python對mysql資料庫的操作(一)
    本文章介紹python對mysql資料庫的基本操作,以及編寫一個模擬用戶的註冊。