python的编码与文件读写

python基础语法

编码与文件读写

编码

  • 编码的本质就是让只认识0和1的计算机,能够理解我们人类使用的语言符号,并且将数据转换为二进制进行存储和传输。
  • 从人类语言到计算机语言转换的形式,就叫做编码表,它让人类语言和计算机语言能够一一对应起来。

二进制

  • 由于有二进制,0和1这两个数字才能像“太极生两仪,两仪生四象,四象生八卦”一样,涵盖容纳世间所有的信息。
类比
  • 现在有两座烽火台,右边为第1座,左边为第2座。我们约定,当没有烽火台被点着的时候,表示没有敌人(00);只点着第一座烽火台的时候,表示来了一个敌人(01);只点着第二座烽火台的时候,表示来了2个敌人。(10,逢二进一)
  • 当两座烽火台都被点着的时候(11),就表示来了3个人。
二进制 - 十进制
00 - 0
01 - 1
10 - 2
11 - 3

两个二进制位可以表示十进制的0,1,2,3四种状态。

  • 继续往下推,当有三座烽火台的时候,我们可以表示0~7八种状态(也就是2的3次方)。
二进制类比
  • 以此类推,当有八座烽火台的时候,我们就能表示2的8次方,也就是256种状态,它由8个0或1组成。
00000000 表示状态0: 烽火全暗,一个敌人没有,平安无事。
11111111 表示状态255:烽火全亮,来了255个敌人。
  • 用来存放一位0或1,就是计算机里最小的存储单位,叫做【位】,也叫【比特】(bit)。我们规定8个比特构成一个【字节】(byte),这是计算机里最常用的单位。
比特与字节
  • bit和byte长得有点像,可别混淆!1 byte = 8 bit,也就是1字节等于8比特。
字节比特换算

  • 百兆宽带,下载速度最多能达到十多兆,是因为运营商的带宽是以(bit/s)比特每秒为单位的,比如100M就是100Mbit/s。
  • 我们常看到的下载速度KB却是以字节每秒(byte/s)为单位显示的,1byte = 8bit,所以运营商说的带宽得先除以8,你的百兆宽带下载速度,也就是十几兆了。

编码表

  • 计算机只识“数”,因此人们必须告诉计算机哪个数字来代表哪个特定字符。
  • 除了0、1这些阿拉伯数字,像a、b、c这样的52个字母(包括大小写),还有一些常用的符号(例如、#、@等)在计算机中存储时也要使用二进制数来表示,而具体用哪些二进制数字表示哪个符号,理论上每个人都可以有自己的一套规则(这就叫编码)。
  • 如果想要互相沟通而不造成混乱,就必须使用相同的编码规则。如果使用了不同的编码规则,那就会彼此读不懂,这就是“乱码”的由来。

编码历史
  • 为了避免乱码,美国首先出台了ASCII编码(读音:/ˈæski/),统一规定了常用符号用哪些二进制数来表示。
  • ==英文字母、数字再加上其他常用符号,也就100来个,因此使用7个比特位(最多表示128位)就够用了,所以一个字节中被剩下的那个比特位就被默认为0。==
  • 再后来,这套编码表传入欧洲,发现这128位不够用啊。比如说法语字母上面还有注音符,这个怎么区分?把最后一个比特位也编进来吧。因此欧洲普遍使用一个全字节(8个比特位)进行编码,最多可表示256位,至此,一个字节就用满了!
  • 前面的状态0-127位可以共用,但从状态128到255这一段的解释就完全乱套了,比如135在法语,希伯来语,俄语编码中完全是不同的符号。
  • 计算机漂洋过海来到中国后,问题又来了,计算机完全不认识博大精深的中文,当然也没法显示中文;而且一个字节的256位都被占满了,但中国有10万多个汉字,256位肯定不够。
  • 中国科学家自力更生,重写了一张编码表,也就是GB2312,它用2个字节,也就是16个比特位,来表示绝大部分(65535个)常用汉字。后来,为了能显示更多的中文,又出台了GBK标准。
  • 不仅中国,其他国家也都搞出自己的一套编码标准。但这样不同地区就无法沟通,日本人发封email给中国人,两边编码表不同,显示的都是乱码。
  • 为了沟通的便利,Unicode(万国码)应运而生,这套编码表将世界上所有的符号都纳入其中。每个符号都有一个独一无二的编码,现在Unicode可以容纳100多万个符号,所有语言都可以互通,一个网页上也可以显示多国语言。
  • 但仍然存在问题,自从英文世界用了Unicode,为迁就一些占用字节比较多的语言,英文也要跟着占两个字节。比如要存储A,原本00010001就可以了,现在偏得用两个字节:00000000 00010001才行,这样对计算机空间存储是种极大的浪费!
  • 基于这个痛点,科学家们又提出了天才的想法:UTF-8(8-bit Unicode Transformation Format)。它是一种针对Unicode的可变长度字符编码,它可以使用1~4个字节表示一个符号,根据不同的符号而变化字节长度,而当字符在ASCII码的范围时,就用一个字节表示,所以UTF-8还可以兼容ASCII编码。
  • Unicode与UTF-8这种暧昧的关系一言以蔽之:==Unicode是内存编码的规范,而UTF-8是如何保存和传输Unicode的手段。==
编码史
  • 这些编码表就是计算机世界的字典辞书,它们同样也是人类智慧的结晶。

八进制与十六进制
  • 因为二进制是由一堆0和1构成的,过长的数字对于人的阅读有很大障碍,为了解决这一问题,也减少书写的复杂性,我们又引入了八进制和十六进制。
  • 2、8、16,分别是2的1次方、3次方、4次方。这一点使得三种进制之间可以非常直接地互相转换。
  • 8进制是用0,1,2,3,4,5,6,7;16进制是用0,1,2,3,4,5,6,7,8,9,a,b,c,d,e,f来表示。比如说,字母K在ASCII编码表用不同进制表示(并不需要知道具体的转换规则)
字母K不同进制
几种编码方案在当前的使用情况
  • 计算机是有自己的工作区的,这个工作区被称为“内存”。数据在内存当中处理时,使用的格式是Unicode,统一标准。
计算机内存
  • 在Python3当中,程序处理我们输入的字符串,是默认使用Unicode编码的,所以什么语言都可以输入。
  • 数据在硬盘上存储,或者是在网络上传输时,用的是UTF-8,因为节省空间。但你不必操心如何转换UTF-8和Unicode,当我们点击保存的时候,程序已经“默默地”帮我们做好了编码工作。
  • 一些中文的文件和中文网站,还在使用GBK,和GB2312。
  • 基于此,有时候面对不同编码的数据,我们要进行一些操作来实现转换。即解码和编码。

encode()和decode()

  • 编码,即将人类语言转换为计算机语言,就是【编码】encode();反之,就是【解码】decode()。
解码和编码的使用
print('八站'.encode('utf-8'))
print('八站'.encode('gbk'))
print(b'\xe5\x85\xab\xe7\xab\x99'.decode('utf-8'))
print(b'\xb0\xcb\xd5\xbe'.decode('gbk'))
'''
b'\xe5\x85\xab\xe7\xab\x99'
b'\xb0\xcb\xd5\xbe'
八站
八站
[Finished in 0.2s]
'''
  • 将人类语言编码后得到的结果,有一个相同之处,就是最前面都有一个字母b,比如b'\xce\xe2\xb7\xe3',这代表它是bytes(字节)类型的数据。我们可以用type()函数验证一下
print(type('八站'))
print(type(b'\xb0\xcb\xd5\xbe')) 
'''
<class 'str'>
<class 'bytes'>
'''
  • 所谓的编码,其实本质就是把str(字符串)类型的数据,利用不同的编码表,转换成bytes(字节)类型的数据。

  • 字符和字节概念: 字符是人们使用的记号,一个抽象的符号,这些都是字符:'1', '中', 'a', '$', '¥' 。
  • 字节则是计算机中存储数据的单元,一个8位的二进制数。
  • 编码结果中除了标志性的字母b,你还会在编码结果中看到许多\x,你再观察一下这个例子:b'\xce\xe2\xb7\xe3'。
  • \x是分隔符,用来分隔一个字节和另一个字节。
  • 分隔符很常见,经常会看到网址里面有好多的%,它们也是分隔符,替换了Python中的\x
\xe5\x90\xb4\xe6\x9e\xab  # Python编码的结果
%E5%90%B4%E6%9E%AB # 网址里的结果
# UTF-8编码结果和这一串网址的差异,其实它们除了分隔符以外,是一模一样的。
  • 用decode()解码的时候则要注意,UTF-8编码的字节就一定要用UTF-8的规则解码,其他编码同理,否则就会出现乱码或者报错的情况
print(b'\xe6\x88\x91\xe7\x88\xb1\xe4\xbd\xa0'.decode('utf-8'))
# 我爱你
  • ASCII编码,它不支持中文,所以我们来转换一个大写英文字母K。
print('K'.encode('ASCII'))
# b'K'
  • 看到大写字母K被编码后还是K,但这两个K对计算机来说意义是不同的。前者是字符串,采用系统默认的Unicode编码,占两个字节(byte)。后者则是bytes类型的数据,只占一个字节。

文件读写

  • 文件读写,是Python代码调用电脑文件的主要功能,能被用于读取和写入文本记录、音频片段、Excel文档、保存邮件以及任何保存在电脑上的东西。
  • 当你要从网上下载几千条数据时,直接用Python帮你把数据一次性存入文件也是相当方便。
  • Python能把我们从重复性工作中解放出来

读写文件

  • 读文件有三步:打开文件——读文件——关闭文件。
打开文件
  • 【第1步-开】使用open()函数打开文件。
file1 = open('/Users/Ted/Desktop/test/abc.txt','r',encoding='utf-8') 
  • file1这个变量是存放读取的文件数据的,以便对文件进行下一步的操作。
  • open()函数里面有三个参数
'/Users/Ted/Desktop/test/abc.txt'
'r'
encoding='utf-8'
  • 第一个参数是文件的保存地址,一定要写清楚,否则计算机找不到。
    • 要找到你的文件地址,只需要把你要打开的文件直接拖到编辑器终端的窗口里,就会显示出文件地址,然后复制一下就好。
    • 文件的地址有两种:相对路径和绝对路径,拖到终端获取的地址是绝对路径。这两种地址,Mac和Windows电脑还有点不太一样
  • 绝对路径就是最完整的路径,相对路径指的就是【相对于当前文件夹】的路径,也就是你编写的这个py文件所放的文件夹路径!
  • 如果你要打开的文件和open.py在同一个文件夹里,这时只要使用相对路径就行了,而要使用其他文件夹的文件则需使用绝对路径。

  • Mac电脑
open('/Users/Ted/Desktop/test/abc.txt')   #绝对路径
open('abc.txt')    #相对路径
#相对路径也可以写成open('./abc.txt')
#在这种情况下,写绝对和相对路径都是可以的。
  • 假如现在这个txt文件,是放在test文件夹下面一个叫做word的文件夹里,绝对路径和相对路径就变成:
open('/Users/Ted/Desktop/test/word/abc.txt'')
open('word/abc.txt')
  • windows电脑
    Windows系统里,常用\来表示绝对路径,/来表示相对路径。所以当把文件拖入终端的时候,==绝对路径==就变成
C:\Users\Ted\Desktop\test\abc.txt
  • 但是\在Python中是转义字符,所以时常会有冲突。为了避坑,Windows的==绝对路径==通常要稍作处理,写成以下两种格式;
open('C:\\Users\\Ted\\Desktop\\test\\abc.txt')
#将'\'替换成'\\'

open(r'C:\Users\Ted\Desktop\test\abc.txt')
#在路径前加上字母r

file1 = open('/Users/Ted/Desktop/test/abc.txt','r',encoding='utf-8')
  • 第二个参数表示打开文件时的模式。这里是字符串 'r',表示 read,表示我们以读的模式打开了这个文件。
  • 计算机非常注意数据的保密性,在打开时就要决定以什么模式打开文件。
  • 除了'r',其他还有'w'(写入),'a'(追加)等模式

  • 第三个参数encoding='utf-8',表示的是返回的数据采用何种编码,一般采用utf-8或者gbk。注意这里是写encoding而不是encode。
读文件

打开文件file1之后,就可以用read()函数进行读取的操作了。

file1 = open('/Users/Ted/Desktop/test/abc.txt', 'r',encoding='utf-8') 
filecontent = file1.read()   
  • 第1行代码是我们之前写的。是以读取的方式打开了文件“abc.txt”。
  • 第2行代码就是在读取file1的内容,写法是变量file1后面加个.句点,再加个read(),并且把读到的内容放在变量filecontent里面,这样我们才能拿到文件的内容。
  • 想要看看读到了什么数据,可以用print()函数看看。
file1 = open('C:\\Users\\bazhan\\Desktop\\python_Summary\\12\\test.txt','r',encoding='utf-8') 
content = file1.read()
print(content)
  • 结果会打印出了.txt文件里面的内容,它会读成字符串的数据形式。
关闭文件
  • 关闭文件,使用的是close()函数
file1 = open('C:\\Users\\bazhan\\Desktop\\python_Summary\\12\\test.txt','r',encoding='utf-8') 
content = file1.read()
print(content)
file1.close()#括号不能丢   
  • 为啥要关闭文件?
    • 计算机能够打开的文件数量是有限制的,open()过多而不close()的话,就不能再打开文件了
    • 能保证写入的内容已经在文件里被保存好了。
    • 文件关闭之后就不能再对这个文件进行读写了。如果还需要读写这个文件的话,就要再次 open() 打开这个文件。

读文件总结

写入文件

  • 写文件也是三步:打开文件——写入文件——关闭文件。

【第1步-开】以写入的模式打开文件。

file1 = open('/Users/Ted/Desktop/test/abc.txt','w',encoding='utf-8') 
  • 以写入的模式打开了文件"abc.txt"。
  • open() 中还是三个参数,其他都一样,除了要把第二个参数改成'w',表示write,即以写入的模式打开文件。

【第2步-写】往文件中写入内容,使用write()函数。

file1 = open('/Users/Ted/Desktop/test/abc.txt', 'w',encoding='utf-8') 
file1.write('张无忌\n')     
file1.write('宋青书\n')  
  • 第2-3行代码:往“abc.txt”文件中写入了“张无忌”和“宋青书”这两个字符串。\n表示另起一行。
  • 原来文件内容会消失,'w'写入模式会给你暴力清空掉文件,然后再给你写入。如果你只想增加东西,而不想完全覆盖掉原文件的话,就要使用'a'模式,表示append
file1 = open('/Users/Ted/Desktop/test/abc.txt', 'a',encoding='utf-8') 
#以追加的方式打开文件abc.txt
file1.write('张无忌\n')     
#把字符串'张无忌'写入文件file1
file1.write('宋青书\n')     
#把字符串'宋青书'写入文件file1

【第3步-关】还是要记得关闭文件,使用close()函数

file1 = open('/Users/Ted/Desktop/test/abc.txt','a',encoding='utf-8') 
file1.write('张无忌\n')     
file1.write('宋青书\n')     
file1.close() 
  • 说明
    • write()函数写入文本文件的也是字符串类型。
    • 在'w'和'a'模式下,如果你打开的文件不存在,那么open()函数会自动帮你创建一个

  • 如果我们想写入的数据不是文本内容,而是音频和图片的话,该怎么做
open()函数
  • 'wb'模式,它的意思是以二进制的方式打开一个文件用于写入。因为图片和音频是以二进制的形式保存的,所以使用wb模式就好了
  • 补充一个用法,为了避免打开文件后忘记关闭,占用资源或当不能确定关闭文件的恰当时机的时候,我们可以用到关键字with
# 普通写法
file1 = open('abc.txt','a') 
file1.write('张无忌') 
file1.close()

# 使用with关键字的写法
with open('abc.txt','a') as file1:
#with open('文件地址','读写模式') as 变量名:
    #格式:冒号不能丢
    file1.write('张无忌') 
    #格式:对文件的操作要缩进
    #格式:无需用close()关闭

小练习

统计这四个学生的作业的总得分,然后再写入一个txt文件

罗恩 23 35 44
哈利 60 77 68 88 90
赫敏 97 99 89 91 95 90
马尔福 100 85 90
  • 补充
    • readlines(),也就是“按行读取”
file1 = open('.//scores.txt','r',encoding='utf-8') # 打开
file_lines = file1.readlines()# 按行读取      
file1.close()
print(file_lines)
'''
['罗恩 23 35 44\n', '哈利 60 77 68 88 90\n', '赫敏 97 99 89 91 95 90\n', '马尔福 100 85 90']
'''

  • readlines() 会从txt文件取得一个列表,列表中的每个字符串就是scores.txt中的每一行。而且每个字符串后面还有换行的\n符号。
  • 这样一来,我们就可以使用for循环来遍历这个列表,然后处理列表中的数据
file1 = open('.\\scores.txt','r',encoding='utf-8') 
file_lines = file1.readlines()
file1.close()

for i in file_lines:    #用for...in...把每一行的数据遍历
    print(i)            #打印变量i
  • 接下来把每一行的名字、分数也分开,这时需要我们使用split()来把字符串分开,它会按空格把字符串里面的内容分开。
  • 罗恩 23 35 44,它将被分为['罗恩', '23', '35', '44']。
  • split()把每一行的内容分成了一个个的字符串,于是变成了一个个列表。
file1 = open('.\\scores.txt','r',encoding='utf-8') 
file_lines = file1.readlines()
file1.close()

for i in file_lines:   #用for...in...把每一行的数据遍历  
    data =i.split()    #把字符串切分成更细的一个个的字符串
    print(data)        #打印出来看看

    • split()是把字符串分割的,而还有一个join()函数,是把字符串合并的。
a=['c','a','t']
b=''
print(b.join(a))
c='-'
print(c.join(a))
#join()的用法是str.join(sequence),str代表在这些字符串之中,你要用什么字符串连接,在这里两个例子,一个是空字符串,一个是横杠,sequence代表数据序列,在这里是列表a。

  • 4个列表的第0个数据是姓名,之后的就是成绩。我们需要先统计各人的总成绩,然后把姓名和成绩放在一起。
#可以用for...in...循环进行加法的操作
file1 = open(r'C:\Users\silin\Desktop\python_Summary\12\scores.txt','r',encoding='utf-8') 
file_lines = file1.readlines()
file1.close()

for i in file_lines:
    data =i.split()    
    sum = 0                    #先把总成绩设为0
    for score in data[1:]:     #遍历列表中第1个数据和之后的数据
        sum = sum + int(score) #然后依次加起来,但分数是字符串,所以要转换    
    result = data[0]+str(sum)  #结果就是学生姓名和总分
    print(result)
  • 接下来就是把成绩写入一个空的列表,因为这样才有助于我们之后写入一个txt文件。
file = open(r'C:\Users\silin\Desktop\python_Summary\12\scores.txt','r',encoding='utf-8') 
file_lines = file.readlines()
file.close()

final_scores = [] 

for i in file_lines:
    data =i.split()    
    sum = 0                    
    for score in data[1:]:     
        sum = sum + int(score)     
    result = data[0]+str(sum)+'\n'    
    final_scores.append(result)

winner = open(r'C:\Users\silin\Desktop\python_Summary\12\scores.txt','w',encoding='utf-8') 
winner.writelines(final_scores)
winner.close()

练习

通过文件读写,复制图片

with open('photo2.png','rb') as file:  # 以“rb”模式打开图片
    data = file.read()
    with open('photo3.png','wb') as newfile:  # 以“wb”模式写入
        newfile.write(data)

在读写之间处理数据-1

# 下面注释掉的代码,皆为检验代码(验证每一步的思路和代码是否达到目标,可解除注释后运行)。

file1 = open('winner.txt','r',encoding='utf-8') 
file_lines = file1.readlines() 
file1.close()

dict_scores = {}
list_scores = []
final_scores = []

# print(file_lines) 
# print(len('\n'))

# 打印结果为:['罗恩102\n', '哈利383\n', '赫敏570\n', '马尔福275\n']
# 经过测试,发现'\n'的长度是1。所以,名字是“第0位-倒数第5位”,分数是“倒数第4位-倒数第二位”。
# 再根据“左取右不取”,可知:name-[:-4],score-[-4:-1]

for i in file_lines:  # i是字符串。
    print(i)
    name = i[:-4]  # 取出名字(注:字符串和列表一样,是通过偏移量来获取内部数据。)
    score = int(i[-4:-1])  # 取出成绩
    print(name)
    print(score)
    dict_scores[score] = name  # 将名字和成绩对应存为字典的键值对(注意:这里的成绩是键)
    list_scores.append(score)

# print(list_scores)
list_scores.sort(reverse=True)  # reverse,逆行,所以这时列表降序排列,分数从高到低。
# print(list_scores)

for i in list_scores:
    result = dict_scores[i] + str(i) + '\n'
    # print(result)
    final_scores.append(result)

print(final_scores)  # 最终结果

winner_new = open('winner_new.txt','w',encoding='utf-8') 
winner_new.writelines(final_scores)
winner_new.close()

练习

我们以李商隐的《锦瑟》为例,这是原文档里的内容:

锦瑟
[唐] 李商隐

锦瑟无端五十弦,
一弦一柱思华年。
庄生晓梦迷蝴蝶,
望帝春心托杜鹃。
沧海月明珠有泪,
蓝田日暖玉生烟。
此情可待成追忆,
只是当时已惘然。

老师在这首诗想考学生“一弦一柱思华年。”和“只是当时已惘然。”,即他想得到的是:

锦瑟
[唐] 李商隐

锦瑟无端五十弦,
__。
庄生晓梦迷蝴蝶,
望帝春心托杜鹃。
沧海月明珠有泪,
蓝田日暖玉生烟。
此情可待成追忆,
__。
list_test = ['一弦一柱思华年。\n','只是当时已惘然。\n']  # 将要默写的诗句放在列表里。
with open ('poem2.txt','r') as f:
    lines = f.readlines()
print(lines)
with open('poem2.txt','w') as new:
    for line in lines:
        if line in list_test:  # 属于默写列表中的句子,将其替换成横线。
            new.write('____________。\n')
        else:
            new.write(line)
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 205,033评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,725评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,473评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,846评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,848评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,691评论 1 282
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,053评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,700评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 42,856评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,676评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,787评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,430评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,034评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,990评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,218评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,174评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,526评论 2 343