Skip to content

Commit cd4d226

Browse files
committed
更新了README.md
1 parent 965af7c commit cd4d226

File tree

4 files changed

+37
-54
lines changed

4 files changed

+37
-54
lines changed

README.md

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -14,9 +14,9 @@
1414

1515
### 视频资源
1616

17-
1. [《Python零基础教程快速上手》](https://www.bilibili.com/video/BV1FT4y1R7sz) - Python基础部分的视频,因为随堂录制,有的时候声音会有点小,点赞过3000就为大家重新录制一套声音和画面都更好的精讲版视频。
18-
2. [《Python零基础数据库可视化教程》](https://www.bilibili.com/video/BV1dA411w7tu)- 数据库部分的视频,随堂录制,数据库部分讲得比较简单,后面还讲了一些做数据可视化系统的内容,我自己对这套视频不是很满意,点赞过2000之后就重新做一套面向数据分析师精讲数据库的视频,重点放在SQL和业务查询知识上,解决数据分析师日常提数问题。
19-
3. [《Scrapy爬虫框架教学》](https://www.bilibili.com/video/BV1QY411F7Vt)- 爬虫框架Scrapy教学视频,随堂录制,讲解了一个爬取淘宝商品信息的项目,有一点实用价值,爬虫本身并不是我感兴趣的内容,就将就看看吧。
17+
视频在抖音和B站都可以找到,有兴趣的小伙伴可以关注我的抖音或B站账号,最近刚刚起号,还希望大家多多支持,非常感谢!
18+
19+
<img src="res/qrcode.JPG" style="zoom:24%;" />
2020

2121
### 文件资源
2222

@@ -30,7 +30,7 @@
3030

3131
1. 骆昊的Python学习群-1,群号:789050736,2000人大群。
3232
2. 骆昊的Python学习群-2,群号:837590310,2000人大群。
33-
3. 骆昊的Python学习群-3,群号:784430256,1000人大群
33+
3. 骆昊的Python学习群-3,群号:784430256,2000人大群
3434

3535
<img src="https://github.com/jackfrued/mypic/raw/master/20220616120218.JPG" style="zoom: 75%;">
3636

res/qrcode.JPG

731 KB
Loading

第04课:Python语言元素之运算符.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ Python语言支持很多种运算符,我们先用一个表格为大家列出
1717
| `is` `is not` | 身份运算符 |
1818
| `in` `not in` | 成员运算符 |
1919
| `not` `or` `and` | 逻辑运算符 |
20-
| `=` `+=` `-=` `*=` `/=` `%=` `//=` `**=` `&=` `|=` `^=` `>>=` `<<=` | (复合)赋值运算符 |
20+
| `=` `+=` `-=` `*=` `/=` `%=` `//=` `**=` `&=` `\|=` `^=` `>>=` `<<=` | (复合)赋值运算符 |
2121

2222
>**说明:** 上面这个表格实际上是按照运算符的优先级从上到下列出了各种运算符。所谓优先级就是在一个运算的表达式中,如果出现了多个运算符,应该先执行哪个运算再执行哪个运算的顺序。在实际开发中,如果搞不清楚运算符的优先级,可以使用圆括号来确保运算的执行顺序。
2323

第27课:用Python操作PDF文件.md

Lines changed: 32 additions & 49 deletions
Original file line numberDiff line numberDiff line change
@@ -15,9 +15,9 @@ pip install PyPDF2
1515
```Python
1616
import PyPDF2
1717

18-
reader = PyPDF2.PdfFileReader('test.pdf')
19-
page = reader.getPage(0)
20-
print(page.extractText())
18+
reader = PyPDF2.PdfReader('test.pdf')
19+
for page in reader.pages:
20+
print(page.extract_text())
2121
```
2222

2323
> **提示**:上面代码中使用的PDF文件“test.pdf”以及下面的代码中需要用到的PDF文件,也可以通过下面的百度云盘地址进行获取。链接:https://pan.baidu.com/s/1rQujl5RQn9R7PadB2Z5g_g 提取码:e7b4
@@ -36,31 +36,18 @@ pdf2text.py test.pdf
3636
上面的代码中通过创建`PdfFileReader`对象的方式来读取PDF文档,该对象的`getPage`方法可以获得PDF文档的指定页并得到一个`PageObject`对象,通过`PageObject`对象的`rotateClockwise``rotateCounterClockwise`方法可以实现页面的顺时针和逆时针方向旋转,通过`PageObject`对象的`addBlankPage`方法可以添加一个新的空白页,代码如下所示。
3737

3838
```Python
39-
import PyPDF2
39+
reader = PyPDF2.PdfReader('XGBoost.pdf')
40+
writer = PyPDF2.PdfWriter()
4041

41-
from PyPDF2.pdf import PageObject
42-
43-
# 创建一个读PDF文件的Reader对象
44-
reader = PyPDF2.PdfFileReader('resources/XGBoost.pdf')
45-
# 创建一个写PDF文件的Writer对象
46-
writer = PyPDF2.PdfFileWriter()
47-
# 对PDF文件所有页进行循环遍历
48-
for page_num in range(reader.numPages):
49-
# 获取指定页码的Page对象
50-
current_page = reader.getPage(page_num) # type: PageObject
51-
if page_num % 2 == 0:
52-
# 奇数页顺时针旋转90度
53-
current_page.rotateClockwise(90)
42+
for no, page in enumerate(reader.pages):
43+
if no % 2 == 0:
44+
new_page = page.rotate(-90)
5445
else:
55-
# 偶数页反时针旋转90度
56-
current_page.rotateCounterClockwise(90)
57-
writer.addPage(current_page)
58-
# 最后添加一个空白页并旋转90度
59-
page = writer.addBlankPage() # type: PageObject
60-
page.rotateClockwise(90)
61-
# 通过Writer对象的write方法将PDF写入文件
62-
with open('resources/XGBoost-modified.pdf', 'wb') as file:
63-
writer.write(file)
46+
new_page = page.rotate(90)
47+
writer.add_page(new_page)
48+
49+
with open('temp.pdf', 'wb') as file_obj:
50+
writer.write(file_obj)
6451
```
6552

6653
### 加密PDF文件
@@ -70,38 +57,34 @@ with open('resources/XGBoost-modified.pdf', 'wb') as file:
7057
```Python
7158
import PyPDF2
7259

73-
reader = PyPDF2.PdfFileReader('resources/XGBoost.pdf')
74-
writer = PyPDF2.PdfFileWriter()
75-
for page_num in range(reader.numPages):
76-
writer.addPage(reader.getPage(page_num))
77-
# 通过encrypt方法加密PDF文件,方法的参数就是设置的密码
60+
reader = PyPDF2.PdfReader('XGBoost.pdf')
61+
writer = PyPDF2.PdfWriter()
62+
63+
for page in reader.pages:
64+
writer.add_page(page)
65+
7866
writer.encrypt('foobared')
79-
with open('resources/XGBoost-encrypted.pdf', 'wb') as file:
80-
writer.write(file)
67+
68+
with open('temp.pdf', 'wb') as file_obj:
69+
writer.write(file_obj)
8170
```
8271

8372
### 批量添加水印
8473

8574
上面提到的`PageObject`对象还有一个名为`mergePage`的方法,可以两个PDF页面进行叠加,通过这个操作,我们很容易实现给PDF文件添加水印的功能。例如要给上面的“XGBoost.pdf”文件添加一个水印,我们可以先准备好一个提供水印页面的PDF文件,然后将包含水印的`PageObject`读取出来,然后再循环遍历“XGBoost.pdf”文件的每个页,获取到`PageObject`对象,然后通过`mergePage`方法实现水印页和原始页的合并,代码如下所示。
8675

8776
```Python
88-
import PyPDF2
77+
reader1 = PyPDF2.PdfReader('XGBoost.pdf')
78+
reader2 = PyPDF2.PdfReader('watermark.pdf')
79+
writer = PyPDF2.PdfWriter()
80+
watermark_page = reader2.pages[0]
81+
82+
for page in reader1.pages:
83+
page.merge_page(watermark_page)
84+
writer.add_page(page)
8985

90-
from PyPDF2.pdf import PageObject
91-
92-
reader1 = PyPDF2.PdfFileReader('resources/XGBoost.pdf')
93-
reader2 = PyPDF2.PdfFileReader('resources/watermark.pdf')
94-
writer = PyPDF2.PdfFileWriter()
95-
# 获取水印页
96-
watermark_page = reader2.getPage(0)
97-
for page_num in range(reader1.numPages):
98-
current_page = reader1.getPage(page_num) # type: PageObject
99-
current_page.mergePage(watermark_page)
100-
# 将原始页和水印页进行合并
101-
writer.addPage(current_page)
102-
# 将PDF写入文件
103-
with open('resources/XGBoost-watermarked.pdf', 'wb') as file:
104-
writer.write(file)
86+
with open('temp.pdf', 'wb') as file_obj:
87+
writer.write(file_obj)
10588
```
10689

10790
如果愿意,还可以让奇数页和偶数页使用不同的水印,大家可以自己思考下应该怎么做。

0 commit comments

Comments
 (0)