1.Python基础

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

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

推荐阅读更多精彩内容