-
-
Notifications
You must be signed in to change notification settings - Fork 1
/
Python_in_Office.mm
1062 lines (1052 loc) · 79.6 KB
/
Python_in_Office.mm
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
<map version="freeplane 1.11.5">
<!--To view this file, download free mind mapping software Freeplane from https://www.freeplane.org -->
<node TEXT="Python in Office" LOCALIZED_STYLE_REF="AutomaticLayout.level.root" FOLDED="false" ID="ID_1090958577" CREATED="1409300609620" MODIFIED="1697644508245">
<hook NAME="accessories/plugins/AutomaticLayout.properties" VALUE="ALL"/>
<font BOLD="true"/>
<hook NAME="MapStyle" background="#f9f9f8" zoom="1.001">
<properties show_icon_for_attributes="true" edgeColorConfiguration="#808080ff,#ff0000ff,#0000ffff,#00ff00ff,#ff00ffff,#00ffffff,#7c0000ff,#00007cff,#007c00ff,#7c007cff,#007c7cff,#7c7c00ff" show_note_icons="true" associatedTemplateLocation="template:/light_nord_template.mm" fit_to_viewport="false"/>
<map_styles>
<stylenode LOCALIZED_TEXT="styles.root_node" STYLE="oval" UNIFORM_SHAPE="true" VGAP_QUANTITY="24 pt">
<font SIZE="24"/>
<stylenode LOCALIZED_TEXT="styles.predefined" POSITION="bottom_or_right" STYLE="bubble">
<stylenode LOCALIZED_TEXT="default" ID="ID_506805493" ICON_SIZE="12 pt" FORMAT_AS_HYPERLINK="false" COLOR="#484747" BACKGROUND_COLOR="#efefef" STYLE="bubble" SHAPE_HORIZONTAL_MARGIN="8 pt" SHAPE_VERTICAL_MARGIN="5 pt" BORDER_WIDTH_LIKE_EDGE="false" BORDER_WIDTH="1.9 px" BORDER_COLOR_LIKE_EDGE="false" BORDER_COLOR="#8fbcbb" BORDER_DASH_LIKE_EDGE="true" BORDER_DASH="SOLID">
<arrowlink SHAPE="CUBIC_CURVE" COLOR="#000000" WIDTH="2" TRANSPARENCY="200" DASH="" FONT_SIZE="9" FONT_FAMILY="SansSerif" DESTINATION="ID_506805493" STARTARROW="NONE" ENDARROW="DEFAULT"/>
<font NAME="SansSerif" SIZE="11" BOLD="false" STRIKETHROUGH="false" ITALIC="false"/>
<edge STYLE="bezier" COLOR="#2e3440" WIDTH="3" DASH="SOLID"/>
<richcontent TYPE="DETAILS" CONTENT-TYPE="plain/auto"/>
<richcontent TYPE="NOTE" CONTENT-TYPE="plain/auto"/>
</stylenode>
<stylenode LOCALIZED_TEXT="defaultstyle.details" COLOR="#ffffff" BACKGROUND_COLOR="#2e3440" BORDER_WIDTH_LIKE_EDGE="false" BORDER_WIDTH="1.9 px" BORDER_COLOR_LIKE_EDGE="false" BORDER_COLOR="#f0f0f0" BORDER_DASH_LIKE_EDGE="true">
<font SIZE="11" BOLD="false" ITALIC="false"/>
</stylenode>
<stylenode LOCALIZED_TEXT="defaultstyle.attributes">
<font SIZE="10"/>
</stylenode>
<stylenode LOCALIZED_TEXT="defaultstyle.note" COLOR="#000000" BACKGROUND_COLOR="#f6f9a1" TEXT_ALIGN="LEFT">
<icon BUILTIN="clock2"/>
<font SIZE="10"/>
</stylenode>
<stylenode LOCALIZED_TEXT="defaultstyle.floating">
<edge STYLE="hide_edge"/>
<cloud COLOR="#f0f0f0" SHAPE="ROUND_RECT"/>
</stylenode>
<stylenode LOCALIZED_TEXT="defaultstyle.selection" COLOR="#eceff4" BACKGROUND_COLOR="#bf616a" BORDER_COLOR_LIKE_EDGE="false" BORDER_COLOR="#bf616a"/>
</stylenode>
<stylenode LOCALIZED_TEXT="styles.user-defined" POSITION="bottom_or_right" STYLE="bubble">
<stylenode LOCALIZED_TEXT="styles.important" ID="ID_915433779" BORDER_COLOR="#bf616a">
<icon BUILTIN="yes"/>
<arrowlink COLOR="#bf616a" TRANSPARENCY="255" DESTINATION="ID_915433779"/>
<font NAME="Ubuntu" SIZE="14"/>
<edge COLOR="#bf616a"/>
</stylenode>
</stylenode>
<stylenode LOCALIZED_TEXT="styles.AutomaticLayout" POSITION="bottom_or_right" STYLE="bubble">
<stylenode LOCALIZED_TEXT="AutomaticLayout.level.root" COLOR="#ffffff" BACKGROUND_COLOR="#484747" STYLE="bubble" SHAPE_HORIZONTAL_MARGIN="10 pt" SHAPE_VERTICAL_MARGIN="10 pt">
<font SIZE="18"/>
</stylenode>
<stylenode LOCALIZED_TEXT="AutomaticLayout.level,1" COLOR="#eceff4" BACKGROUND_COLOR="#d08770" STYLE="bubble" SHAPE_HORIZONTAL_MARGIN="8 pt" SHAPE_VERTICAL_MARGIN="5 pt">
<font SIZE="16"/>
</stylenode>
<stylenode LOCALIZED_TEXT="AutomaticLayout.level,2" COLOR="#3b4252" BACKGROUND_COLOR="#ebcb8b">
<font SIZE="14"/>
</stylenode>
<stylenode LOCALIZED_TEXT="AutomaticLayout.level,3" COLOR="#2e3440" BACKGROUND_COLOR="#a3be8c">
<font SIZE="12"/>
</stylenode>
<stylenode LOCALIZED_TEXT="AutomaticLayout.level,4" COLOR="#2e3440" BACKGROUND_COLOR="#b48ead">
<font SIZE="11"/>
</stylenode>
<stylenode LOCALIZED_TEXT="AutomaticLayout.level,5" COLOR="#e5e9f0" BACKGROUND_COLOR="#5e81ac">
<font SIZE="11"/>
</stylenode>
<stylenode LOCALIZED_TEXT="AutomaticLayout.level,6" BACKGROUND_COLOR="#81a1c1">
<font SIZE="10"/>
</stylenode>
<stylenode LOCALIZED_TEXT="AutomaticLayout.level,7" BACKGROUND_COLOR="#88c0d0">
<font SIZE="10"/>
</stylenode>
<stylenode LOCALIZED_TEXT="AutomaticLayout.level,8" BACKGROUND_COLOR="#8fbcbb">
<font SIZE="10"/>
</stylenode>
<stylenode LOCALIZED_TEXT="AutomaticLayout.level,9" BACKGROUND_COLOR="#d8dee9">
<font SIZE="10"/>
</stylenode>
<stylenode LOCALIZED_TEXT="AutomaticLayout.level,10" BACKGROUND_COLOR="#e5e9f0">
<font SIZE="9"/>
</stylenode>
</stylenode>
</stylenode>
</map_styles>
</hook>
<hook URI="img/book_cover_python-with-office.png" SIZE="1.0" NAME="ExternalObject"/>
<node TEXT="Part 1 Python Basics" POSITION="bottom_or_right" ID="ID_1592639027" CREATED="1697644547172" MODIFIED="1697644558735">
<node TEXT="Ch 1 Python Installation" FOLDED="true" ID="ID_837781511" CREATED="1697644560570" MODIFIED="1697644582164">
<node TEXT="1.1 Get to know Python" ID="ID_177994748" CREATED="1697644583991" MODIFIED="1697644592150"/>
<node TEXT="1.2 Install Python" ID="ID_916561358" CREATED="1697644592596" MODIFIED="1697644597548"/>
<node TEXT="1.3 Install Pycharm / VS Code" ID="ID_1993057507" CREATED="1697644602060" MODIFIED="1697644612149"/>
<node TEXT="1.4 First Line of Code in Python" ID="ID_1338572120" CREATED="1697644613468" MODIFIED="1697644624301"/>
<node TEXT="1.5 Simple Interaction" ID="ID_851393938" CREATED="1697644626875" MODIFIED="1697644633285"/>
</node>
<node TEXT="Ch 2 Data Structure" FOLDED="true" ID="ID_59096177" CREATED="1697644636709" MODIFIED="1697644641652">
<node TEXT="Six Data Type" ID="ID_1045571388" CREATED="1697661358029" MODIFIED="1697661365055">
<node TEXT="2.1 Numeric Type" POSITION="bottom_or_right" ID="ID_1279470095" CREATED="1697644641656" MODIFIED="1697644650606">
<node TEXT="2.1.1 Integer" ID="ID_1440840805" CREATED="1697675144370" MODIFIED="1697833762210">
<arrowlink DESTINATION="ID_1755689851"/>
</node>
<node TEXT="2.1.2 Floating" ID="ID_693349649" CREATED="1697675155555" MODIFIED="1697833766956">
<arrowlink DESTINATION="ID_1755689851"/>
</node>
<node TEXT="2.1.3 Boolean" ID="ID_54413378" CREATED="1697675169003" MODIFIED="1697833771108">
<arrowlink DESTINATION="ID_1755689851"/>
</node>
<node TEXT="2.1.4 Complex" ID="ID_1817807538" CREATED="1697675173738" MODIFIED="1697834281397">
<arrowlink DESTINATION="ID_1755689851"/>
</node>
</node>
<node TEXT="2.2 String" POSITION="bottom_or_right" ID="ID_1363234231" CREATED="1697644658356" MODIFIED="1697644661260">
<node TEXT="2.2.1 Characters Encode" ID="ID_1794812203" CREATED="1697674990721" MODIFIED="1697675002652"/>
<node TEXT="2.2.2 Strings" ID="ID_1788132964" CREATED="1697675008568" MODIFIED="1697675012034"/>
<node TEXT="2.2.3 转义字符" ID="ID_479683271" CREATED="1697675016089" MODIFIED="1697675029757"/>
<node TEXT="2.2.4 String Index" ID="ID_599400545" CREATED="1697675030061" MODIFIED="1697675038476"/>
<node TEXT="2.2.5 String Slice" ID="ID_1783102571" CREATED="1697675041903" MODIFIED="1697675047332"/>
<node TEXT="2.2.6 Query String Elements" ID="ID_1589915497" CREATED="1697675051930" MODIFIED="1697675058716"/>
<node TEXT="2.2.7 拼接字符串" ID="ID_1395937016" CREATED="1697675061860" MODIFIED="1697675069221"/>
<node TEXT="2.2.8 Type Converting" ID="ID_1755521625" CREATED="1697675072205" MODIFIED="1697675077470"/>
<node TEXT="2.2.9 Replace String" ID="ID_483000181" CREATED="1697675081227" MODIFIED="1697675088500"/>
<node TEXT="2.2.10 Upper / Lower Converting" ID="ID_1641681183" CREATED="1697675089411" MODIFIED="1697675106625"/>
<node TEXT="2.2.11 Split String" ID="ID_288914774" CREATED="1697675108281" MODIFIED="1697675113195"/>
<node TEXT="2.2.12 Formatting String" ID="ID_1315033502" CREATED="1697675116419" MODIFIED="1697675136586"/>
</node>
<node TEXT="2.3 List" POSITION="bottom_or_right" ID="ID_1652937508" CREATED="1697644705573" MODIFIED="1697833697024">
<arrowlink DESTINATION="ID_942292340"/>
<node TEXT="2.3.1 New Create List" ID="ID_1621398277" CREATED="1697674902225" MODIFIED="1697674909761"/>
<node TEXT="2.3.2 Query List Elements" ID="ID_1185993128" CREATED="1697674912570" MODIFIED="1697674920337"/>
<node TEXT="2.3.3 Add List Elements" ID="ID_310141459" CREATED="1697674924376" MODIFIED="1697674932634"/>
<node TEXT="2.3.4 Modify List Elements" ID="ID_1882892970" CREATED="1697674935320" MODIFIED="1697674943378"/>
<node TEXT="2.3.5 Delete List Elements" ID="ID_1813288784" CREATED="1697674943680" MODIFIED="1697674950314"/>
<node TEXT="2.3.6 Merge Multiple Lists" ID="ID_1460869328" CREATED="1697674955216" MODIFIED="1697674962701"/>
<node TEXT="2.3.7 List Element Statistics" ID="ID_1681107323" CREATED="1697674965351" MODIFIED="1697674974483"/>
</node>
<node TEXT="2.4 Tuple" POSITION="bottom_or_right" ID="ID_855303431" CREATED="1697644708964" MODIFIED="1697833778006">
<arrowlink DESTINATION="ID_1755689851"/>
<node TEXT="2.4.1 New Create Tuple" ID="ID_1806009345" CREATED="1697677496642" MODIFIED="1697677503156"/>
<node TEXT="2.4.2 Access Tuple" ID="ID_1301335284" CREATED="1697677556634" MODIFIED="1697677561134"/>
</node>
<node TEXT="2.5 Dictionary" POSITION="bottom_or_right" ID="ID_414058293" CREATED="1697644715621" MODIFIED="1697833704725">
<arrowlink DESTINATION="ID_942292340"/>
<node TEXT="2.5.1 New Create Dictionary" POSITION="bottom_or_right" ID="ID_1987537536" CREATED="1697677561291" MODIFIED="1697677675515"/>
<node TEXT="2.5.2 Access Dictionary Elements" FOLDED="true" POSITION="bottom_or_right" ID="ID_1096534034" CREATED="1697677782939" MODIFIED="1697677793164">
<node TEXT="dict_keys()" ID="ID_1400534878" CREATED="1697677960515" MODIFIED="1697677992294"/>
<node TEXT="dict_values()" ID="ID_967199789" CREATED="1697677968321" MODIFIED="1697677988573"/>
<node TEXT="dict_items()" ID="ID_1711207945" CREATED="1697677972248" MODIFIED="1697677985216"/>
</node>
<node TEXT="2.5.3 Add Dictionary Elements" POSITION="bottom_or_right" ID="ID_42190998" CREATED="1697677994707" MODIFIED="1697678441176"/>
<node TEXT="2.5.4 Modify Dictionary Elements" POSITION="bottom_or_right" ID="ID_1233187802" CREATED="1697678070304" MODIFIED="1697678082847"/>
<node TEXT="2.5.5 Delete Dictionary Elements" POSITION="bottom_or_right" ID="ID_1217739597" CREATED="1697678097039" MODIFIED="1697678105613"/>
</node>
<node TEXT="2.6 Set" POSITION="bottom_or_right" ID="ID_809020653" CREATED="1697644722782" MODIFIED="1697833714588">
<arrowlink DESTINATION="ID_942292340"/>
<node TEXT="2.6.1 New Create Set" ID="ID_1072539154" CREATED="1697678149747" MODIFIED="1697678157327"/>
<node TEXT="2.6.2 交差并补
intersection(&), difference(-), union(|), complement(^)" ID="ID_1334320277" CREATED="1697678222495" MODIFIED="1697750071088"/>
<node TEXT="2.6.3 Add Set Elements" ID="ID_433092702" CREATED="1697678349022" MODIFIED="1697678357229"/>
<node TEXT="2.6.4 Delete Set Elements" ID="ID_1250664898" CREATED="1697678361891" MODIFIED="1697678369159"/>
</node>
<node TEXT="2.7 None Type" POSITION="bottom_or_right" ID="ID_863782771" CREATED="1697644729149" MODIFIED="1697678395326"/>
</node>
<node TEXT="2.8 可变类型与拷贝" ID="ID_1871920744" CREATED="1697678412375" MODIFIED="1697678422030">
<node TEXT="2.8.1 可变类型 Changeable Type" ID="ID_942292340" CREATED="1697759272300" MODIFIED="1697824342633"/>
<node TEXT="2.8.1 不可变类型 Non-Changeable Type" ID="ID_1755689851" CREATED="1697824223340" MODIFIED="1697824353496"/>
<node TEXT="2.8.2 浅拷贝和深拷贝" ID="ID_1615458542" CREATED="1697759297567" MODIFIED="1697759309592">
<node TEXT="module: copy" ID="ID_1362805103" CREATED="1697759334476" MODIFIED="1697759338254"/>
</node>
</node>
<node TEXT="2.9 Public Methods" ID="ID_1871793617" CREATED="1697644733565" MODIFIED="1697644751653">
<node TEXT="type()" ID="ID_1294025124" CREATED="1697842657619" MODIFIED="1697842662860"/>
<node TEXT="len()" ID="ID_899205959" CREATED="1697842663589" MODIFIED="1697842665750"/>
<node TEXT="max(), min()" ID="ID_1100320387" CREATED="1697842665933" MODIFIED="1697842672734"/>
<node TEXT="id()" ID="ID_1558503667" CREATED="1697842673149" MODIFIED="1697842676847"/>
<node TEXT="ord(), chr()" ID="ID_408394394" CREATED="1697842677052" MODIFIED="1697842681617"/>
<node TEXT="str(), int(), float()" ID="ID_51009567" CREATED="1697842681771" MODIFIED="1697842687893"/>
<node TEXT="dict(), list(), tuple(), set()" ID="ID_1577164578" CREATED="1697842690638" MODIFIED="1697842702030"/>
<node TEXT="append()" ID="ID_843463397" CREATED="1697842702255" MODIFIED="1697842704758"/>
<node TEXT="insert()" ID="ID_1355672040" CREATED="1697842704956" MODIFIED="1697842707986"/>
<node TEXT="extend()" ID="ID_1425721600" CREATED="1697842708405" MODIFIED="1697842711279"/>
<node TEXT="reverse()" ID="ID_641631476" CREATED="1697842711470" MODIFIED="1697842714850"/>
<node TEXT="sort()" ID="ID_1813057890" CREATED="1697842715023" MODIFIED="1697842717870"/>
<node TEXT="count()" ID="ID_1074360672" CREATED="1697842718324" MODIFIED="1697842720829"/>
<node TEXT="index()" ID="ID_1377414150" CREATED="1697842721029" MODIFIED="1697842724205"/>
<node TEXT="remove()" ID="ID_1717659104" CREATED="1697842724413" MODIFIED="1697842726599"/>
<node TEXT="get()" ID="ID_1049455253" CREATED="1697842726859" MODIFIED="1697842729479"/>
<node TEXT="clear()" ID="ID_200804264" CREATED="1697842729718" MODIFIED="1697842732313"/>
<node TEXT="copy(), deepcopy()" ID="ID_258491260" CREATED="1697842732662" MODIFIED="1697842739429"/>
<node TEXT="pop()" ID="ID_72124712" CREATED="1697842739603" MODIFIED="1697842743056"/>
<node TEXT="keys(), values(), items()" ID="ID_339453120" CREATED="1697842743246" MODIFIED="1697842749839"/>
<node TEXT="update()" ID="ID_37893305" CREATED="1697842750171" MODIFIED="1697842752871"/>
<node TEXT="add()" ID="ID_984921496" CREATED="1697842753020" MODIFIED="1697842754624"/>
</node>
<node TEXT="2.10 运算符" ID="ID_1670318155" CREATED="1697644751901" MODIFIED="1697644761494">
<node TEXT="2.10.1 算术运算符" ID="ID_1659836768" CREATED="1697759378565" MODIFIED="1697759411048">
<node TEXT="+" ID="ID_1467172978" CREATED="1698005404263" MODIFIED="1698005406376"/>
<node TEXT="-" ID="ID_778616941" CREATED="1698005406839" MODIFIED="1698005408162"/>
<node TEXT="*" ID="ID_1020088743" CREATED="1698005408431" MODIFIED="1698005410425"/>
<node TEXT="/" ID="ID_997396774" CREATED="1698005410831" MODIFIED="1698005413347"/>
<node TEXT="**" ID="ID_1098977826" CREATED="1698005413916" MODIFIED="1698005427737"/>
<node TEXT="//" ID="ID_1829111511" CREATED="1698005428463" MODIFIED="1698005431049"/>
<node TEXT="%" ID="ID_90804481" CREATED="1698005431615" MODIFIED="1698005436309"/>
</node>
<node TEXT="2.10.2 比较运算符" ID="ID_1380847217" CREATED="1697759414675" MODIFIED="1697759425125">
<node TEXT=">, >=" ID="ID_1480931876" CREATED="1698005446111" MODIFIED="1698005459370"/>
<node TEXT="==" ID="ID_1953027461" CREATED="1698005459583" MODIFIED="1698005463329"/>
<node TEXT="<, <=" ID="ID_1424113055" CREATED="1698005464007" MODIFIED="1698005476654"/>
<node TEXT="!=" ID="ID_1472358308" CREATED="1698005477367" MODIFIED="1698005481025"/>
</node>
<node TEXT="2.10.3 赋值运算符" ID="ID_1520875329" CREATED="1697759429823" MODIFIED="1697759438959">
<node TEXT="=" ID="ID_1042444014" CREATED="1698005516336" MODIFIED="1698005517862"/>
<node TEXT="+=: a=a+5 can be a += 5" ID="ID_695589510" CREATED="1698005561103" MODIFIED="1698005585311"/>
<node TEXT="++: a++ can be a=a+1" ID="ID_1514315211" CREATED="1698005594743" MODIFIED="1698005611340"/>
</node>
<node TEXT="2.10.4 逻辑运算符" ID="ID_1126292249" CREATED="1697759443092" MODIFIED="1697759454354">
<node TEXT="and" ID="ID_740426532" CREATED="1698005651695" MODIFIED="1698005653528"/>
<node TEXT="or" ID="ID_926533992" CREATED="1698005653679" MODIFIED="1698005654480"/>
<node TEXT="not" ID="ID_1758904939" CREATED="1698005654672" MODIFIED="1698005655737"/>
</node>
<node TEXT="2.10.5 成员运算符" ID="ID_675089928" CREATED="1697759454894" MODIFIED="1697759471094">
<node TEXT="in" ID="ID_1861266957" CREATED="1697759473982" MODIFIED="1697759476288"/>
<node TEXT="not in" ID="ID_1215413116" CREATED="1697759476463" MODIFIED="1697759479070"/>
</node>
<node TEXT="2.10.6 身份运算符" ID="ID_494380658" CREATED="1697759483092" MODIFIED="1697759493870">
<node TEXT="is" ID="ID_950332199" CREATED="1698006203129" MODIFIED="1698006210002"/>
<node TEXT="is not" ID="ID_1421082813" CREATED="1698006210168" MODIFIED="1698006212924"/>
</node>
</node>
<node TEXT="2.11 Traverse 遍历" ID="ID_459798000" CREATED="1697644764615" MODIFIED="1697644775054"/>
<node TEXT="2.12 Comprehensions 推导式" ID="ID_658640374" CREATED="1697644776340" MODIFIED="1698007504694">
<node TEXT="List Comprehensions" ID="ID_427706249" CREATED="1698006450776" MODIFIED="1698006457276"/>
<node TEXT="Dict Comprehensions" ID="ID_542125056" CREATED="1698006457466" MODIFIED="1698006463564"/>
<node TEXT="Set Comprehensions" ID="ID_880591559" CREATED="1698006463736" MODIFIED="1698006473001"/>
<node TEXT="Generator Comprehensions" ID="ID_1060913496" CREATED="1698006473175" MODIFIED="1698006480784"/>
<node TEXT="Nested Comprehensions" ID="ID_1758146796" CREATED="1698006906705" MODIFIED="1698006912593"/>
</node>
</node>
<node TEXT="Ch 3 Functions" FOLDED="true" ID="ID_157578911" CREATED="1697644784644" MODIFIED="1697644791014">
<node TEXT="3.1 Basic Structure" ID="ID_555053913" CREATED="1697644796068" MODIFIED="1697644808958">
<node TEXT="3.1.1 顺序结构" ID="ID_1804817382" CREATED="1697644808960" MODIFIED="1697644816862"/>
<node TEXT="3.1.2 选择结构" ID="ID_1351235544" CREATED="1697644817150" MODIFIED="1697644829182">
<node TEXT="if {}
if {}" ID="ID_923623230" CREATED="1698265249122" MODIFIED="1698265259775"/>
<node TEXT="if {}
else {}" ID="ID_564864522" CREATED="1698265260397" MODIFIED="1698265276959"/>
<node TEXT="if {}
elif {}
else {}" ID="ID_593376334" CREATED="1698265280596" MODIFIED="1698265298560"/>
<node TEXT="if :
if not :" ID="ID_1293602573" CREATED="1698265299549" MODIFIED="1698265317583"/>
<node TEXT="Ternary Operating 三目运算" ID="ID_630932408" CREATED="1698265357357" MODIFIED="1698265512805"/>
</node>
<node TEXT="3.1.3 循环结构" ID="ID_1389508551" CREATED="1697644822565" MODIFIED="1697644835029">
<node TEXT="while condition: {}" ID="ID_901597065" CREATED="1698266897898" MODIFIED="1698267000154"/>
<node TEXT="for i in range(): {}" ID="ID_796952160" CREATED="1698266920900" MODIFIED="1698266927252"/>
</node>
</node>
<node TEXT="3.2 Get to know Function" ID="ID_1042805088" CREATED="1697644835992" MODIFIED="1697644842951">
<node TEXT="define function: def function_name():" ID="ID_588639816" CREATED="1698269385998" MODIFIED="1698269405079"/>
</node>
<node TEXT="3.3 Parameters in Function" ID="ID_1862578952" CREATED="1697644843420" MODIFIED="1697644850981">
<node TEXT="3.3.1 形参(parameter)和实参(argument)" ID="ID_1708991122" CREATED="1697759685731" MODIFIED="1698269537009">
<node TEXT="A parameter is a variable in the function defintion" ID="ID_1425499135" CREATED="1698269537805" MODIFIED="1698269553046"/>
<node TEXT="An argument is the value passed to the function when it is called" ID="ID_1506795531" CREATED="1698269553439" MODIFIED="1698269566264"/>
</node>
<node TEXT="3.3.2 默认参数" ID="ID_1258796465" CREATED="1697759700351" MODIFIED="1697759705270"/>
<node TEXT="3.3.3 不定长参数" ID="ID_1909852086" CREATED="1697759708012" MODIFIED="1697759716003">
<node TEXT="*args: additional positional parameter ==> tuple" ID="ID_1926645426" CREATED="1698269943779" MODIFIED="1698270046014"/>
<node TEXT="**kwargs: additional keyword-baesd parameter ==> dict" ID="ID_668503728" CREATED="1698269949337" MODIFIED="1698270051469"/>
</node>
</node>
<node TEXT="3.4 Return Value of Function" ID="ID_245593469" CREATED="1697644855109" MODIFIED="1697644861821">
<node TEXT="return" ID="ID_1496288937" CREATED="1698270097213" MODIFIED="1698270099902"/>
</node>
<node TEXT="3.5 Pack 组包和 Unpack 解包" ID="ID_292127285" CREATED="1697644862181" MODIFIED="1698428260379" LINK="https://www.geeksforgeeks.org/packing-and-unpacking-arguments-in-python/">
<node TEXT="Unpacking" ID="ID_649923714" CREATED="1698428136862" MODIFIED="1698428139741"/>
<node TEXT="Packing" ID="ID_998490827" CREATED="1698428134139" MODIFIED="1698428136188"/>
</node>
<node TEXT="3.6 Variable Scope
 变量作用域" ID="ID_965774638" CREATED="1697644871236" MODIFIED="1698265785883"/>
<node TEXT="3.7 lambda Function 匿名函数" ID="ID_294107747" CREATED="1697644876171" MODIFIED="1698439635273"/>
</node>
<node TEXT="Ch 4 Class and Object" FOLDED="true" ID="ID_1064440122" CREATED="1697644890733" MODIFIED="1697644897955">
<node TEXT="4.1 Class and Object (Instance)" FOLDED="true" ID="ID_306967212" CREATED="1697644897958" MODIFIED="1699809730780" LINK="https://www.geeksforgeeks.org/python-classes-and-objects/">
<node TEXT="4.1.1 instantiate object 实例化对象" ID="ID_1289590776" CREATED="1698449462886" MODIFIED="1698449491775">
<node TEXT="Class" FOLDED="true" ID="ID_82255860" CREATED="1699807175314" MODIFIED="1699807176901">
<node TEXT="A class is a user-defined blueprint or prototype from which object are created." POSITION="bottom_or_right" ID="ID_1149511569" CREATED="1699807014586" MODIFIED="1699807054067"/>
<node TEXT="Classes provide a means of bundling data and functionality together." POSITION="bottom_or_right" ID="ID_196578716" CREATED="1699807054514" MODIFIED="1699807070148"/>
<node TEXT="Creating a new class creates a new type of object, allowing new instances of that type to be made." POSITION="bottom_or_right" ID="ID_579220164" CREATED="1699807070374" MODIFIED="1699807096348"/>
<node TEXT="Class Definition:
class ClassName:
 # Statement" POSITION="bottom_or_right" ID="ID_1683599271" CREATED="1699807110275" MODIFIED="1699807129219"/>
</node>
<node TEXT="Object" FOLDED="true" ID="ID_1763116279" CREATED="1699807185327" MODIFIED="1699807186836">
<node TEXT="An Object is an instance of a Class." ID="ID_528152201" CREATED="1699807188394" MODIFIED="1699807197340"/>
<node ID="ID_1530208344" CREATED="1699807197797" MODIFIED="1699807232546"><richcontent TYPE="NODE">
<html>
<head>
</head>
<body>
<p>
A class is like a blueprint while an instance is a copy of the class with <span style="font-style: italic;">Actual Values</span>.
</p>
</body>
</html>
</richcontent>
</node>
<node ID="ID_1460005252" CREATED="1699807245577" MODIFIED="1699807345551"><richcontent TYPE="NODE">
<html>
<head>
</head>
<body>
<p>
An object consists of <span style="font-weight: bold;">State</span><span style="font-weight: normal;">  (represented by the attributes of an object, also reflects the properties of an object), </span><span style="font-weight: bold;">Behavior</span><span style="font-weight: normal;">  (represented by the methods of an object, also reflects the response of an object to other object), and </span><span style="font-weight: bold;">Identity</span><span style="font-weight: normal;">  (gives an unique name to an object and enables one object to interact with other objects)</span>
</p>
</body>
</html>
</richcontent>
</node>
<node TEXT="Object Definition:
obj = ClassName()
print(obj.attr)" POSITION="bottom_or_right" ID="ID_1937297776" CREATED="1699807129848" MODIFIED="1699811773262"/>
</node>
</node>
<node TEXT="4.1.2 initialization method 初始化方法:
 __init__(self [, args, ...])" ID="ID_1557837685" CREATED="1698449634001" MODIFIED="1698449749603"/>
<node TEXT="4.1.3 Object Property and Method 对象属性与方法" ID="ID_1187451135" CREATED="1698449917681" MODIFIED="1698449936240"/>
</node>
<node TEXT="4.2 Private Property and Private Method
私有属性和私有方法" FOLDED="true" ID="ID_818871696" CREATED="1697644908923" MODIFIED="1698450229251">
<node TEXT="3 types of Class resources" ID="ID_1117123347" CREATED="1699833843886" MODIFIED="1699835266639" LINK="https://www.tutorialsteacher.com/python/public-private-protected-modifiers">
<node TEXT="Public" FOLDED="true" ID="ID_787772040" CREATED="1699833859779" MODIFIED="1699833861702">
<node TEXT="All members in a Python class are public by default" ID="ID_1974338130" CREATED="1699833907270" MODIFIED="1699833911872"/>
</node>
<node TEXT="Protected" FOLDED="true" POSITION="bottom_or_right" ID="ID_1703721087" CREATED="1699833867779" MODIFIED="1699833870104">
<node TEXT="Protected members of a class are accessible from within the class and are also available to its sub-classes" ID="ID_1220619719" CREATED="1699833926535" MODIFIED="1699833930751"/>
<node TEXT="No other environment is permitted access to it." ID="ID_1760190956" CREATED="1699833936926" MODIFIED="1699833939158"/>
<node TEXT="This enables specific resources of the parent class to be inherited by the child class." ID="ID_536653579" CREATED="1699833947961" MODIFIED="1699833955529"/>
<node TEXT="Python's convention to make an instance variable protected is to add a prefix _ (single underscore) to it." ID="ID_928313713" CREATED="1699833970722" MODIFIED="1699833972962"/>
</node>
<node TEXT="Private" FOLDED="true" ID="ID_421632683" CREATED="1699833861896" MODIFIED="1699833864913">
<node TEXT="Private members of the class are denied access from the environment outside the class." POSITION="bottom_or_right" ID="ID_92860465" CREATED="1699833594963" MODIFIED="1699833621708"/>
<node TEXT="Private Property to hide Property: __(propertyName)" POSITION="bottom_or_right" ID="ID_614392566" CREATED="1699815676696" MODIFIED="1699815710604"/>
<node TEXT="Private Method: __(methodName)" POSITION="bottom_or_right" ID="ID_514403379" CREATED="1699815744689" MODIFIED="1699815756200"/>
</node>
</node>
<node TEXT="isinstance() built-in function" ID="ID_128593374" CREATED="1699815756398" MODIFIED="1699815766968"/>
</node>
<node TEXT="4.3 Magic(Dunder) Method 魔法方法" FOLDED="true" ID="ID_1604520930" CREATED="1697644920749" MODIFIED="1700163752284">
<node TEXT="Dunder or Magic methods in Python are the methods having two prefixs and suffix underscores in the method name." ID="ID_1176965787" CREATED="1699844411894" MODIFIED="1699844521246"><richcontent TYPE="NOTE">
<html>
<head>
</head>
<body>
<p>
Dunder: means "Double Under (Underscores)"
</p>
<p>
Use "dir(int)" to list the magic functions in Python
</p>
</body>
</html></richcontent>
</node>
<node TEXT="General Magic Methods" ID="ID_749193757" CREATED="1698450248841" MODIFIED="1700163752283"><richcontent TYPE="NOTE">
<html>
<head>
</head>
<body>
<p>
Source: https://www.geeksforgeeks.org/dunder-magic-methods-python/
</p>
</body>
</html></richcontent>
<node TEXT="Initialization and Construction" FOLDED="true" ID="ID_1249082790" CREATED="1699844579000" MODIFIED="1699845664125">
<arrowlink DESTINATION="ID_1759549814"/>
<node TEXT="__new__():To get called in an object's instantiation. 实例化对象时自动执行" POSITION="bottom_or_right" ID="ID_146526138" CREATED="1698450261049" MODIFIED="1699845649589">
<font BOLD="true"/>
</node>
<node TEXT="__init__():To get called by the __new__ method. 实例化对象之后自动执行" POSITION="bottom_or_right" ID="ID_897819321" CREATED="1698450270262" MODIFIED="1699845649597">
<font BOLD="true"/>
</node>
<node TEXT="__del__():It is the destructor. 对象被销毁时自动执行" POSITION="bottom_or_right" ID="ID_182954151" CREATED="1698450274563" MODIFIED="1699845649598">
<font BOLD="true"/>
</node>
</node>
<node TEXT="Numeric magic methods" FOLDED="true" ID="ID_622539699" CREATED="1699844613417" MODIFIED="1699844622764">
<node TEXT="__trunc__(self): implements behavior for math.trunc()" ID="ID_1954406354" CREATED="1699844622766" MODIFIED="1699844643017"/>
<node TEXT="__ceil__(self): implements behavior for math.ceil()" ID="ID_534601202" CREATED="1699844683997" MODIFIED="1699844712540"/>
<node TEXT="__floor__(self): implements behavior for math.floor()" ID="ID_5506898" CREATED="1699844712948" MODIFIED="1699844728842"/>
<node TEXT="__round__(self,n): implements behavior for the built-in round()" ID="ID_946274052" CREATED="1699844729117" MODIFIED="1699844745596"/>
<node TEXT="__invert__(self): implements behavior for inversion using the ~ operator" ID="ID_611790540" CREATED="1699844745906" MODIFIED="1699844766606"/>
<node TEXT="__abs__(self): implements behavior for the built-in abs()" ID="ID_1890908365" CREATED="1699844766901" MODIFIED="1699844796193"/>
<node TEXT="__neg__(self): implements behavior for negation" ID="ID_699238266" CREATED="1699844796722" MODIFIED="1699844810808"/>
<node TEXT="__pos__(self): implements behavior for unary positive" ID="ID_287271183" CREATED="1699844810977" MODIFIED="1699844831395"/>
</node>
<node TEXT="Arithmetic operators" FOLDED="true" ID="ID_773324412" CREATED="1699844837811" MODIFIED="1699844846002">
<node TEXT="__add__(self,other): to get called on the first object when the "+" operator is used" ID="ID_1387473755" CREATED="1699844846005" MODIFIED="1699845060053"/>
<node TEXT="__sub__(self,other): to get called when subtracting by the "-" operator" ID="ID_475862957" CREATED="1699844948252" MODIFIED="1699845084743"/>
<node TEXT="__mul__(self.other): to get called when multiplying by the "*" operator" ID="ID_484479970" CREATED="1699845085091" MODIFIED="1699845105847"/>
<node TEXT="__floordiv__(self,other): to get called when dividing by the "//" operator (whole-number division)" ID="ID_1223345168" CREATED="1699845106211" MODIFIED="1699845153232"/>
<node TEXT="__div__(self,other): to get called when dividing by the "/" operator, it overrides the division operation for a custom object in Python 2" ID="ID_511351878" CREATED="1699845153458" MODIFIED="1699845301861"/>
<node TEXT="__truediv__(self,other): to get called when dividing by the "/" operator, in Python 3, it replaces __div__" ID="ID_1125711573" CREATED="1699845188220" MODIFIED="1699845325655"/>
<node TEXT="__mod__(self,other): to get called when getting the remainder after the whole-number division by using the modulo operator "%"" ID="ID_1799377193" CREATED="1699845327074" MODIFIED="1699845374942"/>
<node TEXT="__divmod__(self,other): return a pair (a // b, a % b) for integers." ID="ID_830454609" CREATED="1699845375692" MODIFIED="1699845473663"/>
<node TEXT="__pow__(self,other,modulo): implements behavior for exponents using the ** operator" ID="ID_306861028" CREATED="1699845473899" MODIFIED="1699845502131"/>
<node TEXT="__lshift__(self,other): implements left bitwise shift using the << operator" ID="ID_1801859010" CREATED="1699845502743" MODIFIED="1699845533282"/>
<node TEXT="__rshift__(self,other): implements right bitwise shift using the >> operator." ID="ID_920995589" CREATED="1699845533624" MODIFIED="1699845556328"/>
<node TEXT="__and__(self,other): implements bitwise and using the & operator" ID="ID_1467164900" CREATED="1699845557941" MODIFIED="1699845576876"/>
<node TEXT="__or__(self,other): implements bitwise or using the | operator" ID="ID_1470523216" CREATED="1699845577066" MODIFIED="1699845591576"/>
<node TEXT="__xor__(self,other): implements bitwise xor using the ^ operator" ID="ID_1685001552" CREATED="1699845591739" MODIFIED="1699845622186"/>
</node>
<node TEXT="String Magic Methods" ID="ID_1614088018" CREATED="1699845624619" MODIFIED="1699845631014">
<node TEXT="__str__(self):Defines behavior for when str() is called on an instance of your class. 打印对象时自动执行" POSITION="bottom_or_right" ID="ID_443109697" CREATED="1698450279448" MODIFIED="1699845734302">
<font BOLD="true"/>
</node>
<node TEXT="__repr__(self): to get called by built-in repr() method to return a machine readable representation of a type" POSITION="bottom_or_right" ID="ID_633116753" CREATED="1699845676693" MODIFIED="1699845762317"/>
<node TEXT="__unicode__(self): this method to return an unicode string of the type." POSITION="bottom_or_right" ID="ID_1172300600" CREATED="1699845762532" MODIFIED="1699845783670"/>
<node TEXT="__format__(self,formatstr): return a new style of string" POSITION="bottom_or_right" ID="ID_1385741168" CREATED="1699845820395" MODIFIED="1699845840278"/>
<node TEXT="__hash__(self): it has to return an integer, and its result is used for quick key comparison in dictionaries" POSITION="bottom_or_right" ID="ID_1505834532" CREATED="1699845843082" MODIFIED="1699845880469"/>
<node TEXT="__nonzero__(self): defines behavior for when bool() is called on an instance of your class" POSITION="bottom_or_right" ID="ID_933531615" CREATED="1699845881571" MODIFIED="1699845907916"/>
<node TEXT="__dir__(self): this methods to return a list of attributes of a class" POSITION="bottom_or_right" ID="ID_1244564382" CREATED="1699845916694" MODIFIED="1699845935079"/>
<node TEXT="__sizeof__(self): it returns the size of the object" POSITION="bottom_or_right" ID="ID_1868346996" CREATED="1699845935403" MODIFIED="1699845948908"/>
</node>
<node TEXT="Comparison magic methods" FOLDED="true" ID="ID_927082753" CREATED="1699847403116" MODIFIED="1699847414083">
<node TEXT="__eq__(self,other): defines behavior for the equality operator, ==" ID="ID_1393942386" CREATED="1699847414085" MODIFIED="1699847449918"/>
<node TEXT="__ne__(self,other): defines behavior for the inequality operator, !=" ID="ID_1409515731" CREATED="1699847450712" MODIFIED="1699847475879"/>
<node TEXT="__lt__(self,other): defines behavior for the less-than operator, <" ID="ID_1805713151" CREATED="1699847476100" MODIFIED="1699847496822"/>
<node TEXT="__gt__(self,other): defines behavior for the greator-than operator, >" ID="ID_1843262746" CREATED="1699847497020" MODIFIED="1699847520828"/>
<node TEXT="__le__(self,other): defines behavior for the less-than-or-equal-to operator, <=" ID="ID_263690200" CREATED="1699847521310" MODIFIED="1699847563805"/>
<node TEXT="__ge__(self,other): defines behavior for the greater-than-or-equal-to operator, >=" ID="ID_1937507824" CREATED="1699847564005" MODIFIED="1699847589293"/>
</node>
<node TEXT="Iteration magic methods" ID="ID_1086800732" CREATED="1699847620251" MODIFIED="1699847632677">
<node TEXT="__iter__():遍历对象时自动执行" POSITION="bottom_or_right" ID="ID_1090348453" CREATED="1698450285560" MODIFIED="1700165868217">
<arrowlink DESTINATION="ID_794295171"/>
<arrowlink DESTINATION="ID_1111069719"/>
<font BOLD="true"/>
</node>
<node TEXT="__next__():生成数据返回" POSITION="bottom_or_right" ID="ID_1771472763" CREATED="1698450289848" MODIFIED="1700165875074">
<arrowlink DESTINATION="ID_794295171"/>
<font BOLD="true"/>
</node>
</node>
</node>
<node TEXT="4.3.1 Object's Lifecycle 对象的生命周期" ID="ID_1759549814" CREATED="1698450293968" MODIFIED="1698450307855"/>
<node TEXT="4.3.2 Iterable Object 可迭代对象" ID="ID_579402736" CREATED="1698450314562" MODIFIED="1698450345233">
<node TEXT="Iterable(可迭代对象):如果一个类实现了__iter__()的对象" ID="ID_1111069719" CREATED="1699844210668" MODIFIED="1699844246473"/>
<node TEXT="Iterator(迭代器):一个既实现了__iter__()又实现了__next__()的类的对象" ID="ID_794295171" CREATED="1699844246947" MODIFIED="1699844291021"/>
<node TEXT="Python的list、dict等容器是可迭代对象,但不是迭代器" ID="ID_895065417" CREATED="1699844296715" MODIFIED="1699844331380"/>
</node>
</node>
<node TEXT="4.4 Inheritance and Polymorphism
 继承和多态" FOLDED="true" ID="ID_472307915" CREATED="1697644926534" MODIFIED="1698450398964">
<node TEXT="4.4.1 Inheritance" ID="ID_926241085" CREATED="1698450406584" MODIFIED="1698450411691"/>
<node TEXT="4.4.2 Polymorphism" ID="ID_83839837" CREATED="1698450416820" MODIFIED="1698450423674"/>
</node>
<node TEXT="4.5 Class Method and Static Method
类方法与静态方法" ID="ID_1715010967" CREATED="1697644938311" MODIFIED="1698450442740">
<node TEXT="4.5.1 Decorators 装饰器" ID="ID_412139647" CREATED="1698450442999" MODIFIED="1698450477866"/>
<node TEXT="4.5.2 Class method" ID="ID_1772618114" CREATED="1698450486280" MODIFIED="1698450493733"/>
<node TEXT="4.5.3 Static method" ID="ID_1651781316" CREATED="1698450498952" MODIFIED="1698450505068"/>
<node TEXT="4.5.4 Property decorators" ID="ID_448296966" CREATED="1698450508777" MODIFIED="1698450515933"/>
</node>
</node>
<node TEXT="Ch 5 Other Knowledge Points" FOLDED="true" ID="ID_1685697102" CREATED="1697644950270" MODIFIED="1697644963461">
<node TEXT="5.1 程序异常 Exceptions" FOLDED="true" ID="ID_1881366087" CREATED="1697644963464" MODIFIED="1700182824164">
<node TEXT="5.1.1 Exception Capture: try...except" ID="ID_1938020703" CREATED="1700182804124" MODIFIED="1700183013070"/>
<node TEXT="5.1.2 Proactive Send Exception: raise" ID="ID_1149251886" CREATED="1700182970382" MODIFIED="1700183023393"/>
<node TEXT="5.1.3 Debug" ID="ID_1037343607" CREATED="1700183072445" MODIFIED="1700183077944"/>
</node>
<node TEXT="5.2 文件读写" ID="ID_761934679" CREATED="1697644977100" MODIFIED="1697644984286">
<node TEXT="5.2.1 open function" FOLDED="true" ID="ID_1553136036" CREATED="1700183527581" MODIFIED="1700183536475">
<node TEXT="Path" ID="ID_1621502714" CREATED="1700183618934" MODIFIED="1700183621389"/>
<node TEXT="Mode" ID="ID_831710986" CREATED="1700183621750" MODIFIED="1700183624515">
<node TEXT="Write" ID="ID_1731859310" CREATED="1700184171551" MODIFIED="1700184174115"/>
<node TEXT="Read" ID="ID_928481252" CREATED="1700184174874" MODIFIED="1700184176211"/>
</node>
<node TEXT="Encoding" ID="ID_1254458608" CREATED="1700183624782" MODIFIED="1700183626848"/>
</node>
<node TEXT="5.2.2 Context Manager" FOLDED="true" ID="ID_936610557" CREATED="1700184184334" MODIFIED="1700184190217">
<node TEXT="keyword: with" ID="ID_924259082" CREATED="1700184204884" MODIFIED="1700184210266"/>
</node>
</node>
<node TEXT="5.3 模块与包" ID="ID_1358911132" CREATED="1697644984453" MODIFIED="1697644989720">
<node TEXT="5.3.1 Module" ID="ID_1610189117" CREATED="1700184581832" MODIFIED="1700184587618"/>
<node TEXT="5.3.2 package" ID="ID_320143110" CREATED="1700184653064" MODIFIED="1700184659767"/>
<node TEXT="5.3.3 pip manager" ID="ID_1966091253" CREATED="1700184708860" MODIFIED="1700184713257"/>
</node>
<node TEXT="5.4 常用模块" ID="ID_1724543919" CREATED="1697644991981" MODIFIED="1697644995760">
<node TEXT="5.4.1 datetime" ID="ID_211327501" CREATED="1700185474772" MODIFIED="1700185480243"/>
<node TEXT="5.4.2 decimal" ID="ID_1572350717" CREATED="1700185488777" MODIFIED="1700185492276"/>
<node TEXT="5.4.3 os" ID="ID_297351463" CREATED="1700185498847" MODIFIED="1700185502248"/>
</node>
</node>
</node>
<node TEXT="Part 2 Use Python in Office" POSITION="bottom_or_right" ID="ID_345183801" CREATED="1697644999844" MODIFIED="1697645025511">
<node TEXT="Ch 6 Work with Excel" ID="ID_209766570" CREATED="1697645025514" MODIFIED="1697645042303">
<node TEXT="6.1 openpyxl" FOLDED="true" ID="ID_354594493" CREATED="1697645045535" MODIFIED="1700323672788"><richcontent TYPE="NOTE">
<html>
<head>
</head>
<body>
<p>
Common Python library for Excel processing:
</p>
<ul>
<li>
xlrd
</li>
<li>
xlwt
</li>
<li>
xlutils
</li>
<li>
xlwings
</li>
<li>
xlsxwriter
</li>
<li>
openpyxl
</li>
<li>
pandas
</li>
<li>
win32com
</li>
</ul>
</body>
</html></richcontent>
<node TEXT="Source" ID="ID_1287849650" CREATED="1700323764284" MODIFIED="1700323840012" LINK="https://foss.heptapod.net/openpyxl/openpyxl"/>
<node TEXT="Documentations" ID="ID_399953744" CREATED="1700323770178" MODIFIED="1700323889618" LINK="https://openpyxl.readthedocs.io/en/stable/"/>
<node TEXT="Installation" ID="ID_1084182658" CREATED="1700323984739" MODIFIED="1700323992807">
<node TEXT="pip install openpyxl" ID="ID_246962900" CREATED="1700323992810" MODIFIED="1700323997410"/>
<node TEXT="pip install lxml (improve openpyxl processing speed)" ID="ID_227417669" CREATED="1700323997578" MODIFIED="1700324044791"/>
<node TEXT="pip install pillow (used for inserting images)" ID="ID_1248478836" CREATED="1700324002262" MODIFIED="1700324057017"/>
</node>
</node>
<node TEXT="6.2 Open and Save" FOLDED="true" ID="ID_209273820" CREATED="1697645054206" MODIFIED="1697645060815">
<node TEXT="6.2.1 Create new WorkBook" ID="ID_9871443" CREATED="1700324128108" MODIFIED="1700324179857"><richcontent TYPE="NOTE">
<html>
<head>
</head>
<body>
<p>
from openpyxl import WorkBook
</p>
<p>
wb = WorkBook()
</p>
</body>
</html></richcontent>
</node>
<node TEXT="6.2.2 Save a WorkBook" ID="ID_697167900" CREATED="1700325508064" MODIFIED="1700325566975"><richcontent TYPE="NOTE">
<html>
<head>
</head>
<body>
<p>
from openpyxl import WorkBook
</p>
<p>
wb = WorkBook()
</p>
<p>
wb.save("./excel_file/text.xlsx")
</p>
</body>
</html></richcontent>
<node TEXT="Use os module to check path existance" ID="ID_1667349516" CREATED="1700325581775" MODIFIED="1700325594799"/>
<node TEXT="File save as one streaming file" ID="ID_758693861" CREATED="1700325632511" MODIFIED="1700325645503"/>
</node>
<node TEXT="6.2.3 Open a WorkBook" ID="ID_645635852" CREATED="1700325651654" MODIFIED="1700325656312">
<node TEXT="load_workbook()" ID="ID_461957230" CREATED="1700329805593" MODIFIED="1700329811658"/>
</node>
</node>
<node TEXT="6.3 Work with worksheets" FOLDED="true" ID="ID_460205595" CREATED="1697645063668" MODIFIED="1697645070979">
<node TEXT="6.3.1 Get Default Worksheet
ws = wb.active (use as property)" ID="ID_982459117" CREATED="1700347386053" MODIFIED="1700347919898"/>
<node TEXT="6.3.2 Worksheet Properties" ID="ID_1711903887" CREATED="1700347920647" MODIFIED="1700347928866">
<node TEXT="Global data" ID="ID_216976572" CREATED="1701132654166" MODIFIED="1701132659720">
<node TEXT="Weather data source" POSITION="bottom_or_right" ID="ID_690845225" CREATED="1700348453795" MODIFIED="1700348467672" LINK="https://rp5.ru/"/>
<node TEXT="National Centers for Environmental Information" POSITION="bottom_or_right" ID="ID_1486927521" CREATED="1700349071470" MODIFIED="1700349121402" LINK="https://www.ncei.noaa.gov/"/>
<node TEXT="WorldClim" POSITION="bottom_or_right" ID="ID_1933638703" CREATED="1700349121856" MODIFIED="1700349128490" LINK="https://www.worldclim.org/"/>
<node TEXT="美国国家气候数据中心NCDC" POSITION="bottom_or_right" ID="ID_1158766267" CREATED="1701133271338" MODIFIED="1701133306854" LINK="ftp://ftp.ncdc.noaa.gov/pub/data/noaa/isd-lite/"/>
</node>
<node TEXT="China Domestic data" ID="ID_853563541" CREATED="1701132667591" MODIFIED="1701132674792">
<node TEXT="中国区域地面气象要素驱动数据集" ID="ID_1855214682" CREATED="1701132720487" MODIFIED="1701132733317" LINK="https://data.tpdc.ac.cn/zh-hans/data/8028b944-daaa-4511-8769-965612652c49"/>
<node TEXT="PM2.5 historical data" ID="ID_1270667743" CREATED="1701132740407" MODIFIED="1701132754958" LINK="https://www.aqistudy.cn/historydata/"/>
</node>
</node>
<node TEXT="6.3.3 Get Worksheet" ID="ID_1525802804" CREATED="1701132180334" MODIFIED="1701132197359">
<node TEXT="get_sheet_names(), or
sheetnames property" ID="ID_87668958" CREATED="1701132202155" MODIFIED="1701132218988"/>
</node>
<node TEXT="6.3.4 New Create Worksheet" ID="ID_799864952" CREATED="1701132291857" MODIFIED="1701132299184">
<node TEXT="create_sheet(sheetname, position)" ID="ID_313985197" CREATED="1701132306634" MODIFIED="1701132330397"/>
</node>
<node TEXT="6.3.5 Delete Worksheet" ID="ID_1498706277" CREATED="1701132343249" MODIFIED="1701132352237">
<node TEXT="remove()" ID="ID_1351047023" CREATED="1701134393621" MODIFIED="1701134397992"/>
<node TEXT="del Workbook()[sheet]" ID="ID_1234517128" CREATED="1701134339943" MODIFIED="1701134387856"/>
</node>
<node TEXT="6.3.6 Move Worksheet" ID="ID_1254159979" CREATED="1701134402590" MODIFIED="1701134407967">
<node TEXT="move_sheet(sheetname, offset)" ID="ID_1743146008" CREATED="1701134409007" MODIFIED="1701134425526"/>
</node>
<node TEXT="6.3.7 Copy Worksheet" ID="ID_4837327" CREATED="1701134436990" MODIFIED="1701134445554">
<node TEXT="copy_worksheet()" ID="ID_629477312" CREATED="1701134445556" MODIFIED="1701134452568"/>
</node>
</node>
<node TEXT="6.4 Access cell" FOLDED="true" ID="ID_1346484310" CREATED="1697645074105" MODIFIED="1697645081569">
<node TEXT="6.4.1 Get individual cell" ID="ID_535986255" CREATED="1701134497201" MODIFIED="1701134506144">
<node TEXT="cell()" ID="ID_1843019131" CREATED="1701134511374" MODIFIED="1701134513439"/>
</node>
<node TEXT="6.4.2 Cell properties" ID="ID_1755599126" CREATED="1701134517126" MODIFIED="1701134524414"/>
<node TEXT="6.4.3 Modify cell" ID="ID_1112260870" CREATED="1701134536240" MODIFIED="1701134541758"/>
<node TEXT="6.4.4 Get multiple cells" ID="ID_1496904152" CREATED="1701134562637" MODIFIED="1701134570008"/>
</node>
<node TEXT="6.5 Work with cell" FOLDED="true" ID="ID_1444843622" CREATED="1697645082461" MODIFIED="1697645089696">
<node TEXT="6.5.1 Merge cells" ID="ID_893126593" CREATED="1701134657429" MODIFIED="1701134667850">
<node TEXT="merge_cells()" ID="ID_769313105" CREATED="1701134672036" MODIFIED="1701134679391"/>
<node TEXT="unmerge_cells()" ID="ID_500029357" CREATED="1701134679588" MODIFIED="1701134684650"/>
</node>
<node TEXT="6.5.2 Insert and delete row / column" ID="ID_528414642" CREATED="1701134668341" MODIFIED="1701134712944">
<node TEXT="insert_cols()" ID="ID_669225441" CREATED="1701134715638" MODIFIED="1701134721984"/>
<node TEXT="insert_rows()" ID="ID_961473580" CREATED="1701134722660" MODIFIED="1701134727054"/>
<node TEXT="delete_cols()" ID="ID_1105279674" CREATED="1701134727211" MODIFIED="1701134731912"/>
<node TEXT="delete_cols()" ID="ID_1285873423" CREATED="1701134732340" MODIFIED="1701134738649"/>
</node>
<node TEXT="Move cells" ID="ID_1865812063" CREATED="1701134750605" MODIFIED="1701134754071">
<node TEXT="move_range()" ID="ID_879335557" CREATED="1701134758007" MODIFIED="1701134761168"/>
</node>
</node>
<node TEXT="6.6 Use Excel Formula" FOLDED="true" ID="ID_1503221439" CREATED="1697645092534" MODIFIED="1697645100841">
<node TEXT="6.6.1 Excel Built-in Formulas" ID="ID_1270038812" CREATED="1701134768567" MODIFIED="1701134783503">
<node TEXT="FORMULAE set: total 352" ID="ID_1619482009" CREATED="1701134798622" MODIFIED="1701134808367"/>
</node>
<node TEXT="6.6.2 Use formula" ID="ID_892506555" CREATED="1701134852606" MODIFIED="1701134861639">
<node TEXT="“=formulaName(argument)" ID="ID_1657275277" CREATED="1701134870552" MODIFIED="1701134884403"/>
</node>
<node TEXT="6.6.3 Translate formula" ID="ID_1277905063" CREATED="1701134894718" MODIFIED="1701134901993">
<node TEXT="from openpyxl.furmula.translate import Translator" ID="ID_522671979" CREATED="1701134919072" MODIFIED="1701134952242"/>
</node>
</node>
<node TEXT="6.7 Configure Styles" FOLDED="true" ID="ID_1755266817" CREATED="1697645103870" MODIFIED="1697645113840">
<node TEXT="6.7.1 Font style" ID="ID_1907653286" CREATED="1701134964862" MODIFIED="1701479282798" LINK="https://openpyxl.readthedocs.io/en/stable/api/openpyxl.styles.fonts.html">
<node TEXT="Use Font object and assign to Cell Object's font property" ID="ID_890026526" CREATED="1701470901236" MODIFIED="1701470919996"/>
</node>
<node TEXT="6.7.2 row height and column width" ID="ID_1800477001" CREATED="1701134992622" MODIFIED="1701135004048">
<node TEXT="Worksheet.row_dimensions" ID="ID_846509836" CREATED="1701471041586" MODIFIED="1701471056576"/>
<node TEXT="Worksheet.column_dimensions" ID="ID_518093456" CREATED="1701471056981" MODIFIED="1701471062311"/>
</node>
<node TEXT="6.7.3 Alignment" ID="ID_1112608510" CREATED="1701135008910" MODIFIED="1701135017385">
<node TEXT="Worksheet.alignment" ID="ID_334205887" CREATED="1701471658377" MODIFIED="1701471665429"/>
</node>
<node TEXT="6.7.4 Border style" ID="ID_1486629776" CREATED="1701135021735" MODIFIED="1701135031633">
<node TEXT="Worksheet.border" ID="ID_1027211440" CREATED="1701471677371" MODIFIED="1701471686755"/>
</node>
<node TEXT="6.7.5 Fill and Gradient" ID="ID_55981449" CREATED="1701135034998" MODIFIED="1701135085591">
<node TEXT="PatternFill" ID="ID_440811992" CREATED="1701135085596" MODIFIED="1701135090681"/>
<node TEXT="GradientFill" ID="ID_969626750" CREATED="1701135091143" MODIFIED="1701135095880"/>
</node>
</node>
<node TEXT="6.8 Filter and Sort" FOLDED="true" ID="ID_1477838937" CREATED="1697645114167" MODIFIED="1697645122168">
<node TEXT="Filter" ID="ID_1344231798" CREATED="1701534698240" MODIFIED="1701534702519">
<node TEXT="ws.auto_filter" ID="ID_1369198221" CREATED="1701534720197" MODIFIED="1701534726649"/>
</node>
<node TEXT="Sort" ID="ID_898990402" CREATED="1701534702701" MODIFIED="1701534704293">
<node TEXT="sort_values" ID="ID_393821266" CREATED="1701534787959" MODIFIED="1701534790751"/>
</node>
</node>
<node TEXT="6.9 Insert Chart / Table" FOLDED="true" ID="ID_1860647576" CREATED="1697645122670" MODIFIED="1697645133763">
<node TEXT="Sample: LineChart object" ID="ID_311202835" CREATED="1701537824320" MODIFIED="1701537834884"/>
</node>
<node TEXT="6.10 只读只写 ReadOnly, WriteOnly" FOLDED="true" ID="ID_757573547" CREATED="1697645134206" MODIFIED="1701135223056">
<node TEXT="6.10.1 WriteOnly Mode" ID="ID_565142633" CREATED="1701135223060" MODIFIED="1701135245759">
<node TEXT="write_only=True" ID="ID_860071853" CREATED="1701135258650" MODIFIED="1701135266496"/>
</node>
<node TEXT="6.10.2 ReadOnly Mode" ID="ID_1606683812" CREATED="1701135281925" MODIFIED="1701135288363">
<node TEXT="read_only=Ture" ID="ID_1591650889" CREATED="1701135288368" MODIFIED="1701135294616"/>
</node>
</node>
<node TEXT="6.11 加密保护 Security Protection" FOLDED="true" ID="ID_1558110847" CREATED="1697645145095" MODIFIED="1701135370256">
<node TEXT="6.11.1 Protect Workbook" ID="ID_1185725049" CREATED="1701135327145" MODIFIED="1701135344001">
<node TEXT="wb.security.workbookPassword" ID="ID_313175615" CREATED="1701546494341" MODIFIED="1701546508085"/>
<node TEXT="wb.security.lockStructure" ID="ID_1123653586" CREATED="1701546508546" MODIFIED="1701546517201"/>
</node>
<node TEXT="6.11.2 Protect Worksheet" ID="ID_1418426735" CREATED="1701135376390" MODIFIED="1701135381783">
<node TEXT="ws.protection.password" ID="ID_1155927780" CREATED="1701546612038" MODIFIED="1701546621682"/>
<node TEXT="ws.protection.sheet" ID="ID_1450075010" CREATED="1701546621939" MODIFIED="1701546626104"/>
</node>
<node TEXT="6.11.3 File Encryption" ID="ID_812056649" CREATED="1701135394021" MODIFIED="1701135428055">
<node TEXT="pip install pywin32" ID="ID_1533772845" CREATED="1701135428059" MODIFIED="1701135435071"/>
</node>
</node>
<node TEXT="6.12 xls to xlsx" FOLDED="true" ID="ID_531112457" CREATED="1697645153736" MODIFIED="1697648538885">
<node TEXT="win32com" ID="ID_46383564" CREATED="1701312587904" MODIFIED="1701312593040"/>
</node>
</node>
<node TEXT="Ch 7 Work with Word" FOLDED="true" ID="ID_445896084" CREATED="1697647216422" MODIFIED="1697647225160">
<node TEXT="7.1 python-docx" FOLDED="true" ID="ID_1704826152" CREATED="1697647238412" MODIFIED="1697647832405">
<node TEXT="Install: pip install python-docx" ID="ID_686830760" CREATED="1701312441113" MODIFIED="1701312450842"/>
</node>
<node TEXT="7.2 Open and Save" FOLDED="true" ID="ID_1537620056" CREATED="1697647832752" MODIFIED="1697647840586">
<node TEXT="7.2.1 New Create Document" ID="ID_1317205353" CREATED="1701312460672" MODIFIED="1701312466162">
<node TEXT="from docx import Document
doc = Document()" ID="ID_796734638" CREATED="1701312470208" MODIFIED="1701312485517"/>
</node>
<node TEXT="7.2.2 Save Document" ID="ID_1869640839" CREATED="1701312488080" MODIFIED="1701312493144">
<node TEXT="doc.save(full_path)" ID="ID_285461640" CREATED="1701312493150" MODIFIED="1701312510773"/>
</node>
<node TEXT="7.2.3 Open Document" ID="ID_436756396" CREATED="1701312530160" MODIFIED="1701312535313">
<node TEXT="doc = Document("./path/file.docx")" ID="ID_1536312497" CREATED="1701312535316" MODIFIED="1701312558244"/>
</node>
</node>
<node TEXT="7.3 doc to docx" FOLDED="true" ID="ID_508871613" CREATED="1697647841191" MODIFIED="1697648533338">
<node TEXT="win32com" ID="ID_500875514" CREATED="1701312595089" MODIFIED="1701312598228"/>
</node>
<node TEXT="7.4 Work with Paragraph" FOLDED="true" ID="ID_1792401714" CREATED="1697648543253" MODIFIED="1697648548359">
<node TEXT="7.4.1 Paragraph" ID="ID_1968549297" CREATED="1701312609888" MODIFIED="1701312617044">
<node TEXT="Document can have 0 Paragraph" ID="ID_1498281832" CREATED="1701622989794" MODIFIED="1701623001614"/>
</node>
<node TEXT="7.4.2 Add / Delete Paragraph" ID="ID_1944283980" CREATED="1701312635521" MODIFIED="1701312644090">
<node TEXT="doc.add_paragraph" ID="ID_1473845148" CREATED="1701312650337" MODIFIED="1701312655548"/>
<node TEXT="paragraph.insert_paragraph_before("text")" ID="ID_211248032" CREATED="1701312665040" MODIFIED="1701312682186"/>
<node TEXT="remove() or clear()" ID="ID_693643737" CREATED="1701312714041" MODIFIED="1701312721987"/>
</node>
</node>
<node TEXT="7.5 Paragraph Styles" FOLDED="true" ID="ID_1548576011" CREATED="1697648548546" MODIFIED="1697648558126">
<node TEXT="7.5.1 Paragraph Alignment" ID="ID_1257824943" CREATED="1701312730720" MODIFIED="1701312740475">
<node TEXT="WD_PARAGRAPH_ALIGNMENT
(enumerated class 枚举类)" ID="ID_1877473310" CREATED="1701635581939" MODIFIED="1701635707220">
<node TEXT="LEFT" ID="ID_75418497" CREATED="1701635601607" MODIFIED="1701635606101"/>
<node TEXT="CENTER" ID="ID_219381039" CREATED="1701635610038" MODIFIED="1701635612366"/>
<node TEXT="RIGHT" ID="ID_682763782" CREATED="1701635606483" MODIFIED="1701635607830"/>
<node TEXT="JUSTIFY" ID="ID_1428108257" CREATED="1701635608021" MODIFIED="1701635617099"/>
<node TEXT="DISTRIBUTE" ID="ID_1033428444" CREATED="1701635617428" MODIFIED="1701635619900"/>
</node>
</node>
<node TEXT="7.5.2 Use Built-in Styles" ID="ID_378681540" CREATED="1701312811873" MODIFIED="1701312821171">
<node TEXT="WD_STYLE_TYPE" ID="ID_950778238" CREATED="1701312825698" MODIFIED="1701312832606">
<node TEXT="Normal" ID="ID_1555650373" CREATED="1701635839274" MODIFIED="1701635850422"/>
<node TEXT="List" ID="ID_382797253" CREATED="1701635850598" MODIFIED="1701635853625"/>
<node TEXT="List Number" ID="ID_1127733820" CREATED="1701635847704" MODIFIED="1701635862597"/>
<node TEXT="List Bullet" ID="ID_1288199061" CREATED="1701635862773" MODIFIED="1701635866463"/>
</node>
</node>
<node TEXT="7.5.3 Space and Indent" ID="ID_981161054" CREATED="1701312844544" MODIFIED="1701312856083">
<node TEXT="Space" ID="ID_1431170553" CREATED="1701635939430" MODIFIED="1701635941751">
<node TEXT="ParagraphFormat.space_before" ID="ID_564003550" CREATED="1701635941754" MODIFIED="1701635965630"/>
<node TEXT="ParagraphFormat.space_after" ID="ID_1248626891" CREATED="1701635955943" MODIFIED="1701635961870"/>
</node>
<node TEXT="Indent" ID="ID_967498765" CREATED="1701635980225" MODIFIED="1701635983466">
<node TEXT="ParagraphFormat.first_line_indent" ID="ID_523422878" CREATED="1701635983468" MODIFIED="1701635992634"/>
</node>
<node TEXT="Line Space" ID="ID_992496284" CREATED="1701636001200" MODIFIED="1701636003671">
<node TEXT="ParagraphFormat.line_spacing" ID="ID_672177148" CREATED="1701636003673" MODIFIED="1701636014537"/>
</node>
</node>
<node TEXT="7.5.4 Delete Paragraph Style" ID="ID_659909641" CREATED="1701636025578" MODIFIED="1701636035766"/>
</node>
<node TEXT="7.6 Run Object" FOLDED="true" ID="ID_655784417" CREATED="1697648560963" MODIFIED="1697648564542">
<node TEXT="7.6.1 Know Run" ID="ID_83756192" CREATED="1701647589444" MODIFIED="1701647596314">
<node TEXT="Excel: WorkBook --> WorkSheet --> Cell" ID="ID_629977873" CREATED="1701647596317" MODIFIED="1701647610068"/>
<node TEXT="Word: Document --> Paragraph --> Run" ID="ID_495413192" CREATED="1701647610435" MODIFIED="1701647622188"/>
</node>
<node TEXT="7.6.2 Add New Run" ID="ID_465998703" CREATED="1701647635291" MODIFIED="1701647641619">
<node TEXT="paragraph.add_run()" ID="ID_1664831468" CREATED="1701647646354" MODIFIED="1701647654461"/>
</node>
<node TEXT="7.6.3 Clear Run" ID="ID_74298044" CREATED="1701647719012" MODIFIED="1701647723190">
<node TEXT="run-object.clear()" ID="ID_555624452" CREATED="1701647726771" MODIFIED="1701647757606"/>
</node>
<node TEXT="7.6.4 Styles of Run" ID="ID_1413845126" CREATED="1701647760882" MODIFIED="1701647765192">
<node TEXT="run-object.font" ID="ID_1594312126" CREATED="1701647790915" MODIFIED="1701647802438"/>
</node>
<node TEXT="7.6.5 Case Study: Community Certificate" ID="ID_142368356" CREATED="1701647820419" MODIFIED="1701647836295"/>
</node>
<node TEXT="7.7 Unit of Length" FOLDED="true" ID="ID_763962997" CREATED="1697648564731" MODIFIED="1697648575683">
<node TEXT="7.7.1 Emu" ID="ID_505285130" CREATED="1701711362023" MODIFIED="1701711371313">
<node TEXT="1 Emu = 1
1 Twips = 635 Emu
1 Pt = 12700 Emu
1 Mm = 36000 Emu
1 Cm = 360000 Emu
1 Inches = 914400 Emu" ID="ID_1338210417" CREATED="1701711377877" MODIFIED="1701711418240"/>
</node>
<node TEXT="Unit Converting
单位转换" ID="ID_1359989400" CREATED="1701711442318" MODIFIED="1701711466088"/>
<node TEXT="Chinese Character Length
中文字符长度" ID="ID_1918074662" CREATED="1701712016590" MODIFIED="1701712044339"/>
</node>
<node TEXT="7.8 Use Title" FOLDED="true" ID="ID_374776689" CREATED="1697648575875" MODIFIED="1697648582597">
<node TEXT="7.8.1 添加标题" ID="ID_1431545160" CREATED="1701738299183" MODIFIED="1701738308209">
<node TEXT="Document.add_heading()" ID="ID_1170099534" CREATED="1701738311592" MODIFIED="1701738320978"/>
</node>
<node TEXT="7.8.2 标题与段落的关系" ID="ID_1952593962" CREATED="1701738334883" MODIFIED="1701738347571">
<node TEXT="Title is just Paragraph" ID="ID_360623060" CREATED="1701738355232" MODIFIED="1701738364681"/>
</node>
</node>
<node TEXT="7.9 Work with Picture" FOLDED="true" ID="ID_556379203" CREATED="1697648582981" MODIFIED="1702134973133">
<node TEXT="7.9.1 Insert an picture" FOLDED="true" ID="ID_164070206" CREATED="1701739297153" MODIFIED="1702135843333">
<node TEXT="Document.add_picture("path&name", width, height)" ID="ID_1123137196" CREATED="1701739306566" MODIFIED="1702135844643"/>
</node>
<node TEXT="7.9.2 view picture" FOLDED="true" ID="ID_1930875786" CREATED="1701739928524" MODIFIED="1702134984475">
<node TEXT="use InlineShape" ID="ID_1542238951" CREATED="1701739941232" MODIFIED="1701739945641"/>
</node>
<node TEXT="7.9.3 Delete picture" ID="ID_1831171486" CREATED="1701739952873" MODIFIED="1702134987058"/>
<node TEXT="7.9.4 About picture size" ID="ID_820069482" CREATED="1701739965223" MODIFIED="1702134989117"/>
<node TEXT="7.9.5 Picture Alignment" ID="ID_418905700" CREATED="1701739981047" MODIFIED="1702134994316"/>
<node TEXT="7.9.6 Floating picture" ID="ID_1805100630" CREATED="1701739991814" MODIFIED="1702134997804"/>
<node TEXT="7.9.7 Retrieve picture" ID="ID_1757139438" CREATED="1701740120744" MODIFIED="1702134999487"/>
</node>
<node TEXT="7.10 Work with Table" FOLDED="true" ID="ID_251963935" CREATED="1697648591850" MODIFIED="1697648601077">
<node TEXT="7.10.1 Insert Table 插入表格" ID="ID_1287966723" CREATED="1702223115704" MODIFIED="1702223127535">
<node TEXT="Document.add_table(rows, cols)" ID="ID_951902591" CREATED="1702223130615" MODIFIED="1702223154691"/>
</node>
<node TEXT="7.10.2 Add Rows/Columns 添加行列" ID="ID_10948569" CREATED="1702223159328" MODIFIED="1702223174251">
<node TEXT="Table.add_row()" ID="ID_1144230500" CREATED="1702223179442" MODIFIED="1702223187249"/>
<node TEXT="Table.add_column(col_width)" ID="ID_1626640941" CREATED="1702223187405" MODIFIED="1702223205709"/>
</node>
<node TEXT="7.10.3 Row/Col Object 行列对象" ID="ID_271075397" CREATED="1702223212359" MODIFIED="1702223229651">
<node TEXT="Multiple Rows/Cols: _Rows, _Columns" ID="ID_1824990354" CREATED="1702223237946" MODIFIED="1702223274329"/>
<node TEXT="Single Row/Col: _Row, _Column" ID="ID_1376199178" CREATED="1702223274799" MODIFIED="1702223284793"/>
</node>
<node TEXT="7.10.4 Cell Object 单元格对象" ID="ID_1659554466" CREATED="1702223293319" MODIFIED="1702223303618">
<node TEXT="Table.cell(row, col)" ID="ID_304968551" CREATED="1702223317984" MODIFIED="1702223337586"/>
</node>
<node TEXT="7.10.5 Modify Cell 修改单元格" ID="ID_1111289725" CREATED="1702223343271" MODIFIED="1702223352482">
<node TEXT="Table.cell.text" ID="ID_1304066468" CREATED="1702223355320" MODIFIED="1702223366034"/>
</node>
<node TEXT="7.10.6 Merge Cells 合并单元格" ID="ID_985167039" CREATED="1702223374928" MODIFIED="1702223388266">
<node TEXT="cell.merge()" ID="ID_1317156366" CREATED="1702223391879" MODIFIED="1702223406178"/>
</node>
<node TEXT="7.10.7 Cell Styles 单元格样式" ID="ID_823170589" CREATED="1702223408967" MODIFIED="1702223418938"/>
<node TEXT="7.10.8 Table Styles 表格样式" ID="ID_1804748817" CREATED="1702223427192" MODIFIED="1702223439146"/>
</node>
<node TEXT="7.11 Page Setup" FOLDED="true" ID="ID_420219426" CREATED="1697648601252" MODIFIED="1697648607870">
<node TEXT="7.11.1 Use Section 使用节" ID="ID_1864127746" CREATED="1702240648737" MODIFIED="1702240662606">
<node TEXT="doc.sections" ID="ID_608682752" CREATED="1702240671642" MODIFIED="1702240677084"/>
</node>
<node TEXT="7.11.2 Section Divider 分节符" ID="ID_1433402700" CREATED="1702241834373" MODIFIED="1702241852665"/>
<node TEXT="7.11.3 Page Size 纸张大小" ID="ID_149900123" CREATED="1702241879063" MODIFIED="1702241891833">
<node TEXT="section.page_width" ID="ID_916486519" CREATED="1702241897558" MODIFIED="1702241911073"/>
<node TEXT="section.page_height" ID="ID_808031678" CREATED="1702241911400" MODIFIED="1702241915657"/>
</node>
<node TEXT="7.11.4 Page Orientation 纸张方向" ID="ID_1470247229" CREATED="1702241933430" MODIFIED="1702241945705">
<node TEXT="WD_ORIENTATION" ID="ID_1856331648" CREATED="1702241951616" MODIFIED="1702241960953"/>
</node>
<node TEXT="7.11.5 Page Margin 页边距" ID="ID_1293070861" CREATED="1702242008951" MODIFIED="1702242025176">
<node TEXT="section.(top)(bottom)(left)(right)_margin" ID="ID_1099891674" CREATED="1702242025180" MODIFIED="1702242052056"/>
</node>
<node TEXT="7.11.6 Gutter 装订线" ID="ID_1170988142" CREATED="1702242055896" MODIFIED="1702242070327">
<node TEXT="section.gutter" ID="ID_1984907506" CREATED="1702242070332" MODIFIED="1702242134377"/>
</node>
<node TEXT="7.11.7 Page Header / Footer 页眉页脚" ID="ID_883240647" CREATED="1702242135102" MODIFIED="1702242149873">
<node TEXT="section.header" ID="ID_1970636886" CREATED="1702242157640" MODIFIED="1702242163073"/>
<node TEXT="section.footer" ID="ID_1005035548" CREATED="1702242163792" MODIFIED="1702242178594"/>
</node>
<node TEXT="7.11.8 Different in Odd/Even Pages 奇偶页不同" ID="ID_508431519" CREATED="1702242231480" MODIFIED="1702242251450"/>
<node TEXT="7.11.9 Different in First Page 首页不同" ID="ID_1005715891" CREATED="1702242261697" MODIFIED="1702242278060"/>
</node>
</node>
<node TEXT="Ch 8 Work with PPT" ID="ID_328588048" CREATED="1697647228805" MODIFIED="1697647236886">
<node TEXT="8.1 python-pptx" POSITION="bottom_or_right" ID="ID_1786033249" CREATED="1697648608043" MODIFIED="1697648625205"/>
<node TEXT="8.2 Open and Save 打开与保存" FOLDED="true" POSITION="bottom_or_right" ID="ID_1619040709" CREATED="1697648625396" MODIFIED="1702305624358">
<node TEXT="8.2.1 New Create and Save 新建和保存" ID="ID_1790322949" CREATED="1702305539254" MODIFIED="1702305557491"/>
<node TEXT="8.2.2 Open File 打开文档" ID="ID_1006929948" CREATED="1702305561760" MODIFIED="1702305573406"/>
<node TEXT="8.2.3 ppt to pptx ppt转pptx" ID="ID_926614999" CREATED="1702305574091" MODIFIED="1702305591499"/>
</node>
<node TEXT="8.3 Unit of Length 长度单位" FOLDED="true" POSITION="bottom_or_right" ID="ID_1503319080" CREATED="1697648631371" MODIFIED="1702321784118">
<arrowlink DESTINATION="ID_763962997" STARTARROW="DEFAULT" ENDARROW="DEFAULT"/>
<node TEXT="8.3.1 Unit of Length 长度单位" ID="ID_15280388" CREATED="1702305595769" MODIFIED="1702305612244"/>
<node TEXT="8.3.2 Unit Conversion 单位转换" ID="ID_699153474" CREATED="1702305640235" MODIFIED="1702305653436"/>
</node>
<node TEXT="8.4 Work with Slides 操作幻灯片" FOLDED="true" POSITION="bottom_or_right" ID="ID_690401097" CREATED="1697648640518" MODIFIED="1702305803572">
<node TEXT="8.4.1 Slide Layout 幻灯片布局" ID="ID_1775569276" CREATED="1702305664124" MODIFIED="1702305676293"/>
<node TEXT="8.4.2 New Create Slide 新建幻灯片" ID="ID_1531993111" CREATED="1702305680160" MODIFIED="1702305694172"/>
<node TEXT="8.4.3 Slide Position 幻灯片位置" ID="ID_1344118043" CREATED="1702305701899" MODIFIED="1702305723942"/>
<node TEXT="8.4.4 Retrieve Slide 获取幻灯片" ID="ID_78802233" CREATED="1702305727171" MODIFIED="1702305762524"/>
<node TEXT="8.4.5 Delete Slide 删除幻灯片" ID="ID_1872432293" CREATED="1702305766059" MODIFIED="1702305779701"/>
</node>
<node TEXT="8.5 Use Shapes 使用形状" FOLDED="true" POSITION="bottom_or_right" ID="ID_1888504179" CREATED="1697648648244" MODIFIED="1702309978466">
<node TEXT="8.5.1 Know the Shapes 了解形状" ID="ID_980301021" CREATED="1702305880222" MODIFIED="1702305898495">
<node TEXT="1. Auto Shape" ID="ID_411386158" CREATED="1702347573825" MODIFIED="1702411459127">
<arrowlink DESTINATION="ID_1963511707"/>
</node>
<node TEXT="2. Picture" ID="ID_734161837" CREATED="1702347586920" MODIFIED="1702411462993">
<arrowlink DESTINATION="ID_1963511707"/>
<arrowlink DESTINATION="ID_1749082627"/>
</node>
<node TEXT="3. Graphic Frame" ID="ID_758421842" CREATED="1702347606737" MODIFIED="1702411468502">
<arrowlink DESTINATION="ID_1963511707"/>
</node>
<node TEXT="4. Group Shape" ID="ID_581432007" CREATED="1702347641793" MODIFIED="1702347650195"/>
<node TEXT="5. Line" ID="ID_1607382379" CREATED="1702347660131" MODIFIED="1702347663953"/>
<node TEXT="6. Content Part" ID="ID_1445203698" CREATED="1702347666639" MODIFIED="1702347670066"/>
</node>
<node TEXT="8.5.2 Retrieve the Shape 获取形状" ID="ID_1833716193" CREATED="1702305972223" MODIFIED="1702305992343"/>
<node TEXT="8.5.3 Add Shapes 添加形状" ID="ID_175156999" CREATED="1702305997013" MODIFIED="1702306008799"/>
<node TEXT="8.5.4 Shape Fill Color 形状填充色" ID="ID_1711966661" CREATED="1702306015301" MODIFIED="1702306058614"/>
<node TEXT="8.5.5 Shape Borders 形状边框" ID="ID_405864514" CREATED="1702306092566" MODIFIED="1702306109478"/>
</node>
<node TEXT="8.6 Use Placeholder 使用占位符" FOLDED="true" POSITION="bottom_or_right" ID="ID_314314283" CREATED="1697648655651" MODIFIED="1702309964545">
<node TEXT="8.6.1 Understand Placehoder 了解占位符" ID="ID_1963511707" CREATED="1702306344444" MODIFIED="1702309989364"/>
<node TEXT="8.6.2 Retrieve Placeholder 获取占位符" ID="ID_1203772701" CREATED="1702306367839" MODIFIED="1702309998347"/>
<node TEXT="8.6.2 Placeholder Type 占位符类型" ID="ID_1632178984" CREATED="1702306376614" MODIFIED="1702310006434"/>
<node TEXT="8.6.4 Fill Placeholder 填充占位符" ID="ID_1337583746" CREATED="1702306386911" MODIFIED="1702310017137"/>
</node>
<node TEXT="8.7 Work with Text 操作文本" FOLDED="true" POSITION="bottom_or_right" ID="ID_405177752" CREATED="1697648670949" MODIFIED="1702310239179">
<node TEXT="8.7.1 Retrieve Text Box 获取文本框" FOLDED="true" ID="ID_226316667" CREATED="1702306401122" MODIFIED="1702310093394">
<node TEXT="Shape.text_frame" ID="ID_1991070023" CREATED="1702426497319" MODIFIED="1702426503261"/>
<node TEXT="Shape.have_text_frame" ID="ID_1610447251" CREATED="1702426510629" MODIFIED="1702426520373"/>
</node>
<node TEXT="8.7.2 Add Text Box 添加文本框" FOLDED="true" ID="ID_1981069596" CREATED="1702306410200" MODIFIED="1702310099138">
<node TEXT="slide.shapes.add_textbox()" ID="ID_1757732729" CREATED="1702426534579" MODIFIED="1702426576629"/>
</node>
<node TEXT="8.7.3 Add Text 添加文本" FOLDED="true" ID="ID_276687728" CREATED="1702306419913" MODIFIED="1702310104633">
<node TEXT="TextFrame.add_paragraph()" ID="ID_1747317235" CREATED="1702426633019" MODIFIED="1702426641901"/>
<node TEXT="TextFrame.add_paragraph().text" ID="ID_1180595279" CREATED="1702426657052" MODIFIED="1702426665226"/>
</node>
<node TEXT="8.7.4 Paragraph Style 段落样式" ID="ID_541708528" CREATED="1702306428263" MODIFIED="1702310114466">
<node TEXT="paragraph.alignment =
PP_PARAGRAPH_ALIGNMENT" ID="ID_1510310370" CREATED="1702426921743" MODIFIED="1702426956113"/>
<node TEXT="paragraph.level" ID="ID_1671663512" CREATED="1702426958881" MODIFIED="1702426967588"/>
<node TEXT="paragraph.space_before / space_after" ID="ID_925055890" CREATED="1702426968001" MODIFIED="1702426976851"/>
</node>
<node TEXT="8.7.5 Run Style Run样式" ID="ID_1232105710" CREATED="1702306441473" MODIFIED="1702310121619">
<node TEXT="run.font.name / size / bold / italic / underline / color" ID="ID_283612438" CREATED="1702427019486" MODIFIED="1702427048656"/>
<node TEXT="run.hyperlink.address" ID="ID_548038913" CREATED="1702427049661" MODIFIED="1702427056185"/>
</node>
<node TEXT="8.7.6 Text Box Style 文本框样式" ID="ID_1760179976" CREATED="1702306450793" MODIFIED="1702310130035">
<node TEXT="text_frame.margin_left / _top / _bottom / _right" ID="ID_1299419006" CREATED="1702427075448" MODIFIED="1702427095907"/>
<node TEXT="text_frame.vertical_anchor" ID="ID_1209275564" CREATED="1702427098578" MODIFIED="1702427108479"/>
<node TEXT="text_frame.word_wrap" ID="ID_1528646489" CREATED="1702427125124" MODIFIED="1702427133684"/>
</node>
</node>
<node TEXT="8.8 Add Chart 添加图表
shape.add_chart()" FOLDED="true" POSITION="bottom_or_right" ID="ID_1724032330" CREATED="1697648680854" MODIFIED="1702430781080">
<node TEXT="8.8.1 Column Chart 柱状图" ID="ID_117954374" CREATED="1702306461528" MODIFIED="1702310172912">
<node TEXT="add data table" ID="ID_1467510577" CREATED="1702504559956" MODIFIED="1702504569072" LINK="https://github.com/scanny/python-pptx/issues/373"/>
</node>
<node TEXT="8.8.2 Line Chart 折线图" ID="ID_1505810850" CREATED="1702306479400" MODIFIED="1702310180005"/>
<node TEXT="8.8.3 X Y (Scatter) Chart 散点图" ID="ID_1551411475" CREATED="1702306500047" MODIFIED="1702310192314"/>
<node TEXT="8.8.4 Pie Chart 饼图" ID="ID_1204693924" CREATED="1702306511208" MODIFIED="1702310199057"/>
<node TEXT="8.8.5 Placeholder Chart 占位符图表" ID="ID_70073727" CREATED="1702306522584" MODIFIED="1702310275875">
<arrowlink DESTINATION="ID_314314283"/>
</node>
</node>
<node TEXT="8.9 Work with Tables 操作表格" FOLDED="true" POSITION="bottom_or_right" ID="ID_655262584" CREATED="1697648691989" MODIFIED="1702306779118">
<node TEXT="8.9.1 Insert Table 插入表格" ID="ID_1936247323" CREATED="1702306539896" MODIFIED="1702516738254"/>
<node TEXT="8.9.2 Read Table 读取表格" ID="ID_111047450" CREATED="1702306548215" MODIFIED="1702306809244"/>
<node TEXT="8.9.3 Placeholder Table 占位符表格" ID="ID_1971156061" CREATED="1702306554744" MODIFIED="1702310270904">
<arrowlink DESTINATION="ID_314314283"/>
</node>
<node TEXT="8.9.4 Table Object 表格对象" ID="ID_1639415754" CREATED="1702306565345" MODIFIED="1702310289298"/>
<node TEXT="8.9.5 Row and Col Object 行列对象" ID="ID_1540268265" CREATED="1702306573135" MODIFIED="1702310298091"/>
<node TEXT="8.9.6 Access Cell 访问单元格" ID="ID_1453436887" CREATED="1702306581368" MODIFIED="1702310304913"/>
<node TEXT="8.9.7 Cell Text 单元格文本" ID="ID_1401480520" CREATED="1702306597304" MODIFIED="1702310310360"/>
<node TEXT="8.9.8 Cell Style 单元格样式" ID="ID_461803791" CREATED="1702306608226" MODIFIED="1702310316778"/>
<node TEXT="8.9.9 Merge Cells 合并单元格" ID="ID_1432803402" CREATED="1702306619415" MODIFIED="1702310324507"/>
<node TEXT="8.9.10 Split Cells 拆分单元格" ID="ID_1952059481" CREATED="1702306631089" MODIFIED="1702310331958"/>
</node>
<node TEXT="8.10 Work with Pictures 操作图片" POSITION="bottom_or_right" ID="ID_1749082627" CREATED="1697648702237" MODIFIED="1702306736651">
<node TEXT="8.10.1 Add Pictures 添加图片" ID="ID_1571500151" CREATED="1702306645136" MODIFIED="1702306724400"/>
<node TEXT="8.10.2 Retrieve Pictures 提取图片" ID="ID_1428530218" CREATED="1702306652762" MODIFIED="1702306747139"/>
<node TEXT="8.10.3 Save Page as Picture 页面保存为图片" ID="ID_789945869" CREATED="1702306658641" MODIFIED="1702306758892"/>
</node>
</node>
<node TEXT="Ch 9 Work with PDF" ID="ID_727713937" CREATED="1697648711301" MODIFIED="1697648716712">
<node TEXT="9.1 pypdf2" FOLDED="true" ID="ID_643310197" CREATED="1697648718556" MODIFIED="1703176778195" LINK="https://pypdf.readthedocs.io/en/stable/index.html">
<node TEXT="pip install pypdf2" ID="ID_1238553633" CREATED="1703176001040" MODIFIED="1703176010031"/>
</node>
<node TEXT="9.2 Open and Save" FOLDED="true" ID="ID_1850700475" CREATED="1697648722758" MODIFIED="1697648728654">
<node TEXT="9.2.1 Save PDF Document" ID="ID_485560179" CREATED="1702653636767" MODIFIED="1702653643829">
<node TEXT="PdfWriter.add_blank_page()" ID="ID_778388495" CREATED="1702653657128" MODIFIED="1702653675924"/>
<node TEXT="PdfWriter.write()" ID="ID_1785455217" CREATED="1702653680481" MODIFIED="1702653687348"/>
</node>
<node TEXT="9.2.2 Read PDF Document" ID="ID_1032819489" CREATED="1702653691105" MODIFIED="1702653701163">
<node TEXT="PdfReader("filePath")" ID="ID_1217248970" CREATED="1703176082593" MODIFIED="1703176096546"/>
</node>
<node TEXT="9.2.3 PDF Page Size" ID="ID_1762094624" CREATED="1702653771716" MODIFIED="1702653780611">
<node TEXT="Know the length units" ID="ID_1481005590" CREATED="1703176107077" MODIFIED="1703176116782"/>
</node>
</node>
<node TEXT="9.3 Work with Page" ID="ID_1773600561" CREATED="1697648728917" MODIFIED="1697648737262">
<node TEXT="9.3.1 Read PDF Page" ID="ID_1514401471" CREATED="1702656397349" MODIFIED="1702656450430">
<node TEXT="reader.pages" ID="ID_293454841" CREATED="1703180775678" MODIFIED="1703180779544"/>
<node TEXT="reader.getNumPages() ==> len(reader.pages)" ID="ID_1030498252" CREATED="1703180788783" MODIFIED="1703196823689"/>
<node TEXT="reader.getPage() ==> reader.pages[page_number]" ID="ID_5713438" CREATED="1703180801541" MODIFIED="1703196849823"/>
</node>
<node TEXT="9.3.2 Save PDF Page" ID="ID_1929439865" CREATED="1702656455027" MODIFIED="1702656461246">
<node TEXT="writer.addPage(page) ==> writer.add_page(page)" ID="ID_1721792931" CREATED="1703180818260" MODIFIED="1703197041355"/>
<node TEXT="writer.addBlankPage(width,height) ==> writer.add_blank_page(width,height)" ID="ID_1923867651" CREATED="1703271379442" MODIFIED="1703271411168"/>
</node>
<node TEXT="9.3.2 Merge PDF Documents" ID="ID_1617475970" CREATED="1702656464526" MODIFIED="1703253367197">
<arrowlink DESTINATION="ID_1112638104"/>
<node TEXT="merger.append()" ID="ID_1426505677" CREATED="1703180840157" MODIFIED="1703180845497"/>
<node TEXT="merger.write()" ID="ID_1981957504" CREATED="1703180845932" MODIFIED="1703180854253"/>
<node TEXT="merger.close()" ID="ID_1446723037" CREATED="1703180857900" MODIFIED="1703180862761"/>
</node>
<node TEXT="Add-on Merge PDF page horizontally" ID="ID_1646091971" CREATED="1703870646558" MODIFIED="1703870659750"/>
</node>
<node TEXT="9.4 Modify PDF" FOLDED="true" ID="ID_913874302" CREATED="1697648737494" MODIFIED="1702656648272">
<node TEXT="9.4.1 Rotate PDF Page" ID="ID_1949010671" CREATED="1702656482185" MODIFIED="1702656489351">
<node TEXT="reader.pages[page_number].rotate(degree)" ID="ID_230118759" CREATED="1702656495893" MODIFIED="1703197277764"/>
<node TEXT="reader.get_page_number()" ID="ID_1953404222" CREATED="1703197286047" MODIFIED="1703197294098"/>
</node>
<node TEXT="9.4.2 Zoom PDF Page" ID="ID_1638011201" CREATED="1702656490190" MODIFIED="1702656648272">
<node TEXT="reader.pages[page_number].mediabox.[left / bottom / right /top]" ID="ID_1213511042" CREATED="1703197332375" MODIFIED="1703197455330"/>
<node TEXT="page.scaleTo() ==> page.scale_to()" ID="ID_154308480" CREATED="1702656551271" MODIFIED="1703202640010"/>
<node TEXT="page.scaleBy() ==> page.scale_by()" ID="ID_652165663" CREATED="1702656558469" MODIFIED="1703202637299"/>
</node>
<node TEXT="9.4.3 Crop PDF Page" ID="ID_1278880705" CREATED="1702656566053" MODIFIED="1702656580975">
<node TEXT="page.mediabox.lowerLeft ==> lower_left" ID="ID_1666640702" CREATED="1703197398951" MODIFIED="1703203321077"/>
<node TEXT="page.mediabox.lowerRight ==> lower_right" ID="ID_648218810" CREATED="1703203305740" MODIFIED="1703203338996"/>
<node TEXT="page.mediabox.upperLeft ==> upper_left" ID="ID_487521408" CREATED="1703203306098" MODIFIED="1703203349090"/>
<node TEXT="page.mediabox.upperRight ==> upper_right" ID="ID_1823403771" CREATED="1703203306477" MODIFIED="1703203361681"/>
</node>
</node>
<node TEXT="9.5 Extract Contents" FOLDED="true" ID="ID_1713303231" CREATED="1697648743100" MODIFIED="1697648752896">
<node TEXT="Extract Text from PDF" ID="ID_1330789679" CREATED="1702656654183" MODIFIED="1702656715123">
<node TEXT="page.extract_text()" ID="ID_1131852534" CREATED="1702656661486" MODIFIED="1703208395729"/>
<node TEXT="lib: pymupdf" ID="ID_985683801" CREATED="1702656677991" MODIFIED="1703208679728">