Python常用模塊

Time 模塊

時(shí)間模塊常用的有如下幾種。

import time
print(time.time())  # 1513319911.3789327 1970年到當(dāng)前的總時(shí)間s肄梨。
print(time.strftime('%Y-%m-%d %X')) # 2017-12-15 14:38:31

元組形式顯示時(shí)間:

print(time.localtime())
# time.struct_time(tm_year=2017, tm_mon=12, tm_mday=15, tm_hour=14, tm_min=53, tm_sec=39, tm_wday=4, tm_yday=349, tm_isdst=0)

print(time.localtime().tm_mon) # 12

UTC時(shí)間:

print(time.gmtime())

將格式化的時(shí)間轉(zhuǎn)換為元組形式的時(shí)間:

print(time.localtime(3243543544))
print(time.gmtime(3243543544))

時(shí)間轉(zhuǎn)換:

print(time.ctime(12334454))
print(time.asctime(time.gmtime()))

Sun May 24 02:14:14 1970
Fri Dec 15 07:38:07 2017

random模塊

import random
 
print(random.random())#(0,1)----float    大于0且小于1之間的小數(shù)
 
print(random.randint(1,3))  #[1,3]    大于等于1且小于等于3之間的整數(shù)
 
print(random.randrange(1,3)) #[1,3)    大于等于1且小于3之間的整數(shù)
 
print(random.choice([1,'23',[4,5]]))# 1或者23或者[4,5] 隨機(jī)選取
 
print(random.sample([1,'23',[4,5]],2))#列表元素任意2個(gè)組合
 
print(random.uniform(1,3))#大于1小于3的小數(shù),如1.927109612082716 
 
 
item=[1,3,5,7,9]
random.shuffle(item) #打亂item的順序,相當(dāng)于"洗牌"
print(item)

生成隨機(jī)驗(yàn)證碼:

import random
def make_code(n):
    res=''
    for i in range(n):
        s1=chr(random.randint(65,90))
        s2=str(random.randint(0,9))
        res+=random.choice([s1,s2])
    return res

print(make_code(4))

os模塊常用函數(shù)

os.getcwd() 獲取當(dāng)前工作目錄魁衙,即當(dāng)前python腳本工作的目錄路徑
os.chdir("dirname") 改變當(dāng)前腳本工作目錄睁枕;相當(dāng)于shell下cd
os.curdir 返回當(dāng)前目錄: ('.')
os.pardir 獲取當(dāng)前目錄的父目錄字符串名:('..')
os.makedirs('dirname1/dirname2') 可生成多層遞歸目錄
os.removedirs('dirname1') 若目錄為空,則刪除凤巨,并遞歸到上一級(jí)目錄茵典,如若也為空湘换,則刪除,依此類推
os.mkdir('dirname') 生成單級(jí)目錄统阿;相當(dāng)于shell中mkdir dirname
os.rmdir('dirname') 刪除單級(jí)空目錄,若目錄不為空則無(wú)法刪除筹我,報(bào)錯(cuò)扶平;相當(dāng)于shell中rmdir dirname
os.listdir('dirname') 列出指定目錄下的所有文件和子目錄,包括隱藏文件蔬蕊,并以列表方式打印
os.remove() 刪除一個(gè)文件
os.rename("oldname","newname") 重命名文件/目錄
os.stat('path/filename') 獲取文件/目錄信息
os.sep 輸出操作系統(tǒng)特定的路徑分隔符结澄,win下為"\",Linux下為"/"
os.linesep 輸出當(dāng)前平臺(tái)使用的行終止符哥谷,win下為"\t\n",Linux下為"\n"
os.pathsep 輸出用于分割文件路徑的字符串 win下為;,Linux下為:
os.name 輸出字符串指示當(dāng)前使用平臺(tái)。win->'nt'; Linux->'posix'
os.system("bash command") 運(yùn)行shell命令麻献,直接顯示
os.environ 獲取系統(tǒng)環(huán)境變量
os.path.abspath(path) 返回path規(guī)范化的絕對(duì)路徑
os.path.split(path) 將path分割成目錄和文件名二元組返回
os.path.dirname(path) 返回path的目錄们妥。其實(shí)就是os.path.split(path)的第一個(gè)元素
os.path.basename(path) 返回path最后的文件名。如何path以/或\結(jié)尾勉吻,那么就會(huì)返回空值监婶。即os.path.split(path)的第二個(gè)元素
os.path.exists(path) 如果path存在,返回True齿桃;如果path不存在惑惶,返回False
os.path.isabs(path) 如果path是絕對(duì)路徑,返回True
os.path.isfile(path) 如果path是一個(gè)存在的文件短纵,返回True带污。否則返回False
os.path.isdir(path) 如果path是一個(gè)存在的目錄,則返回True香到。否則返回False
os.path.join(path1[, path2[, ...]]) 將多個(gè)路徑組合后返回鱼冀,第一個(gè)絕對(duì)路徑之前的參數(shù)將被忽略
os.path.getatime(path) 返回path所指向的文件或者目錄的最后存取時(shí)間
os.path.getmtime(path) 返回path所指向的文件或者目錄的最后修改時(shí)間
os.path.getsize(path) 返回path的大小

os.path.normcase()此函數(shù)在Linux和mac平臺(tái)上,該函數(shù)會(huì)原樣返回path悠就,在windows平臺(tái)上會(huì)將路徑中的所有字符轉(zhuǎn)換為小寫的形式千绪,并將斜轉(zhuǎn)換為反斜杠:

# Linux 平臺(tái):
>>> import os
>>> os.path.normcase('c:/windows\\system32\\')
'c:/windows\\system32\\'

# Windows平臺(tái):
>>> import os
>>> os.path.normcase('c:/windows\\system32\\')
'c:\\windows\\system32\\'

使用.. 可以表示上一級(jí)目錄。對(duì)目錄進(jìn)行格式化:

#Windows 平臺(tái):
>>> os.path.normpath('c://windows\\System\\../Temp/')
'c:\\windows\\Temp'

# Linux 平臺(tái):
>>> os.path.normpath('/etc/system/sysconfig/\\\\network/\\\ifconfig/../..')
'/etc/system/sysconfig'

獲取文件目錄的兩種方式(有多少層理卑,就使用多少次os.path.dirname):

方式一:
>>> os.path.dirname(os.path.dirname(os.path.dirname(os.path.abspath('/etc/sysconfig/network-scripts/ifcfg-eth0'))))
'/etc'

方式二: os.pardir想當(dāng)與  ..    sys.path是一個(gè)目錄列表.使用insert(0,..)的方式可以優(yōu)先將目錄加入到列表的最前面.
>>> topdir = os.path.normpath(os.path.join(os.path.abspath('/etc/sysconfig/network-scripts/ifcfg-eth0'),os.pardir,os.pardir,os.pardir))
>>> print(topdir)
/etc
>>> sys.path.insert(0,topdir)

sys模塊

sys.argv 命令行參數(shù)List翘紊,第一個(gè)元素是程序本身路徑
sys.exit(n) 退出程序,正常退出時(shí)exit(0)
sys.version 獲取Python解釋程序的版本信息
sys.maxint 最大的Int值
sys.path 返回模塊的搜索路徑藐唠,初始化時(shí)使用PYTHONPATH環(huán)境變量的值
sys.platform 返回操作系統(tǒng)平臺(tái)名稱

打印進(jìn)度條的示例:

>>> print('[%-20s]' %'##')
[##                  ]
# -20 表示寬度,[%-20s]是固定寫法,后面引用字符變量 %'##'

'\r' 表示跳到行首打印

#=========實(shí)現(xiàn)打印進(jìn)度條函數(shù)==========
import sys
import time

def progress(percent,width=50):
    if percent >= 1:
        percent=1
    show_str=('[%%-%ds]' %width) %(int(width*percent)*'#')
    print('\r%s %d%%' %(show_str,int(100*percent)),file=sys.stdout,flush=True,end='')

shutil 模塊

shutil模塊主要是對(duì)文件帆疟,文件夾,和壓縮包進(jìn)行操作處理的模塊宇立,相當(dāng)于系統(tǒng)中常用的文件操作命令踪宠。
shutil.copyfileobj(fsrc, fdst[, length]) :復(fù)制文件,如果目標(biāo)文件存在妈嘹,則覆蓋目標(biāo)文件柳琢。

import shutil
shutil.copyfileobj(open('old.xml', 'r'), open('new.xml', 'w'))

shutil.copyfile(src, dst) 拷貝文件。

shutil.copyfile('new.xml', 'f2.log')

shutil.copymode(src, dst) 僅拷貝權(quán)限润脸。文件的內(nèi)容柬脸,所屬用戶和所屬組都不變。
shutil.copystat(src, dst) 僅拷貝狀態(tài)信息毙驯,包括: mode bits,atime,mtime,flages.
shutil.copy(src,dst) : 拷貝文件和權(quán)限倒堕。

shutil.copy('f2.log','f1.log')

shutil.copy2(src, dst) 拷貝文件和狀態(tài)信息

shutil.copy2('f1.log', 'f2.log')

shutil.copytree(src, dst, symlinks=False, ignore=None) 遞歸的拷貝文件目錄,和shutil.ignore_patterns(*patterns)連用爆价,排除不需要拷貝的內(nèi)容:

shutil.copytree('folder1', 'folder2', ignore=shutil.ignore_patterns('*.pyc', 'tmp*')) 
#目標(biāo)目錄不能存在垦巴,注意對(duì)folder2目錄父級(jí)目錄要有可寫權(quán)限媳搪,ignore的意思是排除 

拷貝軟連接:

import shutil

shutil.copytree('f1', 'f2', symlinks=True, ignore=shutil.ignore_patterns('*.pyc', 'tmp*'))
# 通常的拷貝都把軟連接拷貝成硬鏈接,即對(duì)待軟連接來(lái)說(shuō)骤宣,創(chuàng)建新的文件

shutil.rmtree(path[, ignore_errors[, onerror]])遞歸的刪除文件秦爆。

shutil.rmtree('folder1')

shutil.move(src, dst)遞歸的去移動(dòng)文件,它類似mv 命令憔披,其實(shí)就是重命名等限。

shutil.move('folder1', 'folder3')

shutil.make_archive(base_name, format,...) 創(chuàng)建壓縮包,并返回文件路徑活逆,如 zip,tar精刷。

  • base_name:壓縮包的文件名,也可以是壓縮包的路徑蔗候。只是文件名時(shí)怒允,則保存當(dāng)前至當(dāng)前目錄,否則保存至指定路徑锈遥。如 data_bak =>保存至當(dāng)前路纫事。如:/tmp/data_bak =>保存至/tmp/
  • format:壓縮包種類,“zip”, “tar”, “bztar”所灸,“gztar”
  • root_dir:要壓縮的文件夾路徑(默認(rèn)當(dāng)前目錄)
  • owner:用戶丽惶,默認(rèn)當(dāng)前用戶
  • group: 組,默認(rèn)當(dāng)前組
  • logger:用于記錄日志爬立,通常是logging.Logger對(duì)象

示例:

#將 /data 下的文件打包放置當(dāng)前程序目錄
import shutil
ret = shutil.make_archive("data_bak", 'gztar', root_dir='/data')

#將 /data下的文件打包放置 /tmp/目錄
import shutil
ret = shutil.make_archive("/tmp/data_bak", 'gztar', root_dir='/data') 

shutil 對(duì)壓縮包的處理是調(diào)用 ZipFile 和 TarFile 兩個(gè)模塊來(lái)進(jìn)行的.

json&pickle模塊

把對(duì)象(變量)從內(nèi)存中變成可存儲(chǔ)或傳輸?shù)倪^(guò)程稱之為序列化钾唬,在Python中叫pickling.

  • json: json支持所有通用類型的操作,對(duì)于python特有的功能不支持侠驯,就有很好的跨平臺(tái)性抡秆。
    在使用eval執(zhí)行字符串表達(dá)式是有局限性的,對(duì)于普通的數(shù)據(jù)類型吟策,json.loads和eval都能用儒士,但遇到特殊類型的時(shí)候,eval就不管用了,所以eval的重點(diǎn)還是通常用來(lái)執(zhí)行一個(gè)字符串表達(dá)式檩坚,并返回表達(dá)式的值着撩。
    使用json.dump()可以將字典函數(shù)等類型轉(zhuǎn)換為字符串類型,方便存儲(chǔ):
import  json
dic = {'name': 'alvin', 'age': 23, 'sex': 'male'}
print(type(dic))

j=json.dumps(dic)
print(type(j))
print(j)

輸出:
<class 'dict'>
<class 'str'>
{"name": "alvin", "age": 23, "sex": "male"}

使用json.loads()方式可以將符合json格式的數(shù)據(jù)進(jìn)行序列化:

# 讀取json.txt的文件內(nèi)容為:{"name": "alvin", "age": 23, "sex": "male"}
import  json
with open('json.txt','r') as f2:
    data=json.loads(f2.read())
    print(type(data))
    print(data)

輸出:
<class 'dict'>
{'name': 'alvin', 'age': 23, 'sex': 'male'}

  • pickle: 是python 特有序列化操作匾委,可以序列化函數(shù)等特殊類型拖叙。與json的使用方式類似。
import pickle
def func():
    print('this is func')    
j=pickle.dumps(func)
print(j)

輸出的是bytes類型:
b'\x80\x03c__main__\nfunc\nq\x00.'

反序列化:

import pickle
f=open('序列化對(duì)象_pickle','rb')
data=pickle.loads(f.read())  #  等價(jià)于data=pickle.load(f)
print(data['age'])   

shelve模塊

shelve模塊和pickle功能相近赂乐,但是比pickle模塊簡(jiǎn)單憋沿,只有一個(gè)open函數(shù),返回類似字典的對(duì)象沪猴,可讀可寫;key必須為字符串辐啄,而值可以是python所支持的數(shù)據(jù)類型。

import shelve

f=shelve.open(r'sheve.txt')
# f['stu1_info']={'name':'egon','age':18,'hobby':['piao','smoking','drinking']}
# f['stu2_info']={'name':'gangdan','age':53}
# f['school_info']={'website':'http://www.pypy.org','city':'beijing'}

print(f['stu1_info']['hobby'])
f.close()

xml模塊

xml是程序之間進(jìn)行數(shù)據(jù)交互的協(xié)議运嗜,在有些應(yīng)用中還會(huì)使用XML協(xié)議壶辜。xml和json類似,也是跨平臺(tái)担租,xml協(xié)議在各個(gè)語(yǔ)言中都是支持的砸民。
xml文件是一個(gè)樹(shù)形結(jié)構(gòu)的數(shù)據(jù),python 的xml模塊支持對(duì)xml文件的操作奋救。
xml分為三個(gè)部分:標(biāo)簽(tag)岭参,屬性(attrib),內(nèi)容(text)尝艘。標(biāo)簽一般有多級(jí)標(biāo)簽演侯。

# 獲取xml的根標(biāo)簽
import xml.etree.ElementTree as ET
 
tree = ET.parse("xmltest.xml")
root = tree.getroot()
print(root.tag)

#遍歷xml文檔毡咏, 使用多層循環(huán)烁兰,獲取多層數(shù)據(jù)
for child in root:
    print('========>',child.tag,child.attrib,child.attrib['name'])
    for i in child:
        print(i.tag,i.attrib,i.text)

#只遍歷year 節(jié)點(diǎn)
for node in root.iter('year'):  # root.iter()表示從根節(jié)點(diǎn)開(kāi)始掃描整個(gè)xml
    print(node.tag,node.text)

#修改
for node in root.iter('year'):
    new_year=int(node.text)+1
    node.text=str(new_year)
    node.set('updated','yes')   # tag.set用于設(shè)置屬性
    node.set('version','1.0')
tree.write('test.xml')
 
#刪除node
for country in root.findall('country'): #  tag.findall 只查找tag的下一層乳附。 tag.find只查找tag下一層的一個(gè)符合數(shù)據(jù)呼巴。
   rank = int(country.find('rank').text)
   if rank > 50:
       root.remove(country)
tree.write('output.xml')

在country內(nèi)添加(append)節(jié)點(diǎn)year2

import xml.etree.ElementTree as ET

tree = ET.parse("a.xml")
root=tree.getroot()
for country in root.findall('country'):    # 使用兩層for循環(huán)遍歷整個(gè)標(biāo)簽下的數(shù)據(jù)
    for year in country.findall('year'):  
        if int(year.text) > 2000:               #  標(biāo)簽.text 用于指定標(biāo)簽對(duì)應(yīng)的數(shù)據(jù)項(xiàng)
            year2=ET.Element('year2')     #
            year2.text='新年'
            year2.attrib={'update':'yes'}
            country.append(year2) # 往country節(jié)點(diǎn)下添加子節(jié)點(diǎn)

tree.write('a.xml.swap')

configparser 模塊

在使用mysql或者openstack的配置文件中纹安,通逞辜可以看到如下的配置文件格式:

[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
symbolic-links=0
[mysqld_safe]
log-error=/var/log/mariadb/mariadb.log
pid-file=/var/run/mariadb/mariadb.pid

使用configparser可以很方便的讀寫配置信息的內(nèi)容.

import configparser

config=configparser.ConfigParser()
config.read('my.cnf')
print(config.sections())   # 查看標(biāo)題
print(config.options(config.sections()[0])) # 查看某個(gè)標(biāo)題下的配置項(xiàng)
print(config.get('mysqld','socket')) # 查看某個(gè)標(biāo)題下的某個(gè)配置項(xiàng)的值

輸出:

['mysqld', 'mysqld_safe']
['datadir', 'socket', 'symbolic-links']
/var/lib/mysql/mysql.sock

如果獲取的值中包含數(shù)字和布爾值柿汛,可以使用get的方式直接轉(zhuǎn)換為對(duì)應(yīng)的類型胸嘴。

res1=config.getint('title','conf_option')
res2=config.getfloat('title','conf_option')
res3=config.getboolean('title','conf_option')

修改配置:

config.remove_section('mysqld') # 刪除整個(gè)標(biāo)題區(qū)域
config.remove_option('mysqld_safe','log-error') # 刪除指定title的配置項(xiàng)
config.write(open('my.cnf','w'))  # 寫入文件

添加配置:

config.add_section('client')   # 添加一個(gè)標(biāo)題
config.set('client','socket','/var/run/mysql.sock') # 在client標(biāo)題下添加 socket = /var/run/mysql.sock
config.write(open('my.cnf','w'))  # 寫入文件

hashlib模塊

hash:一種算法 ,3.x里代替了md5模塊和sha模塊盾戴,主要提供 SHA1, SHA224, SHA256, SHA384, SHA512 寄锐,MD5 算法
哈希算法的特點(diǎn):
1.內(nèi)容相同則hash運(yùn)算結(jié)果相同,內(nèi)容稍微改變則hash值則變
2.不可逆推
3.相同算法:無(wú)論校驗(yàn)多長(zhǎng)的數(shù)據(jù)尖啡,得到的哈希值長(zhǎng)度固定橄仆。

對(duì)數(shù)據(jù)進(jìn)行校驗(yàn):

import hashlib
# 相同的內(nèi)容校驗(yàn)結(jié)果一樣
n=hashlib.md5('helloworld'.encode('utf-8'))   # 
print(n.hexdigest())

m=hashlib.md5('hello'.encode('utf-8'))
m.update('world'.encode('utf-8'))
print(m.hexdigest())

輸出:

fc5e038d38a57032085441e7fe7010b0
fc5e038d38a57032085441e7fe7010b0

對(duì)文件進(jìn)行校驗(yàn):

import hashlib
m=hashlib.md5()
with open('my.cnf','rb') as f:
    for line in f:
        m.update(line)
print(m.hexdigest())

# 文件較大時(shí)不推薦使用一次讀取文件的方式
m=hashlib.md5()
with open('my.cnf','rb') as f:
    m.update(f.read())
print(m.hexdigest())

在做加密算法時(shí),通過(guò)撞庫(kù)可以反解密碼可婶,所以一般對(duì)加密算法添加salt進(jìn)行加密:

# 加鹽處理
password='123456'
m=hashlib.md5('add salt code str'.encode('utf-8'))
m.update(password.encode('utf-8'))
print(m.hexdigest())

# 實(shí)際的處理字符串
n=hashlib.md5('add salt code str123456'.encode('utf-8'))
print(n.hexdigest())

輸出的結(jié)果相同:

b7709cddef6897748d66663afdb5a003
b7709cddef6897748d66663afdb5a003

與 hashlib模塊類似的還有一個(gè)hmac模塊,這個(gè)模塊用法和hashlib一樣,但是必須保證首個(gè)字符一樣,才能校驗(yàn)出相同的結(jié)果:

import hmac

h=hmac.new('hello'.encode('utf-8'))
h.update('world'.encode('utf-8'))
print(h.hexdigest())

k=hmac.new('hello'.encode('utf-8'))
k.update('wor'.encode('utf-8'))
k.update('ld'.encode('utf-8'))
print(k.hexdigest())

# 這里輸出和上面兩種結(jié)果不一致
g=hmac.new('hell'.encode('utf-8'))
g.update('oworld'.encode('utf-8'))
print(g.hexdigest())

輸出:

0e2564b7e100f034341ea477c23f283b
0e2564b7e100f034341ea477c23f283b
e705e80d60a2e0851a23dcd1773099ab

suprocess 模塊

suprocess模塊用于調(diào)用系統(tǒng)的shell命令. 執(zhí)行命令之后,可以將命令的執(zhí)行結(jié)果分別通過(guò)管道賦值給標(biāo)準(zhǔn)輸出和錯(cuò)誤輸出:

import subprocess

res=subprocess.Popen(r'ipconfig|findstr 192.168',shell=True,stdout=subprocess.PIPE,stderr=subprocess.PIPE)
print(res.stdout.read().decode('gbk'))
print(res.stderr.read().decode('gbk'))

輸出結(jié)果:

   IPv4 地址 . . . . . . . . . . . . : 192.168.20.191
   默認(rèn)網(wǎng)關(guān). . . . . . . . . . . . . : 192.168.20.254
   IPv4 地址 . . . . . . . . . . . . : 192.168.56.1

如果發(fā)生錯(cuò)誤沿癞,提示信息就會(huì)從stderr中輸出。
在linux平臺(tái)也可以使用相同的用法矛渴。
也可以使用stdin將之前的輸出結(jié)果輸入到當(dāng)前的命令中執(zhí)行椎扬,返回結(jié)果:

import subprocess

res=subprocess.Popen(r'ipconfig',shell=True,stdout=subprocess.PIPE,stderr=subprocess.PIPE)
res1=subprocess.Popen(r'findstr 192.168.20',shell=True,stdin=res.stdout,stdout=subprocess.PIPE,stderr=subprocess.PIPE)
print(res1.stdout.read().decode('gbk'))

輸出結(jié)果:

   IPv4 地址 . . . . . . . . . . . . : 192.168.20.191
   默認(rèn)網(wǎng)關(guān). . . . . . . . . . . . . : 192.168.20.254
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市具温,隨后出現(xiàn)的幾起案子蚕涤,更是在濱河造成了極大的恐慌,老刑警劉巖铣猩,帶你破解...
    沈念sama閱讀 222,681評(píng)論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件揖铜,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡达皿,警方通過(guò)查閱死者的電腦和手機(jī)天吓,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,205評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門贿肩,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人龄寞,你說(shuō)我怎么就攤上這事汰规。” “怎么了物邑?”我有些...
    開(kāi)封第一講書人閱讀 169,421評(píng)論 0 362
  • 文/不壞的土叔 我叫張陵溜哮,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我色解,道長(zhǎng)茂嗓,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書人閱讀 60,114評(píng)論 1 300
  • 正文 為了忘掉前任科阎,我火速辦了婚禮述吸,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘萧恕。我一直安慰自己刚梭,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 69,116評(píng)論 6 398
  • 文/花漫 我一把揭開(kāi)白布票唆。 她就那樣靜靜地躺著朴读,像睡著了一般。 火紅的嫁衣襯著肌膚如雪走趋。 梳的紋絲不亂的頭發(fā)上衅金,一...
    開(kāi)封第一講書人閱讀 52,713評(píng)論 1 312
  • 那天,我揣著相機(jī)與錄音簿煌,去河邊找鬼氮唯。 笑死,一個(gè)胖子當(dāng)著我的面吹牛姨伟,可吹牛的內(nèi)容都是我干的惩琉。 我是一名探鬼主播,決...
    沈念sama閱讀 41,170評(píng)論 3 422
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼夺荒,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼瞒渠!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起技扼,我...
    開(kāi)封第一講書人閱讀 40,116評(píng)論 0 277
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤伍玖,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后剿吻,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體窍箍,經(jīng)...
    沈念sama閱讀 46,651評(píng)論 1 320
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,714評(píng)論 3 342
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了椰棘。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片纺棺。...
    茶點(diǎn)故事閱讀 40,865評(píng)論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖晰搀,靈堂內(nèi)的尸體忽然破棺而出五辽,到底是詐尸還是另有隱情,我是刑警寧澤外恕,帶...
    沈念sama閱讀 36,527評(píng)論 5 351
  • 正文 年R本政府宣布,位于F島的核電站乡翅,受9級(jí)特大地震影響鳞疲,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜蠕蚜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,211評(píng)論 3 336
  • 文/蒙蒙 一尚洽、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧靶累,春花似錦腺毫、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 32,699評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至邪蛔,卻和暖如春急黎,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背侧到。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 33,814評(píng)論 1 274
  • 我被黑心中介騙來(lái)泰國(guó)打工勃教, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人匠抗。 一個(gè)月前我還...
    沈念sama閱讀 49,299評(píng)論 3 379
  • 正文 我出身青樓故源,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親汞贸。 傳聞我的和親對(duì)象是個(gè)殘疾皇子绳军,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,870評(píng)論 2 361

推薦閱讀更多精彩內(nèi)容