Skip to content

Commit 76f6568

Browse files
committed
更新了基础部分的部分内容
1 parent 34e5513 commit 76f6568

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

53 files changed

+1473
-0
lines changed

Day01-15/Appendix-A/code/excel1.py

+29
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
"""
2+
3+
创建Excel文件
4+
5+
Version: 0.1
6+
Author: 骆昊
7+
Date: 2018-03-26
8+
9+
"""
10+
11+
from openpyxl import Workbook
12+
from openpyxl.worksheet.table import Table, TableStyleInfo
13+
14+
workbook = Workbook()
15+
sheet = workbook.active
16+
data = [
17+
[1001, '白元芳', '男', '13123456789'],
18+
[1002, '白洁', '女', '13233445566']
19+
]
20+
sheet.append(['学号', '姓名', '性别', '电话'])
21+
for row in data:
22+
sheet.append(row)
23+
tab = Table(displayName="Table1", ref="A1:E5")
24+
25+
tab.tableStyleInfo = TableStyleInfo(
26+
name="TableStyleMedium9", showFirstColumn=False,
27+
showLastColumn=False, showRowStripes=True, showColumnStripes=True)
28+
sheet.add_table(tab)
29+
workbook.save('./res/全班学生数据.xlsx')

Day01-15/Appendix-A/code/excel2.py

+22
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
"""
2+
3+
读取Excel文件
4+
5+
Version: 0.1
6+
Author: 骆昊
7+
Date: 2018-03-26
8+
9+
"""
10+
11+
from openpyxl import load_workbook
12+
from openpyxl import Workbook
13+
14+
workbook = load_workbook('./res/学生明细表.xlsx')
15+
print(workbook.sheetnames)
16+
sheet = workbook[workbook.sheetnames[0]]
17+
print(sheet.title)
18+
for row in range(2, 7):
19+
for col in range(65, 70):
20+
cell_index = chr(col) + str(row)
21+
print(sheet[cell_index].value, end='\t')
22+
print()

Day01-15/Appendix-A/code/pdf1.py

+11
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
"""
2+
3+
创建PDF文件
4+
5+
Version: 0.1
6+
Author: 骆昊
7+
Date: 2018-03-26
8+
9+
"""
10+
11+
import PyPDF2

Day01-15/Appendix-A/code/pdf2.py

+20
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
"""
2+
3+
读取PDF文件
4+
5+
Version: 0.1
6+
Author: 骆昊
7+
Date: 2018-03-26
8+
9+
"""
10+
11+
from PyPDF2 import PdfFileReader
12+
13+
with open('./res/Python课程大纲.pdf', 'rb') as f:
14+
reader = PdfFileReader(f, strict=False)
15+
print(reader.numPages)
16+
if reader.isEncrypted:
17+
reader.decrypt('')
18+
current_page = reader.getPage(5)
19+
print(current_page)
20+
print(current_page.extractText())

Day01-15/Appendix-A/code/pillow1.py

+26
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
"""
2+
3+
使用pillow操作图像
4+
5+
Version: 0.1
6+
Author: 骆昊
7+
Date: 2018-03-26
8+
9+
"""
10+
11+
from PIL import Image
12+
13+
img = Image.open('./res/guido.jpg')
14+
print(img.size)
15+
print(img.format)
16+
print(img.format_description)
17+
img.save('./res/guido.png')
18+
19+
img2 = Image.open('./res/guido.png')
20+
img3 = img2.crop((335, 435, 430, 615))
21+
for x in range(4):
22+
for y in range(5):
23+
img2.paste(img3, (95 * y , 180 * x))
24+
img2.resize((img.size[0] // 2, img.size[1] // 2))
25+
img2.rotate(90)
26+
img2.save('./res/guido2.png')
Binary file not shown.
59 KB
Loading
Binary file not shown.
Binary file not shown.

Day01-15/Appendix-A/code/word1.py

+10
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
"""
2+
3+
创建Word文件
4+
5+
Version: 0.1
6+
Author: 骆昊
7+
Date: 2018-03-26
8+
9+
"""
10+

Day01-15/Appendix-A/code/word2.py

+21
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
"""
2+
3+
读取Word文件
4+
5+
Version: 0.1
6+
Author: 骆昊
7+
Date: 2018-03-26
8+
9+
"""
10+
11+
from docx import Document
12+
13+
doc = Document('./res/用函数还是用复杂的表达式.docx')
14+
print(len(doc.paragraphs))
15+
print(doc.paragraphs[0].text)
16+
# print(doc.paragraphs[1].runs[0].text)
17+
18+
content = []
19+
for para in doc.paragraphs:
20+
content.append(para.text)
21+
print(''.join(content))
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
## 图像和办公文档处理
2+
3+
用程序来处理图像以及办公文档在实际开发中非常常见,我们可以通过Python生态圈中的第三方模块来完成这些操作。
4+
5+
### 操作图像
6+
7+
#### 计算机图像相关知识
8+
9+
1. 颜色。如果你有使用颜料画画的经历,那么一定知道混合红、黄、蓝三种颜料可以得到其他的颜色,事实上这三种颜色就是被我们称为美术三原色的东西,它们是不能再分解的基本颜色。在计算机中,我们可以将红、绿、蓝三种色光以不同的比例叠加来组合成其他的颜色,因此这三种颜色就是色光三原色,所以我们通常会将一个颜色表示为一个RGB值或RGBA值(其中的A表示Alpha通道,它决定了透过这个图像的像素,也就是透明度)。
10+
2. 像素。对于一个由数字序列表示的图像来说,最小的单位就是图像上单一颜色的小方格,这些小方块都有一个明确的位置和被分配的色彩数值,而这些一小方格的颜色和位置决定了该图像最终呈现出来的样子,它们是不可分割的单位,我们通常称之为像素(pixel)。每一个图像都包含了一定量的像素,这些像素决定图像在屏幕上所呈现的大小。
11+
12+
#### 用Pillow操作图像
13+
14+
- 剪裁图片
15+
- 调整图片大小
16+
- 旋转和翻转
17+
- 操作像素
18+
- 添加水印
19+
20+
### 处理Excel电子表格
21+
22+
Python的OpenPyXL模块让我们可以在Python程序中读取和修改Excel电子表格,LibreOffice Calc和OpenOffice Calc也都能处理Excel的电子表格文件,这就意味着OpenPyXL模块也能处理来自这些应用程序的电子表格。关于OpenPyXL的使用手册和使用文档可以查看它的[官方文档](https://openpyxl.readthedocs.io/en/stable/#)
23+
24+
### 处理Word文档
25+
26+
| 属性 | 描述 |
27+
| ------------- | ---------- |
28+
| bold | 粗体 |
29+
| italic | 斜体 |
30+
| underline | 下划线 |
31+
| strike | 删除线 |
32+
| double_strike | 双删除线 |
33+
| all_caps | 大写首字母 |
34+
| small_caps | 大写首字母 |
35+
| shadow | 带阴影 |
36+
| outline | 轮廓显示 |
37+
| rtl | 从右向左 |
38+
| imprint | 凹嵌页面 |
39+
| emboss | 凸出页面 |
40+
41+
42+
### 处理PDF文档
43+
44+
PDF是Portable Document Format的缩写,使用.pdf作为文件扩展名。

Day01-15/Appendix-B/chatclient.py

+34
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
from socket import socket
2+
from threading import Thread
3+
4+
5+
def main():
6+
7+
class RefreshScreenThread(Thread):
8+
9+
def __init__(self, client):
10+
super().__init__()
11+
self._client = client
12+
13+
def run(self):
14+
while running:
15+
data = self._client.recv(1024)
16+
print(data.decode('utf-8'))
17+
18+
nickname = input('请输入你的昵称: ')
19+
myclient = socket()
20+
myclient.connect(('10.7.189.118', 12345))
21+
running = True
22+
RefreshScreenThread(myclient).start()
23+
while running:
24+
content = input('请发言: ')
25+
if content == 'byebye':
26+
myclient.send(content.encode('utf-8'))
27+
running = False
28+
else:
29+
msg = nickname + ': ' + content
30+
myclient.send(msg.encode('utf-8'))
31+
32+
33+
if __name__ == '__main__':
34+
main()

Day01-15/Appendix-B/chatserver.py

+44
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
from socket import socket
2+
from threading import Thread
3+
4+
5+
def main():
6+
7+
class ClientHandler(Thread):
8+
9+
def __init__(self, client):
10+
super().__init__()
11+
self._client = client
12+
13+
def run(self):
14+
try:
15+
while True:
16+
try:
17+
data = self._client.recv(1024)
18+
if data.decode('utf-8') == 'byebye':
19+
clients.remove(self._client)
20+
self._client.close()
21+
break
22+
else:
23+
for client in clients:
24+
client.send(data)
25+
except Exception as e:
26+
print(e)
27+
clients.remove(self._client)
28+
break
29+
except Exception as e:
30+
print(e)
31+
32+
server = socket()
33+
server.bind(('10.7.189.118', 12345))
34+
server.listen(512)
35+
clients = []
36+
while True:
37+
curr_client, addr = server.accept()
38+
print(addr[0], '连接到服务器.')
39+
clients.append(curr_client)
40+
ClientHandler(curr_client).start()
41+
42+
43+
if __name__ == '__main__':
44+
main()

Day01-15/Appendix-B/fileclient.py

+29
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
from socket import socket
2+
from json import loads
3+
from base64 import b64decode
4+
5+
6+
def main():
7+
client = socket()
8+
client.connect(('192.168.1.2', 5566))
9+
# 定义一个保存二进制数据的对象
10+
in_data = bytes()
11+
# 由于不知道服务器发送的数据有多大每次接收1024字节
12+
data = client.recv(1024)
13+
while data:
14+
# 将收到的数据拼接起来
15+
in_data += data
16+
data = client.recv(1024)
17+
# 将收到的二进制数据解码成JSON字符串并转换成字典
18+
# loads函数的作用就是将JSON字符串转成字典对象
19+
my_dict = loads(in_data.decode('utf-8'))
20+
filename = my_dict['filename']
21+
filedata = my_dict['filedata'].encode('utf-8')
22+
with open('/Users/Hao/' + filename, 'wb') as f:
23+
# 将base64格式的数据解码成二进制数据并写入文件
24+
f.write(b64decode(filedata))
25+
print('图片已保存.')
26+
27+
28+
if __name__ == '__main__':
29+
main()

Day01-15/Appendix-B/fileserver.py

+46
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
from socket import socket, SOCK_STREAM, AF_INET
2+
from base64 import b64encode
3+
from json import dumps
4+
from threading import Thread
5+
6+
7+
def main():
8+
9+
# 自定义线程类
10+
class FileTransferHandler(Thread):
11+
12+
def __init__(self, cclient):
13+
super().__init__()
14+
self.cclient = cclient
15+
16+
def run(self):
17+
my_dict = {}
18+
my_dict['filename'] = 'guido.jpg'
19+
# JSON是纯文本不能携带二进制数据
20+
# 所以图片的二进制数据要处理成base64编码
21+
my_dict['filedata'] = data
22+
# 通过dumps函数将字典处理成JSON字符串
23+
json_str = dumps(my_dict)
24+
# 发送JSON字符串
25+
self.cclient.send(json_str.encode('utf-8'))
26+
self.cclient.close()
27+
28+
# 1.创建套接字对象并指定使用哪种传输服务
29+
server = socket()
30+
# 2.绑定IP地址和端口(区分不同的服务)
31+
server.bind(('192.168.1.2', 5566))
32+
# 3.开启监听 - 监听客户端连接到服务器
33+
server.listen(512)
34+
print('服务器启动开始监听...')
35+
with open('guido.jpg', 'rb') as f:
36+
# 将二进制数据处理成base64再解码成字符串
37+
data = b64encode(f.read()).decode('utf-8')
38+
while True:
39+
client, addr = server.accept()
40+
# 用一个字典(键值对)来保存要发送的各种数据
41+
# 待会可以将字典处理成JSON格式在网络上传递
42+
FileTransferHandler(client).start()
43+
44+
45+
if __name__ == '__main__':
46+
main()

Day01-15/Appendix-B/guido.jpg

59 KB
Loading

Day01-15/Appendix-B/mmdownloader.py

+33
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
from time import time
2+
from threading import Thread
3+
4+
import requests
5+
6+
7+
class DownloadHanlder(Thread):
8+
9+
def __init__(self, url):
10+
super().__init__()
11+
self.url = url
12+
13+
def run(self):
14+
filename = self.url[self.url.rfind('/') + 1:]
15+
resp = requests.get(self.url)
16+
with open('/Users/Hao/Downloads/' + filename, 'wb') as f:
17+
f.write(resp.content)
18+
19+
20+
def main():
21+
# 通过requests模块的get函数获取网络资源
22+
resp = requests.get(
23+
'http://api.tianapi.com/meinv/?key=772a81a51ae5c780251b1f98ea431b84&num=10')
24+
# 将服务器返回的JSON格式的数据解析为字典
25+
data_model = resp.json()
26+
for mm_dict in data_model['newslist']:
27+
url = mm_dict['picUrl']
28+
# 通过多线程的方式实现图片下载
29+
DownloadHanlder(url).start()
30+
31+
32+
if __name__ == '__main__':
33+
main()
110 KB
Loading
182 KB
Loading

Day01-15/Appendix-B/res/arpanet.png

38.6 KB
Loading
58.4 KB
Loading

Day01-15/Appendix-B/res/browers.jpg

23.1 KB
Loading
Loading
Loading

Day01-15/Appendix-B/res/osi_rm.gif

12 KB
Loading

Day01-15/Appendix-B/res/osimodel.png

120 KB
Loading
42.1 KB
Loading

Day01-15/Appendix-B/res/telnet.png

107 KB
Loading

0 commit comments

Comments
 (0)