当使用bytes.decode("gb2312")
是出现题述问题。
出现这个问题的原因是处理的字符中夹杂特殊字符是gb2312字符集中没有的,因而只需要使用更大一点的字符集GB18030
去解析即可。
另外GB2312,gbk,gb18030字符集大小顺序为:GB2312 < GBK < GB18030
python中将string转换为datetime类型比较简单。只要注意待转换字符串格式要跟正则表达式一致。另外还需要注意年月日的代表字母,比如年是%Y
from datetime import datetime
datetime_object = datetime.strptime('2018-04-26 11:30:00', '%Y-%m-%d %H:%M:%S')
print(type(datetime_object))
输出为:
<class 'datetime.datetime'>
本文介绍如何在ubuntu16.04上安装nvidia显卡驱动以及cuda和cudnn。
其中nividia显卡的版本为最新版本 cuda为9.1版本 cudnn为7.1版本
介绍具体的过程。
添加软件源:
sudo add-apt-repository ppa:graphics-drivers/ppa
sudo apt update
sudo apt install nvidia-current
查看安装信息:
lsmod | grep nvidia
如果需要移除驱动,执行:
sudo apt-get purge nvidia*
如果需要移除软件源,执行:
sudo apt-add-repository --remove ppa:graphics-drivers/ppa
获取安装文件有两种方式: 一种是去管网下载cuda和cudnn。 链接如下:
https://developer.nvidia.com/cuda-downloads
https://developer.nvidia.com/cudnn
第二种这里给出百度网盘的链接:
链接: https://pan.baidu.com/s/12H3yDwr_JCcGi6nuEJ1Ikg 密码: fdkz
安装的方式比较简单,下载了安装包之后直接安装即可:
sudo dpkg -i cuda-repo-ubuntu1604-9-1-local_9.1.85-1_amd64
sudo apt-key add /var/cuda-repo-9-1-local/7fa2af80.pub
sudo apt-get update
sudo apt-get install cuda
sudo dpkg -i libcudnn7_7.1.1.5-1+cuda9.1_amd64.deb
最后,别忘了设置一下环境变量:
export LD_LIBRARY_PATH=/usr/local/cuda/lib
export PATH=$PATH:/usr/local/cuda/bin
Java是半解释型的语言。Java应用程序在JVM中执行。Java程序的执行不像纯解释型语言一样有一个中间的编译步骤。Java不会编译成操作系统在CPU上执行的本地码,而是一种介于两者之间运行在虚拟机上的字节码。让我们来看看源码转换为可执行代码以及程序如何执行。
Java需要把每一个类放在它自己的源文件中(以类名和.java后缀组成)。这个基本的要求使得中型程序被分开在多个分开的源码文件中。当编译源码时,每一个类保存在它自己的文件中。类文件包含了这些字节码。Java编译器跟gcc/c++不同,事实上编译器编译某个类时,它所依赖的其他类将不被同时编译或者修改。这跟make类似,但不是完全类似。在编译好了所有的源文件之后,编译后的类文件的数目会跟源文件数目一样,这些类文件组成了java程序。类加载器会连同字节码验证器,这两个唯一的步骤区分了Java和类C/C++语言。
类加载器负责加载每一个类的字节码。Java给开发者提供了自由去编写自己的类加载器。类加载器可以加载任意位置的类,甚至是网络或者文档。N下面介绍类加载器如何加载一个类。
当JVM需要某个类时,loadClass(String name, boolean resolve);将被调用并传入类名。一旦找到包含这个类的字节码的文件,这个文件将读入类存并传递给defineClass 。如果类加载器没有找到这个类,它将委托父类加载器或者使用findSystemClass 从本地文件系统去加载。Java虚拟机规范对于什么时候进行以及如何进行字节码验证,但是通过简单的测试可以推断出defineClass完成了字节码的验证。验证器通过了4步验证法来验证字节码是否安全。在类验证和加载完成之后,就能够被运行时调用了。
原生的Java字节码允许用户很方便的反编译回源码。对于默认的编译行为,变量和方法都是可以被恢复的。用很多反编译工具,但是免费的做的好的是Jad。
上篇文章简单介绍了Python语言的基本语法,以及如何在IDE编写一个Python程序。
本文将介绍Python中的基本数据类型以及相关的操作。
Python有五个标准的数据类型:
Python中创建变量时不需要声明具体的数据类型,由赋值时确定。比如:
i=1#整形
j=1.0#float型
k='qwer'#字符型
m=[1,2,3,4]#列表
n=(2,1,3)#元组
x={'mm':1}#字典型
数值型有下面几种类型:
示例:
j=10#int
k=1.0#float
m=1+2j#complex,1为实部,2为虚部
n=complex(1,2)#complex,1为实部,2为虚部
注意:长整型也可以使用小写 l,但建议使用大写L,避免与数字1混淆。复数由实数部分和虚数部分构成,可以用 a + bj,或者 complex(a,b) 表示, 复数的实部 a 和虚部 b 都是浮点型。
字符串或串(String)是由数字、字母、下划线组成的一串字符。
一般记为 : s=”a1a2···an”(n>=0),表示文本的数据类型。
python的字串列表有2种取值顺序:
如果要实现从字符串中获取一段子字符串的话,可以使用变量 [头下标:尾下标],就可以截取相应的字符串,其中下标是从 0 开始算起,可以是正数或负数,下标可以为空表示取到头或尾。
比如:
str = 'Hello World!'
print str # 输出完整字符串
print str[0] # 输出字符串中的第一个字符
print str[2:5] # 输出字符串中第三个至第五个之间的字符串
print str[2:] # 输出从第三个字符开始的字符串
print str * 2 # 输出字符串两次
print str + "TEST" # 输出连接的字符串
列表支持字符,数字,字符串甚至可以包含列表(即嵌套)。
列表用 [ ] 标识,是 python 最通用的复合数据类型。
列表中值的切割也可以用到变量 [头下标:尾下标] ,就可以截取相应的列表,从左到右索引默认 0 开始,从右到左索引默认 -1 开始,下标可以为空表示取到头或尾。
加号 + 是列表连接运算符,星号 * 是重复操作。如下实例: 实例(Python 2.0+)
list = [ 'hello', 786 , 2.23, 'world', 70.2 ]
add = [123, 'python']
print list # 输出完整列表
print list[0] # 输出列表的第一个元素
print list[1:3] # 输出第二个至第三个元素
print list[2:] # 输出从第三个开始至列表末尾的所有元素
print tinylist * 2 # 输出列表两次
print list + add # 打印组合的列表
以上实例输出结果:
['hello', 786, 2.23, 'world', 70.2]
hello
[786, 2.23]
[2.23, 'world', 70.2]
[123, 'python', 123, 'python']
['hello', 786, 2.23, 'world', 70.2, 123, 'python']
元组类似于List(列表),用”()”标识。内部元素用逗号,且不能二次赋值,相当于只读列表。
tuple_list = ('hello', 786, 2.23, 'world', 70.2)
add_tuple = (123, 'python')
print(tuple_list) # 输出完整元组
print(tuple_list[0] ) # 输出元组的第一个元素
print(tuple_list[1:3] ) # 输出第二个至第三个的元素
print(tuple_list[2:]) # 输出从第三个开始至列表末尾的所有元素
print(tuple_list * 2) # 输出元组两次
print(tuple_list + add_tuple) # 打印组合的元组
输出为:
hello
(786, 2.23)
(2.23, 'world', 70.2)
('hello', 786, 2.23, 'world', 70.2, 'hello', 786, 2.23, 'world', 70.2)
('hello', 786, 2.23, 'world', 70.2, 123, 'python')
字典(dictionary)是除列表以外python之中最灵活的内置数据结构类型。
列表是有序的对象集合,字典是无序的对象集合。
两者之间的区别在于:字典当中的元素是通过键来存取的,而不是通过偏移存取。 字典用”{ }”标识。字典由索引(key)和它对应的值value组成。
dict = {}
dict['one'] = "This is one"
dict['two'] = "This is two"
namedict = {'name': 'ruben', 'code': 1, 'gender': 'man'}
输出如下:
{'one': 'This is one', 'two': 'This is two'}
{'name': 'ruben', 'code': 1, 'gender': 'man'}
Python提供了基本数据类型之间转换的内置方法:
函数 | 描述 |
---|---|
int(x [,base]) | 将x转换为一个整数 |
long(x [,base] ) | 将x转换为一个长整数 |
float(x) | 将x转换到一个浮点数 |
complex(real [,imag]) | 创建一个复数 |
str(x) | 将对象 x 转换为字符串 |
repr(x) | 将对象 x 转换为表达式字符串 |
eval(str) | 用来计算在字符串中的有效Python表达式,并返回一个对象 |
tuple(s) | 将序列 s 转换为一个元组 |
list(s) | 将序列 s 转换为一个列表 |
set(s) | 转换为可变集合 |
dict(d) | 创建一个字典。d 必须是一个序列 (key,value)元组。 |
frozenset(s) | 转换为不可变集合 |
chr(x) | 将一个整数转换为一个字符 |
unichr(x) | 将一个整数转换为Unicode字符 |
ord(x) | 将一个字符转换为它的整数值 |
hex(x) | 将一个整数转换为一个十六进制字符串 |
oct(x) | 将一个整数转换为一个八进制字符串 |
上篇文章简单介绍了Python语言以及IDE的搭建。
本文将介绍Python的基本语法,以及如何在IDE编写Python程序。
首先打开IDE,然后选择File->New Project
,之后按照下面设置:
点击Create
,选择open in new window
。就创建好了新的项目了。如下所示:
对着项目名右键,选择New->Python File
,在弹出的输入框输入文件名,比如:
然后点击ok
。双击1.hello_world.py
文件,如下图所示:
复制如下代码,然后右键1.hello_world.py
文件,选择Run 1.hello_world
可以看到输出:
word = 'word'
sentence = "这是一个句子。"
paragraph = """这是一个段落。
包含了多个语句"""
# 文件名:1.hello_world.py
# 第一个注释
is_new=True
if is_new:
print("Hello, World!") # 第二个注释
else:
print("I know Python!") # 第三个注释
到这为止就创建和运行了我们的第一个Python项目和第一个Python程序了。下面将介绍Python的基本语法,这些基本的语法是需要牢记的。
在编写实际的代码之前将首先介绍一下Python的基本语法,然后再进行实际的编程。
在 Python里,变量或者保留字段是由字母、数字、下划线组成并区分大小写,开头可以是英文、数字或者下划线(_),但有一点不能以数字开头。
以下划线开头的标识符是有特殊意义的。以单下划线开头 _name 的代表不能直接访问的类属性,需通过类提供的接口进行访问,不能用 from xxx import * 而导入
以双下划线开头的__name
代表类的私有成员;以双下划线开头和结尾的__name__
代表Python 里特殊方法专用的标识,如__init__()
代表类的构造函数。
Python 可以同一行显示多条语句,方法是用分号 ; 分开,如:
print('code1');print('code2'));
和其他编程语言一样,Python也有自己的保留字段。保留字段不能用来定义变量并赋值。 Python中保留字段如下:
and | exec | not |
assert | finally | or |
break | for | pass |
class | from | |
continue | global | raise |
def | if | return |
del | import | try |
elif | in | while |
else | is | with |
except | lambda | yield |
Python中使用print
输出,默认输出是换行的,如果要实现不换行需要在变量末尾加上逗号,
。比如:
print('1')
print('1','2')
在其他语言中,代码分块是通过{}
来实现的,而Python中是通过代码的缩进以及:
来实现的。
比如:
if True:
print("True")
else:
print("False")
这段代码相当于Java中的:
if(1){
System.out.print('True');
}else{
System.out.print('False');
}
代码的分块是由tab
键区分(也可以是任意数量的空格)进行的,可以把{}
理解成用空格代替了。
在编写代码的过程中,如果没有统一的空格进行缩进,那么就会报IndentationError: unexpected indent
错误。当看到这个错误时,就需要检查自己代码中缩进时候统一了。
下面是一个代码缩进的错误例子:
print('1')
print('2')
print('3')
正确的应该是:
print('1')
print('2')
print('3')
Python语句中一般以新行作为为语句的结束符。 但是我们可以使用斜杠( \)将一行的语句分为多行显示,如下所示:
total = item_one + \
item_two + \
item_three
Python 可以使用引号( ‘ )、双引号( “ )、三引号( ‘’’ 或 “”” ) 来表示字符串,引号的开始与结束必须的相同类型的。 其中三引号可以由多行组成,编写多行文本的快捷语法,常用于文档字符串,在文件的特定地点,被当做注释。
word = 'word'
sentence = "这是一个句子。"
paragraph = """这是一个段落。
包含了多个语句"""
python中单行注释采用 #
开头。
# 文件名:1.hello_world.py
# 第一个注释
print("Hello, World!") # 第二个注释
输出结果:
Hello, World!
好了~ 本文介绍了Python的基本语法,并编写和运行第一个Python程序。
下文将介绍Python的基本数据类型。
本文介绍如何在ubuntu下格式化和挂载硬盘。
首先执行df -h
命令查看系统的硬盘找到类似下面形式的盘符:
/dev/sda1 910G 708G 156G 82% /
硬盘在系统中显示为/dev/sda0
或/dev/sdb1
之类。比如上面的就表示/dev/sda0
作为/
跟目录。
然后执行sudo mkfs -t ext4 /dev/sdb
`命令格式化硬盘。
最后挂载:
mkdir ~/data
sudo mount /dev/sdb` ~/data
上述操作将/dev/sdb1
映射到~/data
目录。
入坑Python差不多一年了,一直想把学习经历写下来,但是总是因为懒而迟迟没有开始。
本文作为第一篇作为入门篇,首先将介绍粗略的介绍下python,然后介绍如何将python在Windows中的环境搭建起来(笔者比较喜欢用Ubuntu和sublime)。
相信很多的读者已经了解过Python这门语言,或者已经在这做过一些尝试了。近年来Python越来越火爆,究其原因,笔者认为最大的特点是适合偷懒吧。因为Python 是一个高层次的结合了解释性、互动性和面向对象的脚本语言。
为什么说它高层次呢?举个例子,你的领导说:哎,小刘啊,你过来,我们的APP新增一个功能,大概就是要这样这样,懂了吗?你去实现吧。至于怎么实现领导就完全不管了。
在Python中,你也可以成这样的领导。举个栗子:
比如说需要下载一个网页,在java中会怎么做呢? java中需要依次完成下面的操作:
java中需要正确的完成以上步骤才能下载一个网页。
而在Python只需要下面几行代码:
import requests
response = requests.get(url)
print(response.content)
引入网络模块,给get方法传入url参数,获取网页内容。完毕!
是不是很简单呢?Python是不是让事情简单了很多。
Python的代码看起来就像是人类语言,最大的区别就是没有{}
。python中是使用空格来对齐的,至于空格的个数没有限制,习惯上通过tab
来进行缩进。
比如:
'我是注释'
for i in range(5):
for j in range(6):
print(str(i*j))
上述代码通过使用一个tab
的缩进来使代码分块(Java、cpp等是使用{}
),并且代码块之间通过:
来表示开始新的代码块。
Python 是交互式语言,设置可以通过命令行来写代码。
像图中显示的那种。Python可以直接当做计算器来用,一行输入对应一个输出。
Python 是面向对象语言,这点这里不做过多的解释了~
打开Python的官网下载界面:https://www.python.org/downloads/。
选择python 3.6.4版本,单击既可下载了。
如果你懒得话,这里直接给出了链接。
下载完毕之后,双击打开如下图所示:
选择install now
就好了(也可以自定义,比如选择其他的安装路径)。然后就看到这样的界面:
完成安装之后点击close
.
安装好了之后,按照下面的步骤设置环境变量
C:\Users\Administrator\AppData\Local\Programs\Python\Python36-32;
复制到最前面(如果不是使用默认路径为你的安装路径;
)。本文介绍的IDE是pycharm,打开官网链接之后选择社区版本(或者如果你懒得打开官网,直接右键下载链接另存为)。
下载之后双击,下一步完成安装。
选择Do not import settings
选择accept
:
选择IDE的主题,本文选择的是Darcula
:
选择Create New Project
:
然后就是选择项目的保存地址和python的路径了。参照下图配置。
然后点击Create
,就进入主界面了,是不是跟Android Studio
很像呢?
首先下载项目代码:
git clone git@github.com:lixiang0/baike-spider.git
或者右键另存为。下载之后解压。
在IDE界面选择File->open
打开刚才解压的目录。
双击spider_main.py
,复制如下代码:
print('hello world!')
右键spider_main.py
选择Run spider_main
,如下图所示:
好了~
第一个Python程序就完成了~
下一篇文章继续吧。