python编程学习笔记_python编程快速上手学习笔记

第四章 列表

4.1 列表的操作

4.1.1切片 [start:end]

start默认为0, end默认为列表的长度,-1表示倒数第一个。

>>> arr = [1,2,3,4]

>>> arr[1:]

[2, 3, 4]

>>> arr[1:3]

[2, 3]

>>> arr[-3:-1]

[2, 3]

>>> arr[:3]

[1, 2, 3]

4.1.2 len()获取数组的长度

4.1.3 列表连接和列表复制

+操作符可以连接两个列表

*操作符用于一个列表和一个整数,实现列表的复制。

>>> [1,2,3] + ['a', 'b','c']

[1, 2, 3, 'a', 'b', 'c']

>>> [1,2,3] * 2

[1, 2, 3, 1, 2, 3]

4.1.4 del 从列表删除值

>>> arr = [1,2,3,4]

>>> del arr[2]

>>> arr

[1, 2, 4]

>>> del arr

>>> arr

Traceback (most recent call last):

File "", line 1, in

NameError: name 'arr' is not defined

4.2 使用列表

4.2.1 多重赋值技巧

>>> arr = [1,2,3,4]

>>> one,two,three = arr # 值和列表的个数不一致

Traceback (most recent call last):

File "", line 1, in

ValueError: too many values to unpack (expected 3)

>>> one,two,three,four = arr # 多重赋值

>>> one

1

4.2.2 index 查找值的索引

4.2.3 append()和insert() 插入值

append是在列表的末尾添加值

insert(index, value) 是在指定的位置添加值

4.2.4 remove(value)删除值

4.3 元组类型

和列表的区别:

1、元组用()

2、元组和字符串一样,不可改变

3、如果元组只有一个值,后面需要加逗号,不然会当做一个值

4.4 元组和list的转换

list() 把元组转为列表

tuple() 把列表转为元组

4.5 列表的复制

copy() 复制列表的可变值,而不是引用

deepcopy() 用于复制列表的列表

第五章 字典和结构化数据

5.1 获取字典的值

keys() 字典键的列表

values() 字典值的列表

items() 字典键值对的列表

get(key, default) 获取key的值,如果不存在,则返回default

setdefault(key, default) 如果key不存在,设设置key的值为default

第六章 字符串

6.1 原始字符串

>>> print(r'that is carol\'s cat.') # 完全忽略所有的转义字符

that is carol\'s cat.

6.2 三重引号的多行字符串

>>> print('''alsflajdf)

... alsdflajdflja

... alsdflajflajl

... ''')

alsflajdf)

alsdflajdflja

alsdflajflajl

6.3 字符串方法

upper() 和 lower() 把字符串转为大小写

isupper() 和 islower() 是否都是大小写

starstwith() 和 endswith() 以什么开始或结尾

join() 把字符串列表拼接成字符串

split() 把字符串分割成字符串列表

rjust(), ljust() 和center() 文本对齐

strip(), lstrip()和rstrip() 删除空白符

第七章 模式匹配与正则表达式

7.1、使用正则表达式的步骤

import re # 引入正则表达式模块

phoneNumRegex = re.compile(r'\d\d\d-\d\d\d-\d\d\d\d') # 创建一个Regex对象(r表示使用原始字符串)

mo = phoneNumRegex.search('my phone is 123-123-1231') # search方法用于匹配字符串,返回一个match对象

print('phone num found is: ' + mo.group()) # group()方法返回实际匹配的字符串

7.2、正则表达式匹配更多模式

1、利用括号分组

2、利用管道 | 匹配多个分组

3、用问号?实现可选匹配(?在分组后面)

4、用星号*匹配0或多个

5、用加号+匹配1或多个

6、用花括号{}匹配特定次数(除了一个数字,还可以指定范围)

7、用花括号和问号匹配非贪心模式(不加?则是贪心模式)

7.3、findall() 查找字符串中的所有匹配

如果没有分组,则返回字符串列表

如果有分组,则返回字符串的元组的列表

7.4、字符分类

\d 0-9

\D 除0-9

\w 字母数字下划线

\W 除字母数字下划线

\s 空格、制表符或换行符

\S 除空格、制表符或换行符

7.5、sub() 替换字符串

第一个参数是字符串,用于取代发现的匹配,如果想使用匹配的文本本身,可以用\1\2\3表示分组1,2,3

第二个参数是要处理的字符串

7.6、compile的第二个参数

re.IGNORECASE 忽视大小写

re.VERBOSE 编写注释

re.DOTALL 句点表示所有字符(没有这个则表示除换行符外的所有字符)

第八章 读写文件

8.1、常用方法

os.makedirs(path) # 创建文件夹

os.getcwd() # 当前目录的路径

os.listdir(path) # 返回当前目录的文件名

# os.path模块

os.path.abspath(path) # 返回绝对路径

os.path.isabs(path) # 检查是否绝对路径

os.path.relpath(path, start) # 返回从start到path的相对路径,start可选

os.path.dirname(path) # 目录名

os.path.basename(path) # 文件名

os.path.split(path) # 返回目录名和文件名的元组

os.path.getsize(path) # 文件的字节数

os.path.exists(path) # 检查路径是否存在

os.path.isfile(path) # 检查路径是否文件

os.path.isdir(path) # 检查路径是否文件夹

os.path.join(path1,path2,...) # 连接路径

8.2、读写文件

>>> baconFile = open('bacon.txt', 'w') # 写入模式 覆盖原有的文件

>>> baconFile.write('hello wrold! \n')

14

>>> baconFile.close() # 每次操作完都要close

>>> baconFile = open('bacon.txt','a') # 添加模式 在已有文件末尾添加

>>> baconFile.write('Bacon is not a vegetable.')

25

>>> baconFile.close()

>>> baconFile = open('bacon.txt') # 默认只读模式

>>> content = baconFile.read()

>>> baconFile.close()

>>> print(content)

8.3、用shelve保存配置信息

优点:可以边读边写

import shelve

>>> shelfFile = shelve.open('mydata') # 打开一个文件

>>> cats = ['zosi','pa', 'renma']

>>> shelfFile['cats'] = cats # 保存信息

>>> shelfFile.close()

>>> shelfFile = shelve.open('mydata')

>>> shelfFile['cats'] # 获取文件内容

['zosi', 'pa', 'renma']

>>> shelfFile['dogs'] = ['siwen', 'xiaohei', 'aizi']

>>> list(shelfFile.keys()) # 获取文件的键列表

['cats', 'dogs']

>>> list(shelfFile.values()) # 获取文件的值列表

[['zosi', 'pa', 'renma'], ['siwen', 'xiaohei', 'aizi']]

>>> list(shelfFile)

['cats', 'dogs']

>>> shelfFile.close()

练习:

# -*- coding: utf-8 -*

# 疯狂填词 让用户输入单词替换掉对应的单词

readFile = open('a.txt')

readContent = readFile.read()

print(readContent)

# TODO: 建立一个列表,动态生成提示语,循环让用户输入

tips = ['ADJECTIVE', 'NOUN', 'VERB', 'NOUN']

for tip in tips:

if tip[0] in ['A','E', 'I', 'O', 'U']:

inputTips = 'Enter an ' + tip.lower() + ' : '

else:

inputTips = 'Enter a ' + tip.lower() + ' : '

inputText = input(inputTips)

readContent = readContent.replace(tip, inputText, 1)

print(readContent)

# TODO: 保存到另外一个文件

writeFile = open('a1.txt', 'w')

writeFile.write(readContent)

writeFile.close()

readFile.close()

# -*- coding: utf-8 -*

# 正则表达式查找 对指定文件夹的TXT文件,查找匹配用户提供的正则表达式的所有行

import re, os

# TODO: 让用户输入想查找的文件夹,返回该文件夹中的所有TXT文件

findPath = input('请输入您想查找的文件夹路径:')

searchText = input('请输入您想查找的文本:')

searchRegex = re.compile(searchText)

filenames = os.listdir(findPath)

txtFiles = []

for filename in filenames:

if filename[-4:] == '.txt':

txtFiles.append(filename)

print(txtFiles)

# TODO: 对所有TXT文件进行遍历,返回所有匹配用户提供的正则表达式的所有行

fileContents = {}

for filename in txtFiles:

fileReader = open(os.path.join(findPath, filename))

fileContents[filename] = []

lines = fileReader.readlines()

for line in lines:

if searchRegex.search(line):

fileContents[filename].append(line)

fileReader.close()

# print (fileContents)

for key in fileContents:

if len(fileContents[key]) > 0:

print(key)

for line in fileContents[key]:

print(line)

第九章 组织文件

9.1 shutle模块(复制、移动、删除、改名)

shutle.copy(source, destination) 复制文件

shutle.copytree(source, destination) 复制文件夹

>>> shutil.copy('.\\a.txt', '.\\b.txt') # 第二个参数是文件名

'.\\b.txt'

>>> shutil.copy('a.txt','copy') # 第二个参数是文件夹

'copy\\a.txt'

>>> shutil.copytree('copy', 'copy_backup') # 如果文件夹不存在,则创建文件夹

'copy_backup'

shutle.move(source, destination) 移动文件

>>> shutil.move('a.txt', 'copy2') # 假定copy2是个目录,但不存在,则会被当做新的文件名

'copy2'

>>> shutil.move('a.txt', 'copy2/copy/test') # 指定的路径不存在,则会抛出异常

Traceback (most recent call last):

File "C:\Users\lzb\AppData\Local\Programs\Python\Python36\lib\shutil.py", line 544, in move

os.rename(src, real_dst)

FileNotFoundError: [WinError 2] 系统找不到指定的文件。: 'a.txt' -> 'copy2/copy/test'

os.unlink(path) 删除文件

os.rmdir(path) 删除空文件夹

shutil.rmtree(path) 删除文件夹,包含文件夹的内容(删除后不可恢复)

注:在使用这些函数时,最好先打印出要删除的文件,再调用这些函数。

9.2 send2trash模块

send2trash.send2trash(path) 把文件或文件夹发送到垃圾箱

pip install send2trash # 安装模块

>>> import send2trash # 引入模块

>>> send2trash.send2trash('bacon.txt') # 把文件或文件夹发送到垃圾箱

9.3 遍历文件夹

用os.walk(path)

在循环的每次迭代中,返回3个值,当前文件夹名称,当前文件夹子文件夹的字符串列表,当前文件夹文件的字符串列表

# -*- coding: utf-8 -*

import os

for foldername, subfolders, filenames in os.walk('copy'):

print('The current folder is ' + foldername)

for subfolder in subfolders:

print('Subfolder of ' + foldername + ' : ' + subfolder)

for filename in filenames:

print('File inside ' + foldername + ' : ' + filename)

9.4 用zipfile模块压缩文件

9.4.1 读取文件

zipfile.ZipFile('copy.zip') # 创建ZipFile对象

copyZip.getinfo('copy/b.txt') # 返回特定文件的ZipInfo对象

>>> import zipfile # 引入zipfile模块

>>> os.listdir()

['b.txt', 'copy', 'copy.zip', 'copy2', 'copy3']

>>> copyZip = zipfile.ZipFile('copy.zip') # 创建ZipFile对象

>>> copyZip.namelist() # 返回Zip文件中包含的文件和文件夹的字符串列表

['copy/', 'copy/b.txt', 'copy/copy/', 'copy/copy/b.txt', 'copy/copy2/', 'copy/copy2/b.txt', 'copy/copy3/', 'copy/copy3/b.txt']

>>> spamInfo = copyZip.getinfo('copy/b.txt') # 返回特定文件的ZipInfo对象

>>> spamInfo.file_size # 原来的文件大小

702

>>> spamInfo.compress_size # 压缩后的文件大小

124

>>> 'Compressed file is %sx smaller!' % (round(spamInfo.file_size / spamInfo.compress_size, 2))

'Compressed file is 5.66x smaller!'

>>> copyZip.close()

9.4.2 解压缩文件

copyZip.extractall(path) 解压全部文件,如果path不传,则解压到当前目录,如果path不存在,则创建path目录

copyZip.extract('copy/b.txt') 解压单个文件,第二个参数也是解压后的路径,同上

>>> copyZip = zipfile.ZipFile('copy.zip')

>>> copyZip.extractall()

>>> copyZip.extract('copy/b.txt')

'e:\\test\\python\\test\\copy\\copy\\b.txt'

9.4.3 创建和添加到zip文件

ZipFile()的第二个参数和open()类似, w会覆盖原有的,a则是追加

>>> newZip = zipfile.ZipFile('new.zip', 'w')

>>> newZip.write('b.txt', compress_type=zipfile.ZIP_DEFLATED)

>>> newZip.close()

>>> newZip = zipfile.ZipFile('new.zip', 'a')

>>> newZip.write('copy', compress_type=zipfile.ZIP_DEFLATED)

>>> newZip.close()

>>> newZip = zipfile.ZipFile('new.zip', 'a')

>>> newZip.write('copy/b.txt', compress_type=zipfile.ZIP_DEFLATED)

>>> newZip.close()

第十一章 从web抓取信息

11.1 用requests模块下载文件

需要先安装requests模块

pip install requests

>>> res = requests.get('http://www.jjxsw.com/')

>>> res.raise_for_staus() # 如果下载出错则会抛出异常

>>> playFile = open('demo.html', 'wb') # 用二进制写入,保存编码信息

>>> for chunk in res.iter_content(100000): #下载大文件的时候,可以用iter_content按块写入

... playFile.write(chunk)

...

41034

>>> playFile.close()

11.2 用BeautifulSoup模块解析HTML

>>> res = requests.get('http://www.txt53.com/')

>>> res.raise_for_status()

>>> demoSoup = bs4.BeautifulSoup(res.text) # 创建一个BeautifulSoup对象

>>> elems = demoSoup.select('.quanji') # 通过select方法获取元素

>>> len(elems)

4

>>> type(elems[0])

>>> elems[0].getText() # 获取元素的text

>>> elems[0].get(attr) # 获取元素的属性值

11.3 用selenium模块控制浏览器

# -*- coding: utf-8 -*

# ! python3

# 自动玩2048游戏

from time import sleep

from selenium import webdriver

from selenium.webdriver.common.keys import Keys # 特殊键的值模块

browser = webdriver.Chrome()

browser.maximize_window()

browser.implicitly_wait(26)

browser.get("http://2048game.com/")

sleep(5)

htmlElem = browser.find_element_by_tag_name('html')

for i in range(100):

htmlElem.send_keys(Keys.ARROW_UP)

sleep(0.5)

htmlElem.send_keys(Keys.ARROW_RIGHT)

sleep(0.5)

htmlElem.send_keys(Keys.ARROW_DOWN)

sleep(0.5)

htmlElem.send_keys(Keys.ARROW_LEFT)

sleep(0.5)

第十二章 处理Excel电子表格

12.1 读取表格数据

load_workbook(path) 读取Excel

get_active_sheet() 获取当前的工作表

# -*- coding: utf-8 -*

# ! python3

# 读取Excel表格数据

import openpyxl, pprint # 引入模块

print('Opening workbook..')

wb = openpyxl.load_workbook('censuspopdata.xlsx') # 打开Excel

sheet = wb.get_sheet_by_name('Population by Census Tract') #获取工作表

countyData = {}

for row in range(2, sheet.max_row + 1): # max_row max_col 获取表格的行数和列数

state = sheet['B' + str(row)].value

county = sheet['C' + str(row)].value

pop = sheet['D' + str(row)].value

countyData.setdefault(state, {}) # 如果属性不存在则给默认值

countyData[state].setdefault(county, {'tracts': 0, 'pop': 0})

countyData[state][county]['tracts'] += 1

countyData[state][county]['pop'] += int(pop)

12.2 写入表格

openpyxl.Workbook() 创建一个空的workbook对象

wb.get_sheet_names() 获取工作表的名称列表

wb.get_active_sheet() 获取当前活动的工作表对象,title属性就是表名

wb.save(path) 保存表格

wb.create_sheet(index?, title?) 创建工作表,index位置,title 表名

wb.remove_sheet(WorkSheet对象) 移除工作表,可通过表名来获取表对象get_sheet_by_name()

sheet['A1'] = 'hello ' 写入数据,类似对数组赋值

# -*- coding: utf-8 -*

# ! python3

# 更新产品信息

import openpyxl

wb = openpyxl.load_workbook('produceSales.xlsx')

print(wb.get_sheet_names)

sheet = wb.get_sheet_by_name('Sheet')

PRICE_UPDATE = {

'Garlic': 3.07,

'Celery': 1.19,

'Lemon': 1.27

}

# 检查所有行,更新不正确的信息

for rowNum in range(2, sheet.max_row):

productName = sheet.cell(row=rowNum, column=1).value

if productName in PRICE_UPDATE:

sheet.cell(row=rowNum, column=2).value = PRICE_UPDATE[productName]

wb.save('updatedProductSales.xlsx')

12.3 表格操作

sheet.merge_cells('A1:B3') # 合并完后单元格为起始位置,比如合并‘A1:B3’,则为A1

sheet.unmerge_cells('A1:B3') # 拆分单元格

# 冻结窗格

sheet.freeze_panes = 'A1' 或 NONE # 不冻结窗格

sheet.freeze_panes = 'A2' # 冻结行1

sheet.freeze_panes = 'C2' # 冻结hang1 和A、B列

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值