1.
print( )
print(*objects, sep=' ', end='\n', file=sys.stdout)
>>>print('Hello', end='')
>>>print('World')
HelloWorld
2. 控制流
2.1、and操作符真值表:
True and True True
True and False False
False and True False
False and False False
or操作符真值表:
True or True True
True or False True
False or True True
False or False False
not操作符真值表:
not True False
not False True
Python 先求值 not 操作符,然后是 and 操作符,然后是 or 操作符。
2.2、range(start, end, scan)
start:
计数从start开始。默认是从0开始。
end:
计数到end结束,但不包括end。
scan:
每次跳跃的间距,默认为1。
2.3、sys.exit()提前结束程序
3. 函数
3.1、自定义函数def:
def function_name(parameters):
expressions
3.2、返回值和return语句:
return 关键字
返回值只有打印才会显示出来。对于无返回值的函数,将默认返回None。
补充:random.randint( )
生成一个指定范围内的整数。其中参数a是下限,参数b是上限,生成的随机数[a,b]。
3.3、global
声明变量作用域,python如果想使用作用域之外的全局变量,则需要加global前缀。在局部不仅可以使用全局变量还可以修改全局变量。
4. 列表(可变数据)
4.1、列表list
['a', 'b', 'c']
列表索引从0开始。
切片索引坐标,[a,b)
del
spam[0]删除列表数据
4.2、增强赋值操作
spam += 1 spam = spam + 1
spam -= 1 spam = spam - 1
spam *= 1 spam = spam * 1
spam /= 1 spam = spam / 1
spam %= 1 spam = spam % 1
4.3、列表方法
.index( ): 传入一个值,如果该值存在于列表中,就返回它的下标。
.append( ): 将参数添加到列表末尾
.extend(lst): 向列表中添加序列。将序列的元素依次添加到列表的最后
.insert( ): 第一个参数是新值的下标,第二个参数是要插入的新值。
.remove(): 传入一个值,它将从被调用的列表中删除。如果该值在列表中出现多次,只有第一次出现
的值会被删除。
.pop(idx) : 会将索引 idx 处的元素删除,并返回这个元素。
.sort(): 排序
.sorted(): 不会改变原来的list,而是会返回一个新的已经排序好的list
.reverse() : 会将列表中的元素从后向前排列。
注意:
1、当场排序,sort()方法当场对列表排序。不要写出spam = spam.sort()
这样的代码,试图记录返回值。
2、不能对既有数字又有字符串值的列表排序
3、按照sort()方法对字符串排序时, 使用“ASCII 字符顺序”, 而不是实际的字典顺序。这意味着大写字母排
在小写字母之前。
注意:对于可变对象,对象的操作不会重建对象,而对于不可变对象,每一次操作就重建新的对象。
4.4、列表推导式
[表达式 for 变量 in 列表]
4.5、元组tuple(不可变数据)
('hello', 42, 0.5) ('hello',)
元组和列表的区别:
1.元组是圆括号。
2.元组哪怕只有一个元素,也要在元素后面加上逗号。
3.元组是不可变的数据类型。
5. 字典(可变数据类型)
5.1、字典:
>>> myCat = {'size': 'fat', 'color': 'gray', 'disposition': 'loud'}
5.2、方法:
dict.keys( ): 返回一个包含字典中键的列表
dict.values( ): 返回一个包含字典中所有值的列表
dict.items( ): 返回一个包含字典中(键, 值)对元组的列表
这些方法返回的值不是真正的列表,它们不能被修改,没有append()方法。但这些
数据类型(分别是 dict_keys、dict_values 和 dict_items )可以用于for
循环。
del a["key"]: 删除字典中特定的键值对
d.update(newd): 将字典newd中的内容更新到d中去。
>>person = {}
person['first'] = "Jmes"
person['last'] = "Maxwell"
person['born'] = 1831
>>print person
{'born': 1831, 'last': 'Maxwell', 'first': 'Jmes'}
把'first'改成'James',同时插入'middle'的值'Clerk':
>>person_modifications = {'first': 'James', 'middle': 'Clerk'}
person.update(person_modifications)
>>print person
{'middle': 'Clerk', 'born': 1831, 'last': 'Maxwell', 'first': 'James'}
.get(key1, defaults=None): 返回指定键的值,如果键不在字典中,默认无
返回值。
d.pop(key, default = None): 删除并返回字典中键 key 对应的值,如果没有这个键,
返回 default 指定的值(默认是 None )。
.setdefault(para1,para2): 传递给该方法的第一个参数,是要检查的键。第二个参数,是如果
该键不存在时要设置的值。如果该键确实存在,方法就会返回键的值。
5.3、漂亮打印:
pprint模块
.pprint( )
.pformat( )不显示出来。
6. 字符串(不可变数据类型,只是返回一个新字符串,并不改变原来的值)
6.1、处理字符串:
转义字符(\
倒斜杠)
\'
单引号
\"
双引号
\t
制表符
\n
换行符
\\
倒斜杠
原始字符串:r
在Python的string前面加上‘r’, 是为了告诉编译器这个string是个raw string,不要转意backslash '' 。 例如,\n 在raw string中,是两个字符,\和n, 而不会转意为换行符。由于正则表达式和 \ 会有冲突,因此,当一个字符串使用了正则表达式后,最好在前面加上'r'。
字符串切片:计数从0开始,区间左闭右开。
三重引号的多行字符串:1.三重引号之间所有引号、制表符或换行,都被认为是字符串的一部分。
6.2.多行字符换
Python 用一对 """ 或者 ''' 来生成多行字符串:
a = """hello world.
it is a nice day."""
print a
hello world.
it is a nice day.
6.3、字符串方法:
s.upper(): 将s中的所有字母都被相应的转换为大写
s.lower(): 将s中的所有字母都被相应的转换为小写
以上这两种方法不会改变原来s的值
s.join(): 有一个字符串列表,以s为连接符将它们连接起来。返回一个字符串,
其字符串序列的元素已通过str分隔符连接。
>> ','.join(['cats', 'rats', 'bats'])
'cats, rats, bats'
s.split(sep): 通过指定分隔符(默认为所有的空字符,包括空格、换行(\n)、制表符(\t)等.)
对字符串s进行切片,返回分割后的字符串列表。
s.strip(): 返回一个将s两端的多余空格除去的新字符串,若添加参数则去掉参数。
s.lstrip(): 返回一个将s开头的多余空格除去的新字符串。
s.rstrip(): 返回一个将s结尾的多余空格除去的新字符串。
s的值不会变化
s.replace(part1, part2): 将字符串s中指定的部分part1替换成想要的部分part2,并返回新的字符串。
此时,s的值并没有变化,替换方法只是生成了一个新的字符串。
.rjust(width [,fillchar]:返回调用它们的字符串的填充版本,默认通过插入空格来对齐文本。
.ljust(width [,fillchar]:
.center(width [,fillchar]:
.startswith( ): 方法返回 True,如果它们所调用的字符串以该方法传入的字符串开始。
否则,方法返回 False。
.endswith( ): 方法返回 True,如果它们所调用的字符串以该方法传入的字符串结束。
否则,方法返回 False。
.rstrip( ): 删除右边的空白符
.lstrip( ): 删除左边的空白符
.isupper( ): 如果字符串至少有一个字母,并且所有字母都是大写
.islower( ): 如果字符串至少有一个字母,并且所有字母都是小写
.isalpha( ): 返回 True,如果字符串只包含字母,并且非空
.isalnum( ): 返回 True,如果字符串只包含字母和数字,并且非空;
.isdecimal( ): 返回 True,如果字符串只包含数字字符,并且非空;
.isspace( ): 返回 True,如果字符串只包含空格、制表符和换行,并且非空;
.istitle( ): 返回 True,如果字符串仅包含以大写字母开头、后面都是小写字母的单词。
6.4、pyperclip模块 拷贝粘贴字符串
pyperclip.copy( ):向计算机的剪贴板发送文本
pyperclip.paste( ):从计算机的剪贴板接收文本
6.5、使用 () 或者 \ 来换行
a = ("hello, world. "
"it's a nice day. "
"my name is xxx")
a
"hello, world. it's a nice day. my name is xxx"
a = "hello, world. " \
"it's a nice day. " \
"my name is xxx"
a
"hello, world. it's a nice day. my name is xxx"
6.6、格式化字符串
Python用字符串的format()方法来格式化字符串。
具体用法如下,字符串中花括号 {}
的部分会被format
传入的参数替代,传入的值可以是字符串,也可以是数字或者别的对象。
>>'{} {} {}'.format('a', 'b', 'c')
>>'a b c'
可以用数字指定传入参数的相对位置:
>>'{2} {1} {0}'.format('a', 'b', 'c')
>>'c b a'
还可以指定传入参数的名称:
>>'{color} {n} {x}'.format(n=10, x=1.5, color='blue')
>>'blue 10 1.5'
也可以使用旧式的%
方法进行格式化:
>>s = "some numbers:"
x = 1.34
y = 2
# 用百分号隔开,括号括起来
>>t = "%s %f, %d" % (s, x, y)
>>'some numbers: 1.340000, 2'
第7章 正则表达式
7.1、Regex正则表达式--re模块
创建正则表达式:
re.compile( ):它将返回一个 Regex 模式对象(或者就简称为 Regex 对象)。
Regex对象的方法:
.search( ): 查找传入的字符串,寻找该正则表达式的所有匹配,直到找到一个匹配。
用该对象的方法.group( )返回匹配文本。
.findall( ): 将返回一组字符串,包含被查找字符串中的所有匹配。如果正则表达式里无分组,
返回字符串列表;否则,返回字符串元组。
7.2、正则表达式匹配更多模式:
括号分组:(\d\d\d)-(\d\d\d-\d\d\d\d)
,在计分组的时候,每遇到一个左括号计数加1。
.group(number):
获取一个分组中匹配的文本。传入0或者不传入参数,将返回整个匹配的文本。
.groups()
返回所有括号匹配的字符,以tuple格式。
用管道匹配多个分组:
'|'
,'或':返回第一次匹配的文本。
'?':
实现可选匹配。表明它前面的分组在这个模式中是可选的。
'*':
匹配零次或多次。即星号之前的分组,可以在文本中出现任意次。
'+':
意味着匹配一次或多次。加号前面的分组必须至少出现一次。
’{number1[,number2]}':
匹配特定次数。一个分组重复特定次数,就在正则表达式中该分组的后面,跟上花括号包围的数字。
Python 的正则表达式默认是贪心的,这表示在有二义的情况下,它们会尽可能匹配最长的字符串。花括号的非贪心版本匹配尽可能最短的字符串,即在结束的花括号后跟着一个问号。
7.3、字符分类
\d 0 到 9 的任何数字
\D 除 0 到 9 的数字以外的任何字符
\w 任何字母、数字或下划线字符(可以认为是匹配“单词”字符)
\W 除字母、数字和下划线以外的任何字符
\s 空格、制表符或换行符(可以认为是匹配空白字符)
\S 除空格、制表符和换行符以外的任何字符
7.4、建立自己的字符
1、用方括号定义自己的字符串。
2、可以用短横线表示字母和数字的范围。
3、方括号内,普通正则表达式符号不会被解释。无需在前面加转义字符。
4、在字符分类的左方括号后加上一个插入字符'^',得到非字符类。
7.5、正则表达式操作
插入字符'^',和美元字符 '$'
'^':在正则表达式的开始处使用插入符号(^),表明匹配必须发生在被查找文本开始处。
'$':表明匹配必须发生在被查找文本结束处。
如果使用了^和$,那么整个字符串必须匹配该正则表达式。
.(通配字符句点): 匹配除了换行之外的所有字符。只匹配一个字符。
.* : 匹配除了换行之外的所有字符串。默认贪心模式,匹配尽可能多的文本。
.*?: 非贪心模式
re.compile('.*',re.DOTALL): 句点匹配包括换行符在内的所有字符。
re.compile('.*',re.IGNORECASE或re.I ): 忽略大小写。
re.compile('.*'re.VERBOSE): 略正则表达式字符串中的空白符和注释。
7.6、sub()方法替换字符串
第一个参数是一个字符串,用于取代发现的匹配。第二个参数是一个字符串。sub()
方法返回替换完成后的字符串。
>> namesRegex = re.compile(r'Agent \w+')
>> namesRegex.sub('CENSORED', 'Agent Alice gave the secret documents to Agent Bob.')
'CENSORED gave the secret documents to CENSORED.'
在sub()的第一个参数中,可以输入\1、\2、\3...。表示在替换中输入分组1、2、3...的文本”。
>> agentNamesRegex = re.compile(r'Agent (\w)\w*')
>> agentNamesRegex.sub(r'\1****', 'Agent Alice told Agent Carol that Agent
Eve knew Agent Bob was a double agent.')
A**** told C**** that E**** knew B**** was a double agent.'
8 OS
os.getcwd( ): 返回当前工作目录。
os.chdir( ): 改变当前工作目录。
os.makedirs( ):创建新文件夹。
os.listdir(path): 将返回路径下文件名字符串的列表。
os.rename(src,dst) src -- 要修改的目录名;dst -- 修改后的目录名
os.path.join: 将多个路径组合后返回,第一个以/开头的参数开
始拼接,之前的参数全部丢弃。以上情况为先,在上一种情况确保情况下,若出现”./”开头的参数,
会从”./”开头的参数的上一个参数开始拼接。
os.path.abspath(path): 将返回参数的绝对路径的字符串
os.path.isabs(path): 判断路径是否为绝对路径。
os.path.relpath(path): 将返回路径的字符串。
os.path.dirname(path): 将返回一个字符串,它包含 path 最后一个斜杠之前的所有内容。
os.path.basename(path): 将返回一个字符串,它包含 path 最后一个斜杠之后的所有内容。
os.path.split( ): 将path分割成目录和文件名二元组返回。
os.path.getsize(path): 将返回 path 参数中文件的字节数。
os.path.exists(path): 如果 path 参数所指的文件或文件夹存在,将返回 True否则返回False。
os.path.isfile(path): 如果 path 参数存在,并且是一个文件将返回True,否则返回False。
os.path.isdir(path): 如果 path 参数存在,并且是一个文件夹,将返回 True否则返回False。
读模式
open( ): 函数返回一个 File 对象。
.read()方法: 将整个文件的内容读取为一个字符串值。
.readlines()方法: 从该文件取得一个字符串的列表。列表中的每个
字符串就是文本中的每一行。
写模式
.open( ,w): 如果传递给 open()的文件名不存在,写模式和添加模式都会创建一个新
的空文件。在读取或写入文件后,调用 close()方法,然后才能再次打开该文件。
.write( ): 写入字符串。
.close( ): 关闭文件。
删除文件
import os
os.remove()
9
9.1、shutil模块
shutil.copy(source,destination): 将路径 source 处的文件复制到路径 destination处的文件夹
(source 和 destination都是字符串)。如果 destination
是一个文件名,它将作为被复制文件的
新名字。该函数返回一个字符串,表示被复制文件的路径。
shutil.copytree(source,destination): .............文件夹........目的地若是没有输入的
文件名,将会自动创建一个。
shutil.move(soure,destination): 将路径source处的文件夹移动到路径destination,并返回
新位置的绝对路径的字符串。如果 destination 指向一个
文件夹, source 文件将移动到 destination 中,并保持
原来的文件名。注意:目的地文件夹必须存在否则将抛出异常。
os.unlink(path): 将删除 path 处的文件。
os.rmdir(path): 将删除 path 处的文件夹。该文件夹必须为空,其中没有任何文件和文件夹。
shutil.rmtree(path): 将删除 path 处的文件夹,它包含的所有文件和文件夹都会被删除。
删除不可恢复。
第三方模块send2trash可以将文件和文件夹发送到回收站
send2trash.send2trash(str)
9.2、遍历目录树
os.walk( ):
1.当前文件夹名称的字符串。
2.当前文件夹中子文件夹的字符串的列表。
3.当前文件夹中文件的字符串的列表。
所谓当前文件夹,是指 for 循环当前迭代的文件夹。程序的当前工作目录,不会因为 os.walk()而改变。
import os
for folderName, subfolders, filenames in os.walk('C:\\delicious'):
print('The current folder is ' + folderName)
for subfolder in subfolders:
print('SUBFOLDER OF ' + folderName + ': ' + subfolder)
for filename in filenames:
print('FILE INSIDE ' + folderName + ': '+ filename)
print('')
The current folder is C:\delicious
SUBFOLDER OF C:\delicious: cats
SUBFOLDER OF C:\delicious: walnut
FILE INSIDE C:\delicious: spam.txt
The current folder is C:\delicious\cats
FILE INSIDE C:\delicious\cats: catnames.txt
FILE INSIDE C:\delicious\cats: zophie.jpg
The current folder is C:\delicious\walnut
SUBFOLDER OF C:\delicious\walnut: waffles
The current folder is C:\delicious\walnut\waffles
FILE INSIDE C:\delicious\walnut\waffles: butter.txt.
9.3、zipfile模块压缩文件
1.读取ZIP文件,zipfile.ZipFile( )创建一个ZipFile对象
>> exampleZip = zipfile.ZipFile('example.zip')
>> exampleZip.namelist()
['spam.txt', 'cats/', 'cats/catnames.txt', 'cats/zophie.jpg']
>> exampleZip.close()
2.解压ZIP文件,调用ZipFile对象的方法。.extractall('目标文件夹名称').extract('名称','目的地' )解压单个文件。
>> import zipfile
>> exampleZip = zipfile.ZipFile('example.zip')
>> exampleZip.extractall()
>> exampleZip.close()
3.创建和添加到ZIP文件,ZipFile对象的方法 .write()
>> import zipfile
>> newZip = zipfile.ZipFile('new.zip', 'w')#以写模式打开ZipFile对象。
>> newZip.write('spam.txt', compress_type=zipfile.ZIP_DEFLATED)
>> newZip.close( )
10
10.1、try except异常处理
try:
expression
except 关键字:
expression
那些可能出错的语句被放在try子句中。如果错误发生,程序执行就转到接下来的except子句开始处。
10.2、raise抛出异常
raise 异常名称(‘异常描述’)
raise Exception(‘异常描述’),如果没有try和except语句覆盖抛出异常的raise语句,程序将崩溃。
10.3、traceback模块反向追踪
traceback.format_exc( ):得到异常的字符串形式。
10.4、assert断言
1.assert 条件 ,当条件为False时显示的字符串
assert podBayDoorStatus == 'open', 'The pod bay doors need to be "open".'
2.禁用断言,在 python 或 python3 之后和.py 文件之前加上-O 开关
10.5、日志
1、使用日志模块
import logging
logging.basicConfig(level=logging.DEBUG, format=' %(asctime)s - %(levelname)s - %(message)s')
logging.debug('Start of program')
2、日志级别:
级别 日志函数 描述
DEBUG logging.debug() 最低级别。用于小细节。通常只有在诊断问题时,你才会关心这些消息
INFO logging.info() 用于记录程序中一般事件的信息,或确认一切工作正常
WARNING logging.warning() 用于表示可能的问题,它不会阻止程序的工作,但将来可能会
ERROR logging.error() 用于记录错误,它导致程序做某事失败
CRITICAL logging.critical() 最高级别。用于表示致命的错误,它导致或将要导致程序完全停止工作
3、禁用日志
logging.disable(日志级别)它就会禁止该级别和更低级别的所有日志消息。
logging. disable(logging.CRITICAL)禁用所有日志。
4、将日志记录到文件
logging.basicConfig()
logging.basicConfig(filename='myProgramLog.txt', level=logging.DEBUG, format='%(asctime)s - %(levelname)s - (message)s')
http://nbviewer.jupyter.org/github/lijin-THU/notes-python/blob/master/index.ipynb