From 7a9261905f2d83ff30d2c9f2fbb104143453407e Mon Sep 17 00:00:00 2001 From: xiezhilong Date: Sun, 24 Feb 2019 00:56:50 +0800 Subject: [PATCH 1/2] Add files via upload --- Images/file1.png | Bin 0 -> 22412 bytes Images/file2.png | Bin 0 -> 11499 bytes Images/file3.png | Bin 0 -> 18956 bytes Images/homework6.1.png | Bin 0 -> 69523 bytes Images/homework71.png | Bin 0 -> 33340 bytes Images/homework71_2.png | Bin 0 -> 12773 bytes Images/homework71_3.png | Bin 0 -> 35238 bytes 7 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 Images/file1.png create mode 100644 Images/file2.png create mode 100644 Images/file3.png create mode 100644 Images/homework6.1.png create mode 100644 Images/homework71.png create mode 100644 Images/homework71_2.png create mode 100644 Images/homework71_3.png diff --git a/Images/file1.png b/Images/file1.png new file mode 100644 index 0000000000000000000000000000000000000000..5617761321cfbf7a1f84434e989cc9fddaa48922 GIT binary patch literal 22412 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 literal 0 HcmV?d00001 diff --git a/Images/file2.png b/Images/file2.png new file mode 100644 index 0000000000000000000000000000000000000000..be0bb9b55db8b51539152239d437b80aa59af7eb GIT binary patch literal 11499 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 literal 0 HcmV?d00001 diff --git a/Images/file3.png b/Images/file3.png new file mode 100644 index 0000000000000000000000000000000000000000..4ae4abd89135be908bcfbbf48af1b0c694240452 GIT binary patch literal 18956 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 literal 0 HcmV?d00001 diff --git a/Images/homework6.1.png b/Images/homework6.1.png new file mode 100644 index 0000000000000000000000000000000000000000..c8633db837dfd8fcc1b176796cb73ac08ad33bcd GIT binary patch literal 69523 zcmd>mc{tQ>7x!34mOWodW9*6;QG^&vq7=%$jwMORPBM&r z8;pG{W4zx%zvX$J_qyKy-?^@?neUkS-uF58=bZC7%k<31K%0r4n;rxLFsU$ zg@8bmkLhTEcZ99X=71*(x9i%PpuC^Fv%m$lorb;!2=p1rK(wU+u8+WUZo7d%kOuNU ziYDir`ykL>*44`zH@&UqclQ!_*Hfmq`cMVFh_YTU{Kalqb$5cw{Oh3_$C+Ul>%xSg z&(94@9}^b8CoC2hw;sQ;c)|3Wqj^H`U^ZlNJTG{V!<#9HPdXm{_?Ap-M5GFxSsDZF zGs^o{Idrn}bKb^&(9M#(o%JC$>%Rir9kN=>%PJFW}D1B1s7cD_`yd4 zBu*%RIyyVrZ&iAr^O{}CN*wYD<*%?Oln?%1ODtCn4(?2Wwj?JHeY5`PB8D#g?W8R9 z?zW8ov}cWXvlD56y`QkAeV3^DUa~))Q?inYVC^DS<8@UpcrvY|xcyTZN^||L)Mf{L z>7q%{p?s}KoV3C(^uW4WP5t`DdRc1CE6XF0FzmcnF4`*?W&JvvFyaKAG?c4I$zETZ zgipvJ@Db*nILr?eJ2iMvvT|^Da}ez{%gy18Yw5**+Wm*219%viwfE)U?4?Hcu=j#+Xe+fYkf$(y5pl#uHVrv*Qw=mcd0vhu87!g)+xwFqkvi*)`X&Gry9VJNQGL};}!Px=R zpVmLLw#&X)k}+cA*Wu*-IJEM_aqKvBb6B@@3SU|_`rbaNuI9c)`nsvHnezIJL2oR( z*NuFvjer|;pl;EeI_b7^2%snA z{Mwl-o61T3YVMZ|0pP`MDVC0mH2#Y#D=)u(yYRDYY0BTWEk%B>-W1{1PhiqLlwEv{w%DNeHAfH zi?VmhOeU3M;}i2T<_G~f&h3#G%U_13a6+NAC*BGIaP>=yP8 z>K$Q9tocIhKq}r^w+}v~Vv1St_xqx|MW^krsw=C$#aMjic{D#7d2171BwdP>+wovVp}X*zCQ)#i31GQ} zBlxYCC}%eTEmT6@4vr)*!gs3x4i=dAD1AATC*tndGw2p_Wj;X5*F5CN$kLV4 zxjO#-)e+IsZH2cK24Otw1@G z|C3wFFU(Q1NX)k3G~RScsdPZHJq)fza2A0;9Kt2a+nBc=>=cUS;jPf{VUi^rQ?u=} zf#x&Bt4*sS0)|oM%xViiDkUn@yiIOV7 z&pug+s1)Yq*&$vSDXn`)*!5(@v6T$;xu47yK2`Dif|g=^{g-Bj&Wk zZ;!#`UQZ zI9DG%RmN;hPmNyjG|}z>Wnj=kBHLo`D{8Ckk&zzZ(vtpiCcIt3S-w>3zU^1MrkLM& zi|CR%EmNL$@CAP*|9RbaYDAd$Lk7a_=G#lc!ND~_BZ92-%L3N@9C}O`>^Pwl_Rwsh z(ZgTB>H9)vP06I*yPdAnpOJkNl!4o?sKrpv{dt1k!t(P^&2aI)`8`HxjM(s1JJm2g zk}+zu`SBI`dyj*Ed)GvsK=Y}^SKHNXc00DgUs8jwWta;eSfaS_H8lk;ED+Nu>K334 zM#|8%U4C$(zgd}-hP$=Q+Mao02vs%uyVp)<+lb&BOFU))S;9H9;LGby2a)ib=)-bb zyTojF^u`vBn0JS2mWtLhtIT-~!(9lf=lCi`BT}|gc!oWiohq>HhSg`-D#pj)bn>ZD z4N+A`>jFi-wk+JPoahtQ+H(ID4sG$0nBHDOn^j3_3U>GkC)L>a%0+Cs9f5p9o#VE) z&NJu#an3Z8A*UEEQE~UA31Y8;vwPNmT5c%Wn(#4?7MxMWH-%z`Nc5C!!r8DfRX z9XJPVP4^&aSdf~s8s53KK9U9(Xj4((LU`(rZWdTLS%QU8y?_l&`?50nO^3~-(v15H z3=m$6_%{yL(ekcu)TE;Sz^69OF`mJkCd4}qFy#<4q<)3n$*~;Cje5Y(^S)HF z(!2|%ljnQu`b)V*myWK+5y9ibWJ})k_lvVOV4Y$gMhZTq3S0z(Z>0(4gX}F_jGzMR zJMf-gQ?5gWKZXx^4k%|#ksi`l9@x5j)Ofk(>ABA%f{*dY{@^5oAvR%6)}8T<<9LrDCP@9CkD3X`7xL47CzRa2TUQsV zfkw`qu+N4@ba{xm2_I74gF|p~&Arbh7!=%m4(cQ|&(V*TPVMVz8yWF}c3W1645f?+ z-a=n>E^$l-!uOH}dUZt}0xi%CNIyf|A$_QhJSqK{j&Of-^MQO>@eO$`jfCLf^XTD@ z2Zm*umoS_{?$++8nWH*${xBBka|`!-lXc;5aPae``eHQT^(PT|h@bzZZ``GC ze$wW}_yMv4F5cM& zUKYxQfJR}pKNP4=5R5U^*X4tPfnbs$#u)9qvSVNTOZ$XwM9Vc+oS;K$J(2O_O7a!5{@cUaauw-%UfOjrgPXyN zG~h@5s*b5p%y;i?FX-wn;F8fRJor8_=uqK@G~eb=tLC1&c^eYZNAs;+ssUD6GQVS) zYjbDkyA$bQjklGgJ9cAM4B9XlCB56Udwy@A+UtEG9v7BcC6q5p7aNd9h!~W?(D50- zCuoTUvZ!_3vF&a({{bg9`NdDWztQ<4t=o*~>b^}6(;+2ctF_gwLgE)|cPfIC*Um|r z#^r))qH<*WTf*Rk1UiK@_k~BV(pu5K*{KS+Z<(Z3G!hf0cC3X1nt=i6?@#w*y)1bp zOM{N%HRrL+LuJ+^lAeuQC)3t~S3@>&hgl1?0MKrUG8Z63m880SihpEjLfk3zcK z2(rHz8hIz-9Rwy4^oNV6WlrEbKWHN^shLj_Iu+4K?uG`t zyn*qxj{)%1b>yxIOd% z{oY!?V|734>nnQ&moFP6B@{y&BF!;BJMFjcQ9*a_iD8(o7IcjJ>`i%=`i!40l@5Wl zJ$Yxzcb3LZG=Uv@pV)4By{cxk+Z6N7QlKIbf3b85NYvtI-hI1jJZ#u~8WFZv126#< zQ;R*gDaJ`4*Rb1nmA!PsE((_M-X)Bfi(W-}H4gRQve$3H@v%Iq(b=o9(gT_8&+oSn zlRB7GjnUbfT%3J&)hL8nldQiPK0B|B!sHEn?+Z@4;;e2S{dYK2NYPxa65b_E#NmGN zO60#Ro7i3yU6jcA>74nkTBzQyYqy8n8hun~_sv7~V|gO>5CZ;@QVTJI$EV~1wqOB~ zMw!Swv=j+2M04D#@y?gE&z)13N+*>bRGf8qUp+j13xl;{G2C7y2>d=hx2LA0zg_*_ znkMa?^D-7)8BxjbfrqeTABBxy-@+`-0t~E?h6EG7jB`sel@Af4PiipzAx06FYH5yg z#_Iz|6#<{cR-BDs+I<{_^OeO$aZYJDMPjuZEm=YZ z?XoJq9NPZO(V*Z5lP60_(PO^HTT6crCJb$NXm!88mS>&%2)VWVVsIt61v;`BepOy4 z`Nu{v%GfPf%?z8~BGftrz>z1`_Z8#r$9!*rl;88){Jb-mM$Q9<17oLy#7Fw|U*fAQ znypDe_Eg$c%r3S-&(O>`+7V;Tc`B}~Z2MbcRMs?$W}2EX0$w+NMsii@Y4zF9cAx9Uf2P1`D}LEp*EK0I?~s7M}%GVFI~ zE;zo&m1>AuZ{a=FUfoS9ylz*&BF}$g+1uH{z33-mkOOYh zn6264<<*Dk9JwQ?pe}quFo#JT z=)5%@#7I|F{ONmGZ5Ja%Q=!8zRiKZXGo124h>c(f2C=yEzevv3`H}nLZ((8ZwizY}`di-H__E2lj&F;r*ep8t836C=RlgftS{rTL- z_49`5OdspX=8f2^GMjq5QC)cWGgUv2`vvN7A89Og6pGhvHS|KM8oR`fR85Em>nMuL z8vrZ9*fowGeTzIRt8C#SSWgj24;DYcNN34DNfjitH6nPyMf7Z1?rx!dmT9)0;Tfbf z>4JsEi>m0Xq03rG>8R<^3p(L6c1XU}orN4V17c>QVVvGH_L!c5e)(Da8*Fr)9-Rcy zwfVteaV`Er5Ea|?p`&LN1x4bmt{TMy%e5J$onnWW-BhqK9u3GkC-c+-x0EKQIQlL* zAL}}Z-hMq;*(9kg)7IKklzdTX_MJh$h128u6laU8Mt4rKJZ%VEQho)w))=T^?#&Vu zBy&>-6;9yNOoK^?hpWYRdr%%=JYE`D`3IO<>tG$NP%4hU7Tv$#lF@&Ygn~w%CX^8n zzwpCPL^hZRzuV-?`~54Z1z!{mjM7^Q)5Fl*366JC)-Qu2?Y! zP5H~D3(BaC_F#82(G&?LI;p@w&iWu3o$ty7yqKfId&}NK;I&c(QR#>Zie%JNT-znl zd}d+!iX3nez# z^pd*u#hR(f4}JuaCZJpEJFS>g@G+uOA({}LU|>7;i=yON8GrM}}&jMa@U z12}sq!V)j}3KH2Qo7$AFejJc42Ty&l!-6*~ysd?ioRU9AP4D?kSkohWR25Nee~tNAEqx`A^JfbK*4&-p`PN81qBQ1 zfT=5c% z6S_~ito16)c^al#j|4kn5UJU~Ic^*L^AO$w?<9pEK(FYHy}e34pNbV{P~hf;cv>*2 zeBTyE>=!S<`B(Ra84cL~>`@Wh-+(%1U(q%p<-;FTp8XI`6~EfueVy*e3i2w<=u2eA z+7GHjG-D4-@HQ7uD7*&mL@#>!hI_r*5C|L2xxe=;UAKhKyD}DjX5*GC@#{0qlT6F2 z&7-4VdzLy|?};;B3rF#*&ckEkAPj(?W5#ScV{->z`RbvX>I<;ME5Ba&K2H2qog4c( z1#jZ&+P;&eKR-17lV7Ee1SX|?>!zXt^CpzBM9ebUL^y7B2enHya4Y@mY?;6!J-Hm zvV#yhGn|+|VpFwcabWd5Ufc%@n;FnSrUC)IlTQ_Z2PGxh|B3SIycdIf8C558Rc?=@ z6|t~Pgo-hZHGOX$s+8&qATPy0Uh0I#i-#~4%0NFIqp!|4u93)R@D-UT#yZ8qs~3&Z zyB|!cBCb=ZpbMPv6AIvb{$vc z8YB61)zcOpQGMCy zG02~;N5B&;*m>qZ_WYlY4`Oy-!G`q^YY;Pcoeqf*T8&RXdT9gcz%Qkv0CT&~&(nYd zq>`beVEEHMfh_=5`v-OV-;RfqR1Vx4S&P}>NSTRCLGEVCq^A(D_*KDz8#>{3O(-8{ z(|_3O35`l0`;Pe!IhivbLPU6<0#Qel_o+bP_|)>$cP44+?q@9YU)v+ehf~viaA>uz zn*UpxtX(Sr5dIc)kg*-EuVcPEMPygAO8dRs_A?9PgmVDz+lJL~Y56M#vYJ6ttM;#f zT`G!v*S!?nRaXZiT7ano=~-_ous9Ck(tyzTkN5!3K5*RulOZEE{N&C21=b#H_9aTd zOygx(M8tSF+&!g2C|<02C@U*F|2Ad@*Wa^JROVM>%{y(>wIm21_PzHH|Fi9+MWm%6}=`oPb`@r}N+wHn$dS9M~1^-{Ct zwHLjEC$3C7pF{6BTV-@7~# zggI=&gdj({Mwd5FG5#u6;(@%)A0Hik0&s{Hz)tA1Y=Kaw`~gr^Lr}#-8(0)jhD@NP zbWw;wYpmG2YiZI^jfpYcoh{qEaD>+23O9wu4dqrfL&`vUd7WE;j{cX*ukq5qOs@|V zGOu1ronneb;+K&czBVzjfFYhz(7{{B47Uirg0w`pfN4@>f&;%?RxBp)|+Co z1n@7$^Q?U_;nq7nLbve+;<%x3SIqVGs-2mp_R2`#UIl0T>f)unyqb5{zE8?RufJSu zkQWr-`nNxt2o5xwXlG`C$ncl)`6-ywL5r4frbCv`Up9$v2*LqvzzkBe21xXzgLTZ3C5$_HB`AoVu!)$$LZfFW@U|Y zBLVp)?)2z678cy;k-lVl5CK7R7&I(tMlO>B@;!q%Qz0_wq&QL%N86^ZH&Rnizzt@jtn zde-2xa_6sjw}I^06{|^Ax)Yem`^Sks&z8G}*VhS~?PyG>U~ah+LkT>2W_5_y|I*7o z(z)N9B&9fi@LRfy-{o9)q zDvDDTH*@mLH%A0j^K=oMmE62$G+UINQeM+a9EdX!lrJ+T8BMV{qeEkA1V@x>0{&xO zE?Nx~KywM!@qkm(O0PaZ^ycSZWOo7(0~+f1IL<3WUqe54y_0<7tk~Z{&onmeVVgKs z?<;OOMZ|e~`}_GT$||R*W`#92M1E@;d(wo|8XFhg<6f=QuP2x>0V4DV=ZaaGs$RN% z+o3M7U);#Y)TAJ){a5M@Z4fG@)ljid67WwSmo5(A?>us2q@e&s zGS}598v*=Lf+HdQKoY=B#Z7AuHJ@VRGJNBp{B6uunv-aEGp%I#Zgz>|Z3q7c@3$-+ z9m?ZlakfBvR2`f+=Fv-OQ$506q4=Rs-uKiw+VJ*abG%)R(L0#!DoM-V1=^<&b42$F-}lk=}d}F0W(LIOLgj-)2WOiP3Oh=~3w)73alDU5+~p zo!{%J0gz<&SZb)}tyV2(O-6fC4fou0oPxr4WJ?P*_^#iT=8?3)M%!x|qY8z)-3#Xh zS{^(e4`qfZQd2E&l-*!+xOVnVY0yY*H-*tDmD9UYUW_%095D@YblAAq6CEZr;8B0j z?5@a{K{+>6#JhRo_`MC+=3QIP4s&e3K~oevFZBTa#*AnVe6Yych2@jsLvI#%G!{84 zcY$F13M&h$ja5I4p^c_wp&apMAFS3i~!4e<@M= z*?F*0Yv(6DRe0_Z$OnGw#PwwJQk6c!c~z3)Lh#gQqbctVU8m$P=u5)cj{g2xHJLjBm|pY zG`^$NlEupVk~L-4i9@2rJu;3Rwfw2n?#Zish4TcB0S}3z)#%$_+rp)y+MRg|oiwiX z3i%ogDw@2(`hmfHgv{zRD;LCNEIvc*$OkJv7J=MX`7AH))M;h6OY+dkl$yWFg#zct zeSl>xcI$KG-8}*FZKL}>K6k?Qc}|bi-R0}#)FA+8X+b9wxuM~=v7$Wd4>OWf_F~kk z_&D#W9~qyu^Mmk%<8n*R9T_JBf%uE1%%XhPblv@AvDPIp6vwyjS%4+((knVHhJVo7 z{bDyFc^Ssy)P5Z`a6#c|U-5);a?@r1)LBpF^mb%_fAGg|ub7+HveNVo@rlzFsq$W>CC6hq{D4_BA0Y8kDtn&QJsUPkhup$NtHUpE-mhR`= zFGySt*K`<=cCEf{_f(!CQkecl=NI=>uiP1na|*x4`_qSqqQ$q1^-(-n7UyuH`*NAt zvTM9D6{qFd>=YJ$9Dk?pF8=W45#|g+JQF~V9baxkeLwA3Dr9zTy2aHmhid)I^Yg1S{9#j!q)-0(?$h94 zSfhq(31R?W(*Ij+%W06Gn`Tz=PSd>&`WIJ3jHW*D)hYV_E{-3-WDA#`1KB(xXTfB^ z|81T}R=PR@MnF#vT*!zfOWIGCQu-j5f8j<5AvfinWV?u$^7IrCZ{))K`3}tJf2Q zK6aEZ;YvR%b}MJzhq0(;mSYvKA>*#&*uq7&Jf3|Em1sz67>pk3vy+>?!N&hm9BLOF zY;Unmf;8Rf^m>00Q^^}W-RiUX$ZDy9xHR$F;c@#~b>clcNR!Vs8I(}sdL9=q8=oO4 zK=>H|IX@V2S9h4#rw~Z(!$b#45CyT-O&d2|H^=I9-$}g5z3em&z24{?nFPMmBPW(I z4Acc-=h!&Fs~JLG*Oen9JzYi%buUOlAQ>6CFONXJZa(k(a*GKvQJ`b7_HuP`iS#jJ zvd8Ye*Goyo9jDGDyU&s7Mm#}uot7ph>ABh4RS{}R60mUi?GJ)tW_210kg@(o?wvF} zSd4(32p{iPYzlGB-@->+*p&4vKCbDus`5;MfqxP}VVCX9aA$&pX9{tvPH^y#g}s@| z&RO{u76g*v!IS{PwAb0-(yIKqk8Y0Mq*Wj!GaR}xGQmBp8LEHloOe9D7%WS^sWF%_ z706NC7Lh{$yoCjWR-?u_(+&v!8ABj@WbRhRtX~cgoJ9405Q^LxIi#KkTyjdr8s?w3 zXPX}9X)IxX#eUg*oyOfw2hQWXAssmv&_4&&?Arz*5Td8E)okbO zL|@+fizm7|-qd`mP4z{Lx|j(mf3GUt{qW-EGC^=Vn$1bxZ~-;-MHbt?4KW)O?Mu>b z#3tXYa-u@;{uo144Q~-{-dr@J28rJ~G_eCgn!!}glUCD>=>Z%5Q^n-04uG%|M*l;a zlkuv0vTvmq?#@M&rQLa#GmvDu#g#{QN4-sw+7MSg4Z~GNy2Oh6DQG4?q<&KP!+pO#UK-_Um_kpp5 z6ebmhwtvw=KQ9sbaw4SuDIvg^ZcxD zk3vRvIkm8!8!zq=U+F8gc1$!MydiL@bK@sprlP|4JjCq1tQ@)&{*$B9V})HxI%w0m z&1OHZ*!JF?Q{8-KR-K;*Uy8*v;S$bnXPbU5a;zyGDLvu#=Gmh)(lRb7v7~s>M=u$O1}TI9_&14+dVr83NXm#0^nPM_sf=N|6q|^up8V!p9|}K4-AOFD>J-ar42cZeJ(d%b${Nh2s{>%6ohaT8rNN8ZuE^DGc3P zlg%H^*M@;YiIf%*L;L|3aK%YvH%HbmxG8WnwAD7OwE6-uJbVNwB`W_%DY5pjkU@^d zzrPK=jra|4w4xlR`0QaISBfu*Ja#5Iuoh2RIJTG>UV~HJPDXns?1d{0O{(oWV_xkw z3G_r>eXq8OE)(0^!dJHJb&Fm^Z{5n`^1HC;JLJf*ZS@^u_;aeQn((3R63m7@A+kR3 za*_C_yLLC#+c1vfepg`1`y{KTau= z%X@tPvbFtk@t;AIvx1@mK%7$8Af(DUIHft)@mdD)Q(U~d@?s@rX~@k7k}vQ zU9HyXSrbqq?Cia$TtV$xCpY9_RxWr=?s?=^5%7Km3R~MO7`Z$8FBTgaDL^HHMU~A%2fQu2pJ>}^Ze_r8?M1OCD?%!W_jcx2 zx2r@sVymT^G#q`mcK3?&U-rD;yhHZKkij|)&nJ-#rJvw23G;F8gGqL6rPtIdEiP2$ zc&ieO8riB#dFnLG40?ym$_bpGe8HWBPb=HSd z`-2!EceHL-FLqWGMdf?pRy!GdlNyq7H{R>~+J63+qO{(#J(Si>G$USIv;7gu1H-S? zxNN_}Nv)O=6x>?U+}Z`X>Sh82g+1m(KJVi@p01Qh@#|G#2oWi=G9vrBF@{D~+9hY{thtO^J; zlUHQFS7|3NOBL9H*b4O#TxushGEdKzV4}{jMJ%BJBWT=fvn=05yC&?7tzH#b>Ks?o zovJo6J>niGvDnMdzm@S}-m$uEb!?7W)^g)pIiHptSGe@tq>R>YRi&AmucPV1_!tl= zQzmcMYx?BqEhje@Fydy~TJvwblV#e{zw>}8Z!MQx9Fi>?OY82X9e5N$Fmz1Bb$@q? zfA0Kvdg-?RptVD)3cr3gZ{KZYth-r_7%INc#i+u&W+ph;pw7Ypf*bC@?DhF@4ZeR2 zW2wmNYV!OHYmL9C3eX3t|DX?PRUT>3oO7q1PC%dY9@cfqUV|b9|(dq;2C!9Fj;%;DvOzC{3rYgc#{0? zRzII5CX%6f-NpKBm8*JW>Ls7PV@+~yr&ZUT?RrHT75Qu~SpVEr#@ch;cqAKw_Z*+>9@lw-p!a>QuII8k0 zd-*vBetX+w3Xsuou#+N-`kHI#?I1Y* zNBnU#cxS$o3ltA|dGBwKfAk?34iM!xXxMOD>re0Q7fDJoYYg%iEgdg<$-St`)^u6N ztd;AoXkiQ<+Sw^ZWTUwFT+V2RT~qR%w-=5ZKO>f?3iPp><4ACm=SWkjNwv&~=FU#t zhwt8rJ|kEjCyxL~c`RB)?o~B6H(&P7i?##!nKmb(%9NRUYzOSOU=0}6+nl>cXtLhs zu!U027VH(tAEC)3mLlG`3%Jkj?G!)UOpB-a{CK&1fbZJ-yQ`G5Kzj-G-r~LEiLA$g zH=ib)6sCXUQJ%|4X&l3-)$W~o>w+AFdu~vM=k#RzH?(J+#>L5?;KlMy&6)a~nvYIR zHWtqf={w7p--R+jbQ4=h61#kr6(fSHyQ^PzgcVbJy@VA>S-FZo7usn-;^(Nr{a*uc zIGl@@%IcnHv76oC41w(i0221#bD|C|LHl=*qYz@NK0DXbp>BHDi&X3^r2;TUiB2)7dQ;%<*~}5-$LoU6kyj3asA& zPn>E@-N>a*YJifo7k@+`<|Oter-!uRgfo`MgzIX5F1RKd-I9>eiSQT*a&gVl=)&$; z&_B`iIh~J4WwUnM4NN%d(dafHiF)%c?uxCH>a~mKWWF^_g?fB*`;b=qnwcs#ph@)0 z6hlLLOiJ?U)q%u%=*Ff_$if0Lyo|*m^|tk?ZDM>mE%=1aBk^`+FxbV$Xiu57U^1V2 z`M$hP7jMKg126CE9huT|^J&fyTqi@hi3{b4o1qY)BUN3|@3S(qwUn)m80Nv(U*v#}z626QLt z?ZTmv6D#RrQjK5qG#rsTB8V%#XV8)nPGLss^WO1zKl;XovhQ5%wE1vY43lF|RCZjg zpy_i7_+F5oi^84$R@InBV;7H0oHLXTKvj6YaMP?sz&S$%!{ijGVRq#+N-8$viRWNw zTFbB<11GPU792+(*M%LAPB-8TqRMxAQonqZ@1%oDGQL?rZPxknvyrrM{FOlhKd69> zmDl3ZwB#GSE{vry8Blk5?{Y^}9%NoNZ@#pl9&nL@^% za7KsMw~Mm!n%RACzht{{2_3b9G9}FghGA|Knw9Ap#;-{#e5ZzK=`JKMQiC;YUmL^b zJx(f!5L;{W_c9i?nLtLs{Dv%yN2PcRChCK@2p2&h z_e-lJiW4kA1}sfr-fTi=M;><~-RrLqs^#uGS|7G_Jl!{AqEKMZ7=D|!wB+0w4ixNI zzX8qXo9}WHb58)_zkXoN)coxmL{yMZ=B5H+q4bRD5|quM;r3GEtnT%l61EHZz&Q(w zyZK~kOkD51>wnwDSk=N7#*XT&a;Ou}u*QuDh6JylZxfv_t(UogKpQrcxvSpBiD7P5 z`vN~KIPy5-ZjDE=c7?yc<;12G_n^jYJ@gY$K<*`=j6K&#I4-XuJ*j!VvYt;@2}hf(8DpVo!OEz^g)I9 zOn}8h&@~;AiQG|pdaYF`G?OJYXH?%7brU1mW_0Db`SrYnb)X(mN(ZSBXS-_x_)E@3 zC1B)9tF3{YoE%cJgWfWLTVn;IE34m{?0y!7QZMVj=1YK16+*?{mSZaCXZu|lFKMQCy?MVg>>1>^k}wGpfR>o$M{xVqY}SIg&t8YHNI z_prb|rU~7j!y(s#$+K60>DVEk*)km{OQ?Y&k`65H0&K(2qwc0RnGX;G+K ze1-cxN1K?jsqY}zE?ww`42wOWDQ8jzJKfE4gnBn7@2HMt`IbPh+MXoZ$U0TK25WJp z7)V%vN7O-$G$VpQuHhU^+x#6jfYrYPLLF$NEiLW&=L_=PbTsw%ghFV)F~#;?aC`x5 zm74ZF%OMNSs`noA;6LqSEWzjCi;@pxm zDn}CcbHNF>-^zcjbdV=rtASyGL5jl$2%v{Y4B+RvOq2%+J$a>&{Yuk)bsIVjjkD8p z>6%sf-S^~x8IWrSx)0zvNmW}<-?(mcza68tpFOBg?#HyfJ%t@bwT~e!d-JH%Evuc@ zh(dlw<;t_Sry@@_O(^c~V+wr0(S#)?;{WQM{Z-l`AIV{N_uzcuO9IlUireqay1c1L zRrar9Cl5zF?GSvOl-TTN2m%egu;Pm;N7P#TpEz4?o2yHuK9%2(4>Y7n&od&ex_Q*MFws+fWw-bcQ0J;d2&G2F$I%~Qr?@tIr+m(zce$P?P2R@H_W#q&4%tGD?6K6&jskS;NS`$Zx*6}@0kf-kj-b^d0i?x$)^Shtc0z$w zv*IEquXNuYK(zl^zxkJMJV4{!Omtg~YB>T8p^JF>&taULdzcK(;G5k1Jr1&4R-iI& zPVH!bbpzrG?5@iLUR-`rpg_I8m&ul|e*08iZDDfkIwS653Hd)w0D(-&lLh~BME|+~ zywcH7$_K#Hp>sO4iD;Kddd9m=(fq4OwhGWoFPC=Tb#+0&1o}xP(kw=y8^V(Udsc3i zUF+AVVqhL2zfbS4)_UguBI&|tt6>OOaR)BwV8r9V2^^}}*jD4#ZYucL z`1r~$C?3fSE*h$g_4rD%phKJ)+pU3mJRx^4*i$imAjaQp=xT=2CK!1(01 zhk`Mw#%MM?dGSGDNRqbilYXDt7mj!yM0s%E3Ho;$V z{8e=Nmow2@IG^)NxoztVP%?*7HeyM6m`DFiSQ)p0_8iR;0wwy%Ib)dYZ$dmqlh>W=HCm zYa&Vyaen8_B~`B17rpYF%s#Tyzs#(sXl_?h{s6Z(#@#m_Re!;9C8wR5lkP~pzI!qa9&j!X1z}r~=omJ1!Z@(_)u5x2?zzC3 zqkmg4)1Ef?vB0=5c0Adu%lP{Dr6i}i-k3hk(AFxkTbO6E{7XhjDSxF-eL?TjSv868 zA(Rg`+jA}-P_CN_F{245{6B4^Yb{<120(xQ)3)-+ot>E%_?C=KSFgz_#7$;e(h9>m zOQUo4Tb>h!PTB`b-W61+HEH3DR-zA`&xNIHM3KjJ0c1BKt_TbL$pjwc!0lh`bTHuF zh2_Sm8>46}t^v_PSj)vk#u`%3&T&;<(|X5rJ(mV(4FHZ~+OxcR|L(Ob8nA%ecM(nR z60cAw9px+;459R(Ibf}0f2r-oU~Af+jjz;ul5a02P_w4l#rHxq$6B(!EhP>bLfTFS z$oYW&IyB@;bhFdJFBM{h6x1K3i@ZUkh;mD`%>;R--{xasBfC2w*6$sEb?AgK55v5z zU!5SNYtYbqF3|6p2KDRCAg$SdC%goF(5D@S5NJr%LwU`(I49h}AsErrQRsa*@7Md# zU8Az&BM>`t4xIbmb6sG3kh}u4u(tgglj+WY5OCj6n)d}NJ$9h}dZ1~5nN+L3#5u;9 z2$Q|s71c3h{SizBV4I(j5&8;uFvi^h{1+MoY=X!{Nj-z9#1P+t_%cju1%PL%Er6t2r9g^~Wm8^>H>Jn-P zS}(o~EBIbARB%m`E=)KJNav5ae-u@;NwhY(9BE>VPtzP?cffw)tG4;38E{ z0TcP1d)HrHwvrWS@#KLIAWD?Vd2rws&GhIXc`sI{aat3zvyZ$M=VN?5#*vtI>*4X! z@7kMZIb%g>y?XV0FAPqUnzR3P+_55TBIJa#yp3^x!N+vC1OW~(?Pzh*nSu^Y*1ay% zTP+!gGp0ak3pi^aBH*t80Pe43UFoqqU_9cofIG7H*?yx0pL?t1Ld;Q8m9m(r9j1Ck z+>l4RRElzOZHDWP)jJ=@R~1*sdVvu)numv!L_@Z~_WaPr^>eFu6wq$dZ-;#I0ZSbms-pvX!dkT?Im z!T+hTgYAGU(Erta9jFz|st+`yt*j*PzMqiD(0gF^$FPsa}PS^>uUEWF=gX*zVA{?hJmS?PIyQUhoRT`~CU z#vA~Q>J>v4b5?LBA-M<63KTFIdcekGnQ5iyAVB^N#NTUl>|Hh|6vQJZ|B;jN1;-P& z*+S{&4*WAvbw>aVk*n-x;IwcJ;R#Xwy;qJ1OzD-1f>KE zML|(f6X`|33MeWl(nP^V2py$_jv^gJ0qIIrKoLR@MVe9tsR^NX5_%2Eohw1zd!K#2 z@7(9PH$OJ&CTqrdYcoiar za{$#|Tj6&zRO%VO>mo$W$V??kd;tncrP!&3RiC6x;WOqG&p#- zZ#pbM33Tu6*6WvE`>tJCgS^^ZmH-S9o^~+YzYblm2m}oVvFH_(aoM|9V(DFD^qle5 zE$w4tHt!j{K;Q_jtniv^>-g+Ie}aSf*Xm3jI@Zzj>dswws)g~DwZ>4X50IEZXbNJP z;mx4_s#1a=c!dHwPX76H5XmNgVBc4sZ?hn==}ykAkK5UR&bPi|o~mf^aJX_@p(v1j zfUc-Jq%`)-d~Wb{#DCXbt4r{k*a+)_iRAe2J{5F0eBg30FVyq$&zCUlam^-tr1WrP zBxj1v#44^f8W6Bl0>1EoFFs`ELx_$BKDGAwR}e~{rG$kg<2pLSo+l=&<9eDIpGQ~s zI7o376Af{)O(*4L^=oCZE0;w^8oaX-iazbEmN;|#v|;UV?R7t|V@TI$yA4P;tOuv#!&RH-7z%sP*m}zV6BaI^4}<02+^#PjMr-0P z*iSlQLO<$bu74gW#y>C4*AVev>#h0pHDqumMONT^b)|Y>(B0^o;)W}I`hLdr?eASx zLS=38!F;eTc9G9m3gJLjKW`znE@v7Le5gOxF^cO6YjD}c`~w5NJDk*ACwgRaB|gp7 z6cRr&S{^j)n7b8^I3|n`*Px%3e;}B)t-;F{sz}fkwPVXZ6$Rmr9CNLiV^qhQMlmLa zG1J3TnLnMW&Z|1*r-~C47Kj-fs#1`dycAbNh4Ftml|M9<#C)z%8 zEVOs$=2YFQ@MxIb=MH?#>Ogq8C#UY-ch~fS;nLCrnD-PHy1tk8L*oKI2V^UzG#S50 zRsrLn#jXCa92+t5KSzzo&TS`)TY_P2tem0g?3`u{9{a7tjqR@N67u9`ep%cl{7lvT z1#k8~&~pXF^Ihkn!Ubh}&bP)UmnrYvWef5$FF<4Nd137nCt0s)$Jq{0_~=-n$M+Yr z1Qo~N`EujT{tcnO7ve8A0ECGGDcv~}(Pv%tpvE$u{VBmp94|aQ57TGzo@cigDo&cN zvcGJd9pZiJqvK24>2H1k`(rqGFhc3te|ggmU&bSX8HlWm)8{hO??3QiA{Dnkje+eJ z;%@{e#{+MM?B+T9zHKYQUYl8hmY2ezKG(lLX)9>nAnaV=-+-CQUnu}E1%;DY1&7%F zZ%e;n+<~S{b1QLeb^UYPz`$^4WI0i$M6q*qEcyQSB)vJ{@9zcE5f(4MzF{U^+%QVO z!@`|W)8&R9o=^|qzswkH;6>?OH3m1ELW}qA+qvsyFf(JD3&)**|5a#L$Kg9RR+Rtu ziiYR*mg=}GU-;jo3mO$-*ZsrWwp%YD&SgqY_m3R^`_}!g?4m!g)$$l(3h%U;fus%NmIidd9M(heXLKa}D=WRE<2<&_n;YS)hUBn*f6v3K|Bu?H zKcGz;&|tjp#`qsAUX9*3BKrT9XRs6dn)RspdI&u-@#ot$AWXrQO@ra%v{pILPF(Qp z_F0|*x=r&X*Wr<#xV5haFrdNObd|erJuV4-y=x?Vx#MD`vT{sUm0CIZr{%B3{)@hV zB7z58T&*W={hP{wh|85XP|HK86q5t=L{65M+LD^E?>fM;j`S7bWC6DFg9ltJDw`FL zF1P!}%Il-A^(mo-TO(HIT9WapI?1;xqUH{1Oxe7UVZLr0e6>68*{aL0+5d@x1KV{_ zun|vEI+D17bblKTlyLFB2?=l--(#@&@8yNHRpJq@hB1e$KovC&!5Y83D^m(NdF7SDR+uCGS;h?K&kK- z_Db^PF&@rcGSLl*Z?nxC%@*wtG5zfqD9bv4aKvJu=$O$$H$AlF_TK$>hUKDyaF$p4 ze_#0U+a|d?!EVla_d=dxbDxsrt`~Ee8!Hbj(n3VI^ReJ>Mh}8RH!EvqcPC8WW@6f% z(|Ba&6I@m{N-hnOax2L?o%M_jIUn1|c0zaqTK$26{ZFu1Q0jgB0L0(VdUrzk&{|#( zT8173Ko5)R(}djQ3TUGM4iy`VpNgk2Co4!%C>_3S5)4aPd=hd}oV9#z9xg1W+bycy zjo=yHLk-_}_k&-3Vsu5MzdOwl+D-b7Gxa@QUY$DxcgZ*fXbQ}e8w;dI8fvVd!O;0K z249rX0w9nz|MEy0pCy#7?Z>FOByETcWYd5k)QDJP)9d6q=q`qCeN z&nN;L8aiHPXetF30x&dQ(z^U)Ay}9L3JnUI9$o|8Vd3f~xezJH#y(tGYf51IPV+>c z=mDQ#&u@4MWoDRJ=LClQA+QBwR=hFk1W#cvww0wVGuI(1bMVP?{cHNeO^q(>*X43k zP)bpnLe~+&Y~J6=K$!F($^(#tNZ4RLP;RHGv+wTfMZg38BYzwF_cdOLmFq*3u=W}* zRFTqZ`HS)e-Z#XpsNM=R1VTLB%7lV=uPMKsj8bU%|iv_B;-RIfK@8B`Q@k?of; zTNj=#cYL~FkHuua1eR@MELZoJqEAalZ=8^oHwYk915oEH|72L1XXJa>%)C+8+IUb& z#5br|x3(li^;J=!jf05OqF~D1!O>=WO5TwK*9{NW4fNOU-XpQ;O*tNG|}Ckhx+ zXRP$NFIKpJ_R&zsO*bc=IH*0lS(#>-0x|Jh0(`X+SLTjE@=8BY{{S&va%*~pr>ism z_NH+6$H$I^IpH@L3;-HdU1tWYH^IC{E*stL8&CNko_}pC2g3sYF(X)MKBk$%x?kzQ)L3l-Cb1hY&FSw%Z6#DR{|)gAdZZ` z;@+;UxsyJVc53Y zdBHBx5GxD#{RhI@wpyNYJluMrP67g;W}iGE@aOG35X+Y?aB2S*;QQN5LgJOb!LYwb z!$(hpSJ1tP$uqec+tPLVN<%(z6-{?=2k^@jU|fwn-?0A0YyvDaX6D^AvJ0TY|I3V? zt(d;)-Ix&mED9CPwguN_L(dFAnbMBefVcW=nX>c1z==?$IAHVsS)c!DKlGYVl5(qm zdr8(d=;&i&0BK=%dbYrm!4oVVV3CkXs_^)W?fgH8Qc7uD?SC#9)9pc$FNDGtw5Bg9V=Pp67GTL+uMi;3sbzeB>g@J$G0SF{* z6Z|?;5yw)n3R0lb>7Pp^g5{tg|KE(xEzEl;d{BoI^ihICim+l_YTd_BrYx5B#sbL4 zqRDK^Ki8tm?9Y2QkovA3_gwWcP_#w+6g=s1_>gi90kSBbzAomw`U4D>wOaew9m=KiqgnrQ4+3Cq<8oX>8?#JcZ{1WLmyi6?L z-PpFC^zb~G@T80(fvrZ>Iq8?cT7iQapN%Z?d{HrpLwIvp+4j zL*QjR#tQOeTIIqa+m&vw)Bwq1-#~{=*S%N%`GklRUxq1n<=r4#@NkW0oPmi$;6N); z+DOU+vwtTK)3qzDYF92;(8^{u(Y5{k@;Al|gt(SvH_c^xB1to0X@zbfz^>iMMzJw| zV~baQ;|m!{p!S{ixy~&hsro=k38f7oMOPBEcmFnUS_Dif&cCy>GuOh3LSDJ+$gScn ztO$5RppQ0BS=k9*Ult~op_Hln5OUO;9-{rA75f1*nx2SEPyukXEseF$WABF8?%Ia{ zcN8d}dDwlEHeJ07zzaznHaP>g$p}TAx-3GG)vm0oyCgEk!w{`KO~=nt74WTtI7av0 zxShpQevq~dZ%k-YJ6qXi5J8vG>8^*i`B%4vmWV*Oq=oiXRJ;A(RET+OEsOZLQYs6OfMKup{?XP31aYX(^9k1G8EZgWVrU%VtCiLn1F$geQz6D07m=ZVcR)9T*B%Y{9iWA?>` z2WGknlh&lEjwxmqf<38dE^r$?S3$#-4c$AjS$XR(X!Piq-}XxjQSx93<7;bo5=U94 zl$8w?5Tk=Xb&b9|PUWCcnOKT?e*m1~*=A8QbjxcZWaarTKz``kDy~fohh_KB&v~!z)Ukoq(Fa%zMxb=yr zw7khS4^$2?t5*36P$nJgq^0%O#30IO5H6Owf+n>oDD(zidTYINX9W=^M2*xhJnh&p zHD56gb*@4m$z2|dU;c9mnIV;1BoRo9f{5P5pVi)@^YT6 z_1zAa>9UZkv%fMdP|Uqa{oi&3VZ5gc)A&V-iJfELT|Na@97oV-u+pBTmUOqc%ce4r zJl+Rxxox+Vw7h)SHeK*WMHqdUo7kb{{;OT`S0iP&UZB5#loSVN(I5nQcKY&o;|5xFs3DO>JJ{4nQ8LNa9IWHE~HDB`6<;HLF zyCWiHMjE1JU(0D~X%zx;8-K(}(BMV?ge&~(BK{?wDYA2i?GIMYw3>}vSfKK+dHI5Q zRaI9X-Xrgt5PHB@G3D;^C`!aMap0AIAjok&?Y}Ehp`mejkL;7rp`D#Kbw)3U&vlUo z4!0h^bH--)lE_1$Ig!Wgrv!L$AdNV*K}9dA2$ccQt*l>q_S<-)8M1U5r_C>9)M<|E z6I({_jqe&G|NH*^T~Ml@(N3~oi7a+#D*tVZ{(?0i9>8j_J}5HhZwTlBcQnSP(}TjB z+`Kh_F8up=H!M$3N)9|x?ZNWO7ZKXRPtfx+=t(aVz=X9p*?CDx`=H|Q!Tg`(g*F)4 z;o&AMCBRZUcN+y+&wg(~chS@`V}ZAX9({X;eg0)i;EQ6K%R{?@Qd@QoSo}tx6Y-@h ztJgP&JD-d58i-qwfzCGu1`#jjzT;?e{F->2l-wd+>GVM1)_-V7(s3+jVq$%@Fl_hN z$oSG!AMw8uj3I<;SiPwUeLRDV9-6JkS#L|R(og!*t7pNQiD?CXrvcu(2-}9!Odp-^f3f9f6R+&VK*5M`Z1Tq4MuPF@ZkkeP@uwx>R+BwKNhSISa6)m z*IK>-tnLoBLD<}0kUHfCQH^PYw6qR-YRO6@A2KsIzy3JtcXgbP zDZ|{0zLv(H4j|mF2?+U%28n648TnRo?`W-H7|P?f0M+T2&NU?gv<1^Wz{~fpi@^iO z!+cZh9_=I&*~!i4t}KnHVPSfbFT9U)>$h`^?pd)=;Vvk;>ep5}k7W6Y7;a8xM#9By_r5kp&oI zs}#I5<20bP2dy-D5(!WgU%uNiioSVwZ%>nXL6|8BCw*9mUg($(@8Jj;o%%i0_4GUQ{)8kR0mW0ddcFAC3SMhGIG}NhymVylR)?Z( z&D30ZVkiu=R=gDH$}caqBf~iL&fw^|Q`JGb)^*gXLkI5YopAn&&Gc|tTg+cy>*nEr zDG<>k-x0@$ABO47TGGWy&lS}C=!}>(1t@+6I-HK}VPPHLp=lf}C`xcy@VErBap<5v17 z6mig9={eA>>lvq6uR&EFZX#Q^9Nw@sPI4p24-Eu%h#wYU%@_gQbgh-30|L~QMQX-c z^6&O#i0{r?&H#eO;?NUHQ3=@T{Rc-{G|AOF7Az?b8dNeJ0*@z?)lr_5#iW% z4G|Z8PN=)Wef^Fe1oGn~I)p=Vu{#1~(^+d1hU}m8;#ZU&Ru>J-R~6$lgB+m09&S6z z-9GE`g9am3l{ju+Hi$+~yt=0&5~4l?uCqucm=#^=Ihc0uNATfix^qorK%AbAnPA<) zxpLY(J9DnAv=cW`bm{yZF`xg{F%PtAoxbB=K|B^VvhVF zvE3T1daW-b#i{+YBzQs_N2n>7B@mQ755!TAm-S8`k^Efgk;u z8kGRTCsX5KDLaizOS*(10a*V?kK}y^{rsnbdwk;PuZP)9^cz&IOZdgOZ zmD_5fEY9ph^y&ZQB|vubft}m@H5%D}%aGsOnOl8I-)m$^2m8Sp1gr>S#M2nC>d^`~ z)-5vfr{B4kF2~3Nj$x>jlBT0^V|Uj;g!Jwp(IyVWEq>=pE(&nJ(QJo-qiYvPBX~0= zCTlF9q&T+(CL8SZt~P_K?UOqfE0vVtHy#hEE_fDD!X3U$BJ{z44W8_77lITmD+O!* z8*$#S>^r9Y?+)8m6A&GEnb6z&FcUGlOW=*J!0ox--Z;KCAgdab_@hGMueq4-j4QB! zgzaSUu#F&eB+NU2#@yGz2sz#v>pIyWKg&B`7WXfMP8m+?AtHE8n{M^ z+1n$;-2v3cz)m~;=Uwn+5Rcxdj0VU1?04>Bh$<9-+5(*JcSFV}jj0MC>xSCx+$QNE z!CA0fz`w|V7pqC5MeT!AROg<68iZ5ry)>?C5O1z?;e-O{oo-69+vVHAWB7kO_o- zfbO(KzzejoX9C$`-4U|P0p+>rw|Wo{?-$^%#D-VzaiLRfrn3>T{mc+pk(IZZ})pZO=ElIMH_mdDmD zZ;M$0aASxx3LLeQ*u@8YLCCpWzx)?@rvvtXM7rpk@cZ0>;Qjp(0X@K@7fsW+XZ4qS zs#m`NsRJ;$|G~3hCI<8DJ|$=AK`1s0%qC8#O92#*PR69{+r#V45I#Q+kq)cyO?Tf$ zG#!MN8`^0$cO@QxBb-~I2|z0axeI?AAmW5;N@&FZ?AnQ^!)HZ&tAnncu(D4GZMuGr zhqoa%lf7HQ1(_nqpD|b$;^z}|BcYt*duvAu{Kl+RYjh753p)P+1por2jTjW=6tYj| z%!!gYa|PTP@acj|2-@sn8bz=C3Hs8@Q?jxWzWQd3*QMnR>O01OD-|1&a`!7X*{>y8 zOV^sb{7lyB&R0dDi$bz{6s%iiMMwMAmSEN_Lr8HmFZJOwZrzgaZnZ#-fZqPX5rS&;#e z^wY5C*U7h1Zbi>g2$Sv)x+!v+?mKsX%a$n`uq0Ni0b*T9`hV=^W(o)v4rgWqIac@& zXDDI-hQDmNhbH+@#Qz_}L;47m=#q>WY?~KRX|`gc*dlc67VC!7Uo+=6yAOSUz!oYU zqMg7=U$b6va@^W|7;(;flQPFe-*l)r@*n4Of?qXFD7AzA7(EkuOLus9-4LHvo-fkd z!72c=U}qgX2AB-Oot2u-Z#1xh0>yDlIzc#eaQ=Oa8@?bkJz!Ls0ll-**1m950AgnT ztMG4`;xvfrHNN}q$idN8ix8*^^Pj7@k^I{NN}xc$DL0_BSC-`1Y8xE9m03M;WDCRq z4`jI<>33Bl=o?B2v^jxviUKGH(*Zd+N)pWnp_y3!hsp|YI5)py*%NT|*|#)7#iNWK zNsdKmg*||M!e-(MZNyAa7gHW5o8RRCt=8wkN?T2octE#zF28WPNkHGYtga8+*4c8~ z>=qHgQ3;ysg!%dWPXb12VY_MLwYkM!VJVL7<5jaJ%D(9k!}yuL+Tb`PCnaMDAV5VU z#fgp);s5M*6DDcT)9Kim;#uGOfU~xI@`Df&Y#%Tqt~ql1RDvQHk`XBNLByRMNLJUF z*xRQx_oNJPBzWlD(fe&ap1bU)1Ozxd!A*&Csny}=QF3z7%1B#Q$K)By!(I#lBZ6MX zjLlY69tGzRb-&%K|Wz37oNhw@+wy5a7;n zYguhgifIcyk~*s6?bm5>YU3+!6C2B z(mGQcr|^B_hfEA&i6~*qIy6_yNcFmdLPcZ6(`$rgZKWF(o;$??3!9sZKrKxJ+qTc+ zx`I&H0+da4iCmGB6au@@`&F+m%d}eETE&=K(JXrOD{OA&`bI<)EWM-&H4Wl)1fTzq zes>kqxt#*<)KY-T*Xfo3tj#}qY5d+gJzaa z-mnb=rkh?DBLh^MHnrLP;}PNeGKYLqQN~|km>JU#LfiCI9MnIyYmiA=5_~CyY6zq* zDhOnGt*6tNYd39zJf~l@=8%E6jddGz-mt$2*M9rCK;+>-a`awyI3My1-0H{WScO;H zeJ%(1_OES)KS{VZ{w_B6Mmho2o?Vc-wIy0`kCl0l&_xw*a1RR8mVLJoPLp}D1ik*Z zM!sX&=G|U>eRJi-Tkb&D*+fLf4%dN3l2)&%#n2%^{)=yA$6(bHjTHkCs=m0f-rlm@ z>SM&Zz6#=G$N|?qL86r_gEm^x7eIuVC;SMFIlbI{mD~jxslj{8RCciP8SETNb!op0 zVX+(3mTCE+_lbh==(|0;U%o3zhT!LiQe53D784Lz8Jr>z#y_VlvoU^@7swg{LZG=! z2t@D&ldWPE6#J7cUvq6EXL&>&a0umMnVntJb)mbNrLz#F0&Q1*9Vy^1=h?OUwhi6- z82;w%TU#9+9VB4auCJ>*D6?=Rh#0}qE&mveg*8N<2|LH&HDd(~Wsq+c&oi+W;IxUREv zvfcG?=N4d^$$}EYeu0={a)P{CiAhqC8co}_T<8%#44l#uVc_9-E}`9`yHFs3ohD(TzshdQsSVv z7(b_fUNbIB&)Q}XA)Ixx+!MhkexT%=@cYF_7hJ?sa0}&gD z(;Rqv^Tqo>)4VnDYxE-}?l5RxC}`Uv!{(6}W93Z$$4%^>y>Z_Q3?>J+Jytrf5lYhAl{ZHV(|L?B{|Mk`XU+y0N|NP|G{I9E{Hfyr{d4%Fb_ZF*J*O`^iXt*naBm{SwQ`P8NJ` zwk$59YON|}!huvI)1SmY&>fJ6f22S(q*OTJh^i0eJo2ZOI+QUJ04xjbwfwAp3ObVw zF~#?>4Mjse`D-Q^2d#-b@q1>z-ISlc_@*pA-EYjgsM`}D#I*QO~-IF-ZEL~9OH z!e15RRBEv{rjMLFJp5!jM5?eXxyM>;;K?PyuPd%%7T3^u zNfj)(3`;_v;Y!;@q$C{M(V=5xpE=KQlKP3?5KCTo9hsSI=vrD_G#v4GyIA6t4|y}{ z@afiPd_l%X*W_=ouk{Vf;&XYeD=86M9UgLe;}{9W&BcqOoDS9#6~ub&ZO_?HIK|jz z;+LObOtnsa@JiKPKhfjp%P)|^hd6m;#5DC=fmT5=p`@jFrR8-bVd1KwV+Y5<>Ns!% z@yKo^k?KB}YsHk{&w&?p#BEp;uDs%zPck-5g6BQ6)+uk;u~tr^`qhCj#goBD%nYZN z?jM>U76j!P7!@=ZucYU@=$f-rg_cd{C{eiYT*W_6BNv<8WVI9G1YM&HDT_)Odh6l* zMKhWh7YDh=KLnqQpU1#;YKGwNW(yi8Q6$`UzaFXlonb383j+steQmt!qi9%{i_N&4Hl`-tso^V@aWwXE!Z{MrXX{$x}NA-SG-v3i#Iu*VIck$7jb0X z8(r!OKT_99?JIOiM!SykB86A0pR#V2;o-iYK0)xY|HbkIMVB9f z7DY#s4UL};g$PEohe-4KOY6O!`*h6}Kd|2Zxq8agR%sXYFxy&k%CWb*rjgd3o>K#w zlQJi6a-?V&5U5i~#+Sx31MeP)zX9eXcz>Ji!Ykctg2N;o=WQ!;i3H_5=LY|M~OBS&8C0s`9e4cPv&Nts%R{Bm> zdaw5zRhvq4z+D=b2W0V8Yd7+uo;uyu(h4f#mb!cgm4xMAcd$*P!O)Yn#$RuR3TeGdz-7qBh-A#tHKPs#rC#=JM9dLm-dm%DU{ihE zs@OWU1>mP*CF}s4TuN1}kE5X7Gt%>jQwFau7cg?UbXqu_nc8t!Uk~oxe1N8qq~Ly=q4$ zj__l{W>%+ABu!>u9Q0(ETJ z*vNtXL5^~}!vwhf)~2E!-8<<#Xx~1Ux_~s7i-wcGUnlw$p3W=#G7+m2g^!Fe#4P6D zGAmFUSSYD0=D2!53teI1lr~z2E831((_aU)9k7z*nBwYUvhPyCQfxHfA6AUY`@zHV z?W>!UxkZG6-$-Nca5sL6l9$T+(BE{v&TT@UFmOXodbG-Xed5y*ie09D&OJ(n=fkyP zli@fg>V%QxsMD&4>}rcscfpn)=6+fQAs=Tt3m3AV8ckd*%vtsBwyzE#zOuv)YWg50 z6jsED(WosK<$?gVCyBp((>Y-8OcY%j{(g_GZNXzGSGO|ny{)93ex;pmnX>i!n)Q#! zsuN@if2R&kkvuj=@Y zPVhldU_FqNQ>Wm|OPKsuQR^g)#QV2oKX-m)#~x~w`T;H|c&M^)#po2`jjgK7(wBno zkC<7)kdydH%Zswqwb?yXc-p|81{Qn|IFOxS=+Y@ixI-2B>l|`A1S7L#f^EX?tBAs- z`QFGYQKnK)_F4MFZYZi}lo28hPbf%_X%}0ws+)!V(6oQ|V)7N#bTTkh0?@Zf z#KLTOM9q0Nr7P&x73uR~ci!;`NHUvO;g@TzFmvq^^>;|U(wMv$*vi1iD@|J;cDLpC z__pQM^Q=9Nb&x)QBsq|*7$0ThF(()B1BT!2rb6E?xXg{<7o(@PkekGw+&lttcbyNCH91xR)gNXa&q?8A9W}^6)heaCzN}=Bv8XW8QiE*tJTp(mmM}_VZsaV#C zsr6!hUb`7HHPKk8Gn1ueQVOnZ$~$Fwm&z%E-M9V-AMPzvQS3PgUzY|-A#Hw_7tQsE z#Mv6;iJR`6b{Gkxz)LgD$qskyt;>J@aCxJ+yIg_N7EOHBh@Z$^zgrr8$(Q~7aro`# zMU^$u)mev8_4V%DH`^#KnT0Od%jhhFbz-P+Aeij?TOvt^+;ew=eK%`z4A?r`x3Qj{98XBG)a-kMiJq+Nhi1CnJDd6H61d z3M%p&H5r2EFR&ay=;{4LzouQZ=eClw&C?U?YxDICO!d)sKYIwHtFE1fk}y|$&+ZQm zr=5!%7o1HJ`5U+_cdERIdB4CFoeu7VBHc9sxChaq6}&-bqzQr^nW%O zjg_BgU#f~U$}`|{>9Np(Pq>V4Ug|P0>03MB8nx9YW{*k-7g&tqs%S8i9~6z zBoNkl4XvF9u#ESXu{?bp=|(Hz4e-e|SsUHb%X#=ExXL8T8yBm1TWZ;tAVQ!_7Pv+Z3rjAK^t~Jz(_ZD4GS(_BF1$ByMDp|rw z=U=i3%uY6H+6}?3>AF<9Q+=o6)yqWQatJsqS-k=g%2?b)kN*obo`bI`FZP?9Qbksn zI~g=qw-wY6JR}R;tn9%9{h{dJrV`0{CYUiRECG(Z8HZ#BZcU%=(wFjx=Kxi?7E12# zBx+pI?sy|V@6YdiH?Fh(Z2GhSQu0Zd(@;8)eM&ZP=Qd;3hvb``RNK{zTJio~`}^7_ zw!A&2xQE%xbU_PdqY+ts5n)KOm0djBa{JX5MEGv^$Eagti>_-z7}=vl?l8H^l)phS=bsR<4-^tFl!f}sc3)?Nw_N9WFY*r5ogeRBUj$2#j zxeislK~tj+qb?Ng-)eSo4G1F_V`aAf5+q|UMYyVi#s%6c{ngpk~ zwi>!Nad4hoL@(FBDA417(zi0~;&jKnXI*XHK^m7WQVb75Q+(m4snnz?$0=)6RxtKr z{Dc;`ED6LmDYs!|%HrdMf(8qPR)j3_DUL(oQx{&__PX*820iaD`!F+&*5Hy5+zVk& z&i(BZph{#PW-PNU@AAWF3CQMNk9pj;2tp~H&r#1Qo|P_a=EKp_E5P#_&;%~I?0kgZ zdxNz*q~%8xSo1ms@mSX8vupV1oulMeM{8`wAN$L%-&>j$Tqrjxo_21Eb{rRiPuBz< zJQ?wHq3_+J4~$Z0w~P!*nxc!oxVVmX^(im84&l3`9e8M)>KGA7lW;14~*(nqm zR^BQg0S-$xrHlp6ikYc+`)K{g0aWT7PVfXHa{x~ z!8fT?<)Ed49*wqwfWqpDiiQ;vs##9=myW=Y!EXtRq$kT3&q>NQ{bSQE9QeIM&cw}_ zbgTEbdOBJNHG(_U%IjzK;RhQUN2ax4k8q>;u0{I_3$?GUcjGOB z77EKMI|5#TBEd+m?cMp{MCTiZw%{B6=JX zo#ygG>V8Vs7OlqAQhE*w*;q<04&2QhuHv$^a#1WP!&80YmTJLsOLZeci5m?JfnZVjndoxlC!T4y?X#jrf6;4nvOm zauqTr9zdQIWO?y9Sl@;bjs3RZy_2PZqtM+b(+;E9I)HS%W9qb|#(rcgC()|ghEP29 zC}H5v;1l>V-smpTY1iV#WT%T?U^|r&M-^fxM30lH7b6C;=4PHw$48L~Y38`V*rHb) zoBX_vW|65<99|N=iy%@+q~sY5SD%10$Ie!FL^YoFcsA-7wLpdC=wV6kU0?SQ9WaEU zpxQ`27O=~`X$G(|cR1xCR)6J_5C{XZVTM_v@R}2!hbHzTQW`bz?ZR!Z-1;AqteOzr zQ$vcYpSu@Z%yE6|VIME9tScH<1cXks_@K4nY>)e3xmU2meK6AMV?$HtHyR~1yV$lF zjP1A+v!}A>eb@Eo)(G6qU|&OP*_b1vhaWz|It>wx@jr`~3{p_A_0vvXUBGO=(8E&QsLPQ^B2- zIB&?ZACAKDD|Ys2KGTk`9|TbXS>y$_vRX?(j;64Jnn(+KtBIAE62&3WMc%!_8~+7rPu-=120D-no`+Y5-&u7snDO)U*K7ettiu}N^=2$t z@i9*Fre?eKa)>ORzj5mRI#nmnyb(`v$P!0g_Vlc>?TkW5sZ^1!=AD@>NRd4ZK`h=5 z&%|PP3Qk@W#ZY2+h(0m=xN$N2aWu}lQu&lFzkp*-^VUw1c{s8l0ysUElH+#O+z_#katgf8f zLb}j1sfpf(qrU6z5hshdbP)8o-uaE>czJkEFO31gU0d?JgDYq6UQWwIyg4%(cycXU zan#=B)6dt=YYHFs3S25UpqLLZ!B*lVD|$^cK;2{|0%aK!MIQN*)I5R{=5ROV>H`fkdN$Jn(wVt@vV40EUn;fvAvT^ako z8TDynm(Gt2WL3<_^igk|Li#(8=d*NK4!?zy{hdrN=WVr~r)s$_PsVR{5SBq!tb13L z^TbM#%ct_FFNi~0uARj@kxW>0IkhA=N&l@M`n3uw>m3CR)o|$D$;j>%KB3UNiY%^N zz#gf3#madauZC)B_3l;L3K!*Yx!@~3F*Lk2Lv4(z)yu$>!ePx>8SKj^fhV@o{8g?iw$#UY49ot%I{!n(ci=%2r4Rd#a9* zU7Fx3U^M^ijh#%Il z#MQ1PlMV-m0*glVwYi(<+iAVV)*vl20&|cekhd;$r+n;zlbGp}Fo=DxdHabV_ zomQrD;a4N<79K#mZ@!m{Gq-I0tD4St-qZLDWkt{t!)P9bet z4YVvCVGD~f?RZMBiv5w}V~afmBdO0R42|HS(XpflZ(Y{HyMJ~BWyeQFL|IyA$`>R) zF+-xvMmQbzA8z=<6Qk-ljTZwnG4Eu_=kknHSW{$pBN?R;_ut^>{Q1cbTH%xiU%af% zq1%S+!=Fx0o^}~yZlC+~6WOA0%9WDZYdqL#nb+PXHx_s{Ub!Vg9$Aft=fAe3_;f#7 z)FLLYwSa`2^V0PY0M(y%YRQl0lD1U`AHBxg_-MPK)v-w`^Wux?nL0B}61M&0lf(rF z8!NI;>lnit&eK!-oy(E2ZyzWHF0dPg{k>mx2q?={f_EVP;gClaH!7!KQh%Ed&Ig9? zU+t;K!w)0gVEc{x(5l~9Se{}9oeS2JR!;K>v_=bPTK+J4XIIpqIf*JHVlj4=_;;}+ zF-1ZVgD81@@9LtUH@Z+$ZXMNHe^o%hu`lMh+PGpPnbm1aJ9dnd-hZov^9@jOJdy@DnxQ-O{2sa*M z=&**Lzzr|yw}=`Vj65akk?gA~-a+2bQ(WZ8SH&9M^p7scpVygKTJ&M|nfMv2rCFG3 zGe?z67YY4?4+L7ohBGHZ#4G-HNku_BR*kK^a+D?5&MUTsg$y&E*} zv{?#Ay3^Ny;4%-y&Q==b?d;3BQgq&5ZlK4X?f!Y)Q-TGISG`BR)_KV;*MQ580s@I! z_k9&aqKp$%uO#0_HJMF#*1P@~LGBBDuil)gVPIls@pVn=&^wnkehb~mFXvZ>12bgc`%x*p(dPwhR}Iep%vBi9gMVF>#Scp}0i8@1V5hlC&&NHug#BR6uzuIM9zE zf$2I?*nQw2 z6Ey_{EIoLdz)O79JJRkHroSMl zSU>MJK~;(EUdDwF*S`*P+qY6DiLbx1X8R(ZucbL2#Bvhz)1}hhboSX-o12SOa26Om z+N&1TEQr(vfvlWH=kj9bY}g_(4B6edt{7u3ijR1{%3-HPCciKStK{B#93LZa+`~=U>w?Y>x{A`@5RmM=ZqU+XX=*gs8SwZ$69Wdx30!NzF z+~bE?gyMe8lerH)A?CMp(-S^OOUVV}@@#c)aqj`4yr5Nf-D@arwkFw<)s?!-=N=Wt z+A_k?wDi-YW`D2hLexZ>m0GCV0bE_@8%uL`JISB8VeELbuDJnY{W|bPe48S`B%EOYqlSK8TZ%koVy zLnPh8ZlN?7Zy)?_{jmE}?ub}>cURShqO}*7Vi&rJl$}enBgFb`P9yOwxKgoo%epQ{ zy$VeEPjw31XqO>aCw^C$Sx_{%JUmHM6qnj3PwY*X$~OpFy|?~4)`5{a%TJ6>X6{0E z31yV9E8EYm*12^r)<&Js?Wi|+T~TeSe;Ykuc}WXPrKZ6?T1~KAM`UGT_suA5H4tv2 z8n#;A?IFjAqMb^%8}xN>Q;Y^L7IeTC!xSE2m;F2o&O3Bat7;@{L-|YAOiwuI4DZxh zp|U(3Ju(x+E$&5JB2)Pzu>0DTQQX&73}$_V7O0t0THH|0P7?<>m)xG*=n;Q^&a{$28+(Z&&-o+#b5IZtdQ{BoDIexB@Y@0CgNO(>1}cE(}y+th^4o zx0<7y#L1B-=(3atC!$L^$bFZQ-RU10dOOmC^5JX!{0A{!)4c&Gw1?tqQTL*RAm>4I zN73&yN>2N(b}UMfQl!=d2`G|OB|}x}W(+ag1(_vURga0-x7?Z=lOyE__*rPD?9xKsjxD^ie%G%G9QBcK}FmjT~YR}?AweXB>Og&!3gaV`lEN>(cl6 z-S_u-{F71{CbjvbA36JKpyCu1y161dg}0jm za1CNi>V*c`D-vwn^tIPhEwoXMm5-w~FSJ&Yb*VQ)cV2O0C}lqgyX*^V3z^69=J z3UPVH>}kD>WIR)|9#GjCZ&@en5CBSdb0x~S{OZW!Qn^mdrY(*`?1 zm_%!cz3F>xr)a=g$3QK?4kk(#lr{Tt$NOG`huJm%gTrx+KI9$T4}?PVWnO#)B9M%5 ztftd4pgJb~5IHh2J8R3)DC!N#^(KH(q!pF>_glzYG#k2x>S~+pyw9WX0pXC-?3!&8 zi+1#YV#D3>)R+~wc0V`e2fbVMpqs+w37BYRTu2OXLLwW)0?*ABx}s(ei%3IBs8^{s z?lyw8`xdNxsD|0HNB#=vTlNd@#Yr+7H>Mv?M{z}BPsA8DcpFmW8~v@8TSt-2D&+z6 zL>ax`_~ah$f1H%SZvagI8T^0R|2^R9-i7?&22QQ<<&M!h(%~^MR?c#F*)SZ_uCb&@o7*wY@8=JTTF+vd8zAgUF=fn3(o{>3@bmpn#@+#)ghW=7P_S4M*UIvp&B%15>u*tnM~4?sh5+kJwTIYo}}5 zM{^wZCjl-8CUO1Il~8}cZCc$`%0!>HIhqM;^C9q;1^Epahx;Uw7A=T}zt){|4|zqh zx-_ddPOYtD)Q;AvraTT3W&D(Ywb=+w;nzAU{uAf6{$?)p0A4#YkI_(>I?8(G)P7ie zI`(w!>~L+6?|!*9mY!l~A&68-EGL&t(+n{zY_}{M-%{RR^yviT_wwqUVuXwd^Eo7v z=6C5_MDjSuI#cCfySufy<;nxWd^Yv4Cq&cC+t3e1oPjA9i_Lb85 z^5#!s2<5(hbet6t6VZUn25kqEP!5F?}RmQ!ZsVQ$XDRB^=16~n(F>(OyhU& z>qP#zW)!+~*(k4xT=!wo?Our-w4i>rG~EVeSM!ESt*@r~ zcx?r0ZG5!rPo_4aL&BJ=LW(HnKP8Vf!I>*^SmGA(Dt97$^yzaZ0SATY? zf9rw#mC&KpwbBC$_<%>O$UOn zuU~PP?>gh1`bvwW~60jjS>8{W6Kaz`qc?4Xo-o3oJv86-OT2aQ0k<2wyZTd5{ z?k!@P3*J@Qs@KMolu$CY^=8Rj4Qn09;@_qV{ClJUdN;_L>X(rK&zws5`>@pdgLZ8v zxz}O{@gFcyjkOvpSlK%1dpV8_c811pFb%zSR&7hOD zTv&L{-6w0(>&+;(K6R%;<5g?3)B~7I))=B0vx#VEmSx-zfmkb^bzNdk zSdLNMnm9dt)FZ{bQNq68Hn5cB_HZn5%ot_-q3(j#!mbvw&$|nx*{RZ~gd3g~0&X8? z-wOJY#BmHVeqg^W!ozm^MG$Cqc{dA-?f*)7kQ`&6(@!Q%d#~|<3KuPF-e>VPm>oxa z^RCM+uu5ZZw^Y_JdxnDuAxI{3#f)=zlt!YSk?kX@vGJ-%zGog z%r$+V(okk}1!pOJ<=tkv&o{uaSj0CaWM9Y%vi=7E2rv~X#4Ro8b@pD*Yagun8`5v` zYINF>VUk)HLYS}ZEN0KX5<9U_Bc3Y~+eG0G60nZw{JTc=0DV;adxZ+v>`q^Y80 z{wCt~`Pv4HCea6Us<-k=IX*}p`i&pgnQe=mNrrz(e2~5UwC>^bCcZ@iLxR7KFz<@q z##4RVdOE9oz7 znDE6KmIhjxy8V<+#h;oe_q4kEZ|*4Id8>Mh@RMumDwVj*gOo&TpRK>)yHc{)ihqv~ zvz}H;Fv}1Q5Yn6`VAS7fNlwcw#D!m)`qhl?o91P;;o@rD3kx5smoBF^zVW7}t$J8Z zO=i7xO^0bfkErO%G<*)I%m2HagiRB+y$HQN|9R4Tat4@S+%d%`H0gUUg-pa}uhHs~ z&}eg%FBnkJllsHzK6dV_3-{E4ncXpU<7S;KKEf4eEBZWk@`Jeflk}aM>>EJrvF;r2 z@XwPNbN`x!qdN;4J2a_7AE3-NJ|CUmJLLlcIavE9lgKs~SCo!FLej!t+2?vs0dl-8 zVGv2u_4A8(h2`}|t>xcs%#!u?z{$)C?1Z3uUr0W>c{O=v#XKU+tji~)bzJ^4REc2lsxO{|5(1teE(BU11GI}U7 zvy9QG!;~&A`q#qUGqEM{6Xj)r8n6gUrhR>m-F96nihgffM{ag~CFJwK#1yN7S4OxdTKRi6NA9iV ztHl3(hBqdmucW_7qqbx7+e+qAO+;m9X~ZSe@SCtc#U+Zk^nIbSNk>!4GQB*Uf0X>ai zx~NPEh-ilQme$rI$FNlGUlx&Xtz^1sLQ`bcSok?rTMCaW?y*ysXr~ZPB)GaNK?0>2 zlUx>13wO0oB8glPj+EM^r#5M&W;1=J2xDtblGBsozYe4ZdCfoA=2B_~^c2ZD$9*XW zFkHY%pk4REe}NmBPdxmOIz}u!FveU|@}Un~<)jOaCHz`C+`OYu@)%K%DXmB0O6f!1 zD{=SJ{&*4sSVuRG?hqL3j2->5F+=P>Kyb%!s(e@K@}O(YkG={mr3K})RMR7bz1^wG znSNY3A<%QL0&q~pG(1t?aLXRlH=^G>ytz}VfC6y8nPbgcTe}^w z+|Fq{ibtp>NxYM~BVwX}OpKtczmY;$ER zE6C^8WOa{{SzwG|87w_`)S3*WDj+0TCp}$o;9AWG>k1k_lr`%LH|WPM8E`giYSkfp z1+2r%`Zt>=>q%1k9VP(zdS>5X6UIw%Uu>#}OPQwSq{Zg0QiLNh$m*f(vyN=5^atDz z+VW{rZ(Z*GNeiji0PKeS_VE1wU#7~R9{;~`Lw=)zrW;}69OlKNKmIf5!xeU=ojd8= zO1nPQWvn1EF|pqLJQtupYqbx$xKd0t{!~?k{o{IU8%0rLDKhR8J9H+t5hbd^pd%^k;#JxSeL6xg9@Ux?=U&VykLLMX zdP}yfbZEvaIVC%us?Aus_`p$ zZ-#C@c9W0M%6m-M@AyJ=1=aDyay!Ic);5#dHI6pBd^B=7pk8uuhecDb+fE_-WZ%*P z4be+nKPgO`&fC2u%qeH+hc9ldm!aOY=oKA;X-43Th`o-b^tw}Hkg=ckk>P`Je@?z@ z>-U(L83L!b_4GjK7;n#T{MLs-+Df(36OQgi4JDttT*tuvvaU#vLcjWwErX38$o!e% zXzSXNzLA`&{4KJ5cp+S%C=~SpN$k2+a}|3ufkdKOF6lY6<1K8H(o?pG-a0FZ4Gn5f z$z(+{B(7Tb;P#Tnks4Tjp)CaQwXS%3&JLB5AV9M}-pxH6D zq{`RJxvE>miLV!*-`;-yj&_QW;&PJp#Mb96Qx%iTiH~`%q0zQ>y^l|tT=^$I9T*-N z;;I0ZgEeUt7p7W^p9+Ds`KnTall=37O=N?e zKe7OS%U?Gp<^f_g_0~JjH1i=UjOH=jU$|Na+XhhDsg`bH$ZoA-Zdu$zVxZ`5%Eryo$_8?2XSN{xMaYR*Dl&=}lYR8z?eX=EN$EG|2l#Qa> z_5OjTr5(DkU=42Zb1fXsX=hgD^H*%D_Fgy#|eVT{3=O#66}ayw$&pR?`tUV<)ZaGg~sNh;t-kbq$#(rf2N1;*|{Bk z&~6$OyA$6Ves#0vrlr>V9#^2w7=o8bc6 zZ2b(qNK@oEYK2Cl1wn&O=@Td`eT!tYRNwO1_$^S6;L%qm?Cq`XFJ#+E3J?>@;JKf* z%Ztg&_*3K9^!Q(f!?bOk-FM70yZ<2vA6F>!8#`wNrChsdhepu@rf>_)3@4bvHECQ;PXtaHC!Q6-HgMT6PHeEse z>3`J)%8wi5Ag3e0oF)d){odPmFSNO(!zORO?E&=%Je6xPA?1ltgTvL&8DFp_*wg*L z&*%*cJA**;29YY#eot!ZGmeAK^ZJ>=`86On4uhiJm&XRGj?SFpc@5lyPJg=L$-J|h zz>GI#Y%bjR!-o7l&}e+Bh3Ki=3-r$)_F&$e>V{dfv@Vclk=yDk*QNc5k9Je~ex)6S8NYzboNE2_dZ7Z|47mlaRtmNgAt zX+y@jFy9p~5qZ7= zqg!5onW_IA>gm%y9m`fu9>)~ed~wCet9ELqSd247d)j@TAvhvd0;4} zHKG?ALDe;Jmy`<8+ThmD{vqqU(Z(jnAzfbljfvtvCuKJv|=He6)Ky>#tU?w}uC+#f~m zATUZqSL~}uVEs9}@6^vYSaw@hOdOKle*hVF2(*29oI^Yv-y-ueeGz_pcIwd4yyre? z7faILN;O1s_Cjh^@6M}N*zfBatD~o(Eo0|wq4jHL!yFA@Xi4XUhpc(EeA zkvbetvGYja_hOL4XG7&25>#dXj0IdewY{5C&(L2BPc>OjQTwHTfG%3w8r=Yl1y89y zJjA|g=lFYi&$jlzvN{3WtUCr|0Ts)*rJreV&nxgrOXd2;J4xQ;NB-E7L_tK#RfEA^ z`;4bgD*7P4WP4GIBVlpg0B&L}%M82c#uNnmC-IjkcX}mFKbw*xMzikM-hTK-49cR( zZ?}G?Z(e}Fn%;YvXI?$!{U7J(5MZp?y)5@X?i%PdFYupjzsC*?;`ysudTwvsCnTa4 zp`>p6pBcEEfwIVT@nZB9VuOc~KXfvHZX*HC=%m!?t?RwNDm&oyvLx(Sg8ln|#g-`T zv+4*mfJBiR8~gI4GIgd4@=8_nPq!`nkMJxlOYp@6XeWm<6XP4#Nd-=x$o|f*o&>7% z`fWvYB|yc2eUEXS{ha3XXG>Usv9iTYyi|I5ar!i4u)ngWP71*u?egzrGEM-W+vUju ztK^AKagsApOLe-`>5}x~&n8t|1JX&526l62`nIBbfdf0cMqkXn2Ku)oD@)H~JPXU0 zh#Lt|SLyM+%4{9bJ~=!B7K1N9e$>g(NA+GlJ`cUOe{S)`xzyukN~>f9)g!8K+`olIF!@xe1*iM zPVNsX9uF+$82G2Yf=<|Q-|m?{7sc2`(Ldjnn!b1#bhR4bvp(Fpou5BgqSs4Bn-+Lt1$X8ZniAx+t$iV5S$iRnWRowqZ<{)|wS zWo)S(C+&N5?>~!T;ZPmLzYm=@T6E4aUIApT^_#4G{-494OIngkd$G|=6#8nRhT#li zmDm{<;G^A}xw^y*9Val>KXN`w7^#Jc99kmV{XFB`@rZ z)6!&YN(%WktiRe9zu&8j`Vll5#s}UA=azM++nQvmWL_=x$G!>A{eYNsi`D3t*rS>@ zE?ht<*`>&{b163t<{q5E>V_S0m?URpB(Rzp+e$_fzWZZh0(C-I@Cw002~ei>_rQdj z64rEmxqpSk>YICTztx&EL`xew-S4aRCFp`i!^ez^3|INwBY6|#f~`6sFdddAG3Dk_ zRSk~}IP?%_vT13Q7@8-yJ7PLB@mrUNI&9~Z3=xvz2D!dOA5>^Inty#0JGy)v#ImY% zZ|h7Sk9I3cP=kw6g{yQ^fXl-#(Vh0`VKvq=)K4y?;W+C-bH56;XL(02!M3vRGFE0A zSK7>t*1i-^y<#j(KVDWeYvN;NMKhIGta90I+xvgY>GRq4TW!*0go2qt7JaXcj&&72 z1yq8IU!r5CqYjsZv#^{tDFCQ&MPKdLnLhvL_SJ->drts*EyW$BZ2{!G#rMxyz$;YF z0oSEq{l=_AZze~!irL!De z@9jPODzr>xohLu`y~@cb=BqxR^zUY(mTn6NWU(a!lF4lA=-eTNP z;rqWY3jfT)+s_`XiNrk7J#;o-;@3!njd8dlyZ!r)(OX5$Dq7s54YLJ%lcr0<`6`z# zQz3kIAE(nO#muVr>nc`gb9j&_*bH9X^5}2vY)PLAa;Ld=WN}WA3jc=eZEi3-*R!Xa zJZEm39byspwE&3q7+U0mU&bA@B9B*!<{x1MJ!mcn+4hwvdiEEK*zv!b%8Lb2Tc1B9 z`nL?2wRaWQJ0X-!PPRuyJDW~vH64y(7UoXYs=le+<;msV?T@!anH$q}3}a5heuc}% z2Xw&M67yslJTUG@L}ek6kEwi+h&4Ze8;Vfo=78Svbh4U^(rGrmEgw=w_^}3K{+OJC<3`VdS$w#}Lw$|EL6SbQg zbn?=+#;86^fK2|R+7(t7D9`P+8AX#G74HuKpFf56&=daryxM-f9{~>HZ86^aq4E*O z1h&QVIK(%U@C;JB*sT?hU>NWD`}xEKZ)VDd#}LWw7xfgf=m~z;tk1$C*B#HVR}+iYUcr8m=qD6DiU^_*O@;YedM!aK z=m)xOZ`loQkV`C?jYU(T7&f`#zord&w_fdK6^-TUJnb!b+-p@ceI9rqmf@DK@2xG z)}M85$e!TWXNuTz=TOCwCp27XbbM2CAJeEG%ez)nxs|DSq%V9=81fV5CIvNg!C5$r zw9?pS)^jgnZ}ByaMc8$Fb=%jhzrt@DehKl(#)+{;qjzk-2R-NAa4w9*0cLJ!sU~#w z@lta^@dNl(qK)30+QIb$fkZe%n_@qUH$u-y3`KfKP)y%gh^Ul{1EoFEesN<3#~orW z))-2Ep)F}h>5(K-9t*z_u8fP$$LQ?HUeON1{LS)Ew#}d4KZ)4}pIeJIIo%G3;KGz1hQ8hH?1!>1Y%bW; z*}L#{Cz;gMaI}k$&R_hizk7x9nSJZl1@=iC&Y$D$R?XYdB);pc#GU7_BnAXARCx;Z zvgD7HG4-f+b;`-lNo`f3k>!MSWKYcijCUiD*Orwy^T>TmKBeZFpH%l1oYO$R(FL#u zMD+t{h+*&+(R`5Qp*z4wHbjU&8iXW#H-C`D!Fn^KBIHC3gFIUZ5BCm$A5h3Sq7O2!UTqIdQqJ1Qb-gmv z{W2a0qD7kCb)6qzV`;fd`Ua?Jx>70G1m-|?tuvrC5hKAtT-#IkbUJc*%K>ng!CE~l zD9&a;ZAke0ahd^9EEa^J!lnpSs9S-xyZ)94*|qNj$w0^Su(6@(~EjguaP| zx?$UXk3ojlmb~yeb%D)u+Zh)8c<9`fpO@la`yUS*JmWF-cx3%p2CD8`#EIAuovSP~ zs>{W8M^aetQVhKGBY7A>*9#QUlhR}uMQMgk%M3*$+Hu2G>zAYpWSfhD)jsn?Geq7Ez7_s*fMt~rx~aqk_ZOqDfM{Y_*t4n;t zks-I8Uq85TZ*>&;$~Z%1m>-V%7MTc`G0LXnH<>-FX8N1t7`HQ$(A60gGo*zvU4J}# z#l_O^*!GC=TC~M7)Keamkh-!EFG;kvP2?U71mJ6Jyc>X0j2L#2nS+4X%x`ICjsCV= z;VD7FJ(~Iz4!bSUy-<$jMk_+=yNkA;!1$!WAuud4;r===c{zHr$1%mMCwVcxQ5EhB-C-|gCTp0!nBN7SJdBJC?CWhEnxE=8fNmPYR}Gvl*5~*M zR^1w*9_~DrO(Przb#rmv2COO;dk0rJs6atzWk?0`;itw$55nT>NO#0iA+0N(Z)U7& zM;}MWG-p{Rr+GxC9Q})n6~wqReYe@~!B+#T zPu=J>#F(isY{TO+&)aJWV)=1^H4PbU1?Wld!pB3Lm1z@*Ci}|NxUOZ~#=(1R#pAAN z7Zo$F9gr-Q)AKtP&+&3iQ8k|rlJb|Q!tCv$t{1WIuTAl_NsT#li3;6gjS)p<&19%wsQ0 z*SvB%mI^Qn4k3^U2bm`5rD8_kYQjVl6JR6{Y6Jsttn z3`UH={s!Oz-DF}0dshk0zNQyANjLmYDXp5Q!X}@Hcpw(D{w|~JHr&W|+Rrq9R`GIy8 zTlLp3q5!04cx(+Pi>@IM?0#6*YPm*I=6BYpUd=c~8m-o9@=5W%0IZ($mf@qro#R}; zH>r{bl5%Fp#iqHds4lKt!ZLZKzz#KBlXv9p6(!39oc6 z4?hxYx$%X=VL1Lx96X)#HI zkG-SsPdrVU-h%kjvPLp z)Z6g(%dV2l>fz4J^DDQ01%;ymK_G1$_@uY}eH+>J6=oe+!(h1ML)&qyrpywG7NZaB zy{6QKqG@Y!)5AWZijDA>mv&mm)^i6OCq`NRQ6VAmvv_MgKu&IO$;0>hyPA_U9 zN_!qBZgPNh9$n4lnd=NxRM?|H@N z4ktNVrx>cL5IiM+szHslHJ19D#%knO>~gp*Xof;hzxXB8IQN8S5EjFu`$g|gCF_jS zGlCG}$X6%xYz_`bf7%WgvT4K6jLR1-%JT(;eJhgPiE1ZBzK*?TQzjE#y@7)!^$ZW3 zwo~;_)=Qa}j)G;f65>x>)Q+~PxbFF{-CM_9S$44Ru*vOPjaMTqPxr|zJM$GSw{BLQ z`Q&Xq&cVoNmr?AWLYh5Dx0I_+l9Ul~;R|;n+&NX;k3pLByH{lUzkpe4#f*{Fe)T?i zKDb9hD|d?NIHMKyq~x9P1j1qImF^M5q4LCjql*4*1wBsnOQ;0e_%4&X|?4Pf+EfOBbg`_-~Y&PEgS z_>NXuetGEA*RI}^L9!S&lm0$+Tw@aR8s0gU;XdD}{uFON`5B8FtRjh#U~MbRDos~b zkh{Sd=yfMMRIyJX@%yf@oVOV|iVo|4^mWq>q0&R>pHg@@`Un)OX z+&_FJ${pQde29MCz(#>2vr!3#oGlLwEYlaQj9=|$=ektOv#f%|%)I7d&sP%+NGtVxsT^J8}&Dv z7fu6QMPfVwilZ6qR!5$qH>1wcdr>8AV!U&mCwu?3|EE>}`@c#IGI0eR<-n&;R)&4( zeQ6G{3$}tnk38c*x_2s;-f_!Jua9rX)NpMojK96;;X19Vb$tBeh62M@KmEeECC%D7 zfd-YC?;v(wb_Mpx`~b9C&evO(lvdL}tuF1Y#zWL1G-`I?Pa$~_Q=RsrfqZXbsL%A~ z&!)j=hHSNb)Xs+VX~x~ZrAE2M##KT;UtWK8j3_nC(7gAYt@&kwNV;;GhXi@=0L#Ny zemBukzimoV`ZQiVH-A#aS;;nNB$TJBG+w#PbaYy%C^Y}U>RxdJJ29Y$DYttkuB^zw zwl{NOc3~}UNi^p%8ueQ6u8L`Rt>1lMGyMXVbuySlwISabE`B@ZUS6k;_U4nrr+(X9 zfTvpRN?vTtK|=mx4r>b?9H8J0wNsS5Ed}Hp`PP$8K*nj8A6TOabqgT{xCHQV;&0_9Zc)c5p|CI&nF>aP0YJ*e}6ei5_fccChWM54W1Q{{GUA z{kA(@L4CEA_38-M@^QXgZxHRCuF-_1c!G68rvsDGN&KFnN2AJy+P*suxvgg2C@No> zSw(Uh$svE0-qg_U-ler1lISuL>v~($9EvSM-U1K~r}B9q5ndM}bKU9b&IR+EO=;OV zkFjQ|u*uvzAHs1)L240~j~*yOGYwuv7&>B~b~0#5Vd1m=0NuEzSsa{YBE+Vd*&mq< z)QhsRTR<+#uH?#ne`m|t_DAffE$+5EQLO3W!snpZ!Ls^l9tQ#+s03`RD+bH^XF1-R zx9NM^<89f#Sru&;(f5+IONSQn8VDYli&K5a;ol_gbrM|$UF;;?%lkd#X+*$GR@a%) zIhYZe@MC??=PN~CdV&cAb+=%?lh(5%869IAFLy7S%&FZ3FO!{=axXfrM~HvkhB-`9 z7QY5xD$}9S^}M%W&J0EdA6TlmmqrEd_7+f!#kbrg+WM=XX%R|OePkRR(_68Do6a~6 z*@jn(jGBfE)V>TbF!;1ah-c@QE%cN9xkk^y2;BwWSL!Pej@W9J zyC;_`3IqVF?|nQ5aLTbk;)(X2k;aa9_Om&AkW01he8+~_3xkb@8B?w8cZ)+Vucwq~ zCT_jB5GM#+&9Jp=s%_V^x6PwNf233Xrv6^%n_%*7wftfBb;6iSM!q`{UPh=!w*A-w zBSl;UsN&-@S8!x0jC=}?IJkSV(|g`BUOD^x4*hE~InbM#)gDXLDMJJJAi45$k$2}v zXLb+Y!Oo^T@+EP_irt?)(*y zDfiwm*R!uPJ9!pSbfrZtfECv=i#En04R&jpt=gYmOx6<^j4V;OOw)=BT)S zS|;>eiOtcnDVzJWw1KkKN!o%X9?42`A(w!3ZYh0ft>P^s6uYMdH8Zd z7EoJus87f1g{QNRN%TQl%FvbAH7frG{rN>)r*TZo!^Ov{zCbl0_)LbY$yv>t3fOq7 zNm8Zd{AWv|hlTfK(Ce+{4xIBZ>vSTS_?8bM5UkY`K1cG)@=n&T?=!X-qb;aCO^TfH z3=rv_0s|(=htb0z+q z6NT@uYNd?ePuWw)7<)~zqoI9W*9Rz7j8E_xq=EVLrQ}g-SG207ZbHB3`~?mYtp@js z4|2Abo_T1Vt*wWWLT_}MywV;_T39(2TTsJn6{TB@$WXqYO^DZ%};b~`PX;~cR0&Blj$Ca*m0U$bpuFQZ? z{cw-1c1DN*$L{;cq%b*SVwszfM`L0WBUQxiRp?6XC05IsUSNg^NbM2K1*9^nS<~~u za|ppE5x$K%W$(1t_mB7S9vg;bmB@Mn}Cr14oDf+U=Il_ZK^q-Te97pYM z4EagS^lY8IR*0o(kebZ6r~-6Vt!Sp;nx}x&xGo7&Vg*+%0@R57EpNR(vLBkrMkxx& zt2{H1kWg%PzuWxU;}MKInUbB>1wJAAJarGtQ=rb^bM53Pnw ziz+nVP3f<6#SjF+FPkXwjFs|~BO@<0$Hrq#V*K&NoIdRNl?B64xaBRSVmyC@47qQ? zw6f++`|i{>gq5b0%RV=kts3c`d-PdV;~4Q`!TI*Fhwkf#KzW9Rxg0~2C5(H-i5V)C z_Xwj$Vi(w?Xa3ox)RME%iX_tYY(xJNMoBBA6Ov8)LCQY~fsm*R1t=QZ?=plLC-Wm&q^#e})v#9~b1 z_a)ADk48Ztz$HjY3F7q96!h8{Su#q^5vuD zd5e2DKi$s8`mZS=5c4n~wcaJ0K=`)3{FJw>RPz}CRO$~oz2c7BR7XcmyuE0O?R4Td z?{!P6a);kepap#-aB7ND2vAmM?9&Y9xin}wW+$sN2e{KfS^-*t%w1EuU&c?X94?b~ zx`9*py%(+>K+t8S*dK5JH%5iId?xU7j%EibuIdlcU$Rqk7Gr#f=c8k$$RQpdUIug> z2hosC%?qx9uFP7cYF&A#2C*y%l!e66zM*^0LOX4FM z?33eZYo}RX#?K15`xv8pT-@iP|ftaH>{w*G)d_77r`_6)wvLgarx(OfM15o z#*pJ)sGmJuIAyD0!f>9FLl!_WYn;KfclFYM@^uApuJ4UG*Y{0cIO2v}B-!gbnmmv# z6qaR?6Y;mtswFZFvx^q~o+P;lJ=TMy{GGGmq3XnWWjOj^o&*p&g@%_zr@H4ldgs`C z=?XrZpRlWVp5AWji5F*He-()DpLl7q_OaR3Jb`04cuiiWMEKLG`s=qOuS~|84}Xcz z>ym5n^0a)RVIg2B={8Br3eoU~r-1Fa*Vgm0*I*6TZ}F*%`occoPlfpIWoGL7$pIoX z_sU!2rs}?7iI|vFT=wxM7dyiQglGrwKGnzUF{V1}2(5XA`DXWAqYl6!ay#1?$5ZWo z`Vm||jgf|;Bu(W2s);h7F}Syz@P+>3D&_Jz%g*3IN7-!H`S?{#Int}}58Ge-X5Wy; z78RocPK3eCpl0y|Ygs7!=e#Fxq~4Z)N&Tx{BLFR9T&4~^(pPJPza_bnj+~^(dzXcd z9qgK`gO_Zxj>wR^|b{qh$uz-Ul&`}i5k?_Ggn^CD>+)h!v z%}B{5L!m%f6X7?$A*3mUE(4@=FLUHfa9maE zh|#2lWAqDmohF6T3%E0^eYfZL^t6($IYghV_v3ZPk*%e7_fDfdE2Cq!W%lmhDnrYa z8$rPkl>4xz7S}7|UFW2(CKr$i0lYzi;!^81hm*!4Tss@UNoOwiJq1Iu;Z3=$dC3#y zp)oP;xEscM!l^C_Sm^hlz?bu!mGl3P+8}32+KTIIEK~Lw9o^yOAAkp~{1ne$3bkSb z!j471`j;cSfECI0$D*T9YOjf*Xc4~Uz%F#un9!{(t|U1<7W`MK%YKst#A6h5a&`_xHWtm9tTX43 zapfclddO805%M!@b7bOK{8D(DV_&b2pB6E(w%`tJLZ~hoF=IMye&({)!)VhM3 z-4kC!p`f=6#!q7mOhp3{2ussYgvR&D{%!|N@y)7>9RZ{2aSeIjoLSs?FMgr z_pu{C4lPxkPhz}gjq8kCVm^-;W#@9#su~Ho)eeNt{%H?C4s&n?PkJdBwjc8j5U+i>?~%KgZH?J6~*WR!GW*MMz~^7WveS^pB6@LoI%~+Hg{H#pi!CmlQOO+8Kxfl>SeH z=Jx&VCkGs`-0JkitL=zL>JjH%L;atbfC_l9dgYyIq*6sZ9l)Rn*TdA%h6zV#3o~vW z754c3?*nepA0vPcIGmATCsnwXmzy+gJ8I@_q=(55-Bp zy)l6DLQ>i^zH*QpWLp0w1$=>Iz;Lj$3IEu-9j(tK(IFhOTJ3t z-L?&WiATwFH)95@2_iMc0SI+sc>c*6Gi1Yu#BR?3h~AF$e_lk3N5)M*JdhZ%r*HJB z_jTh|j5*_c{@hnjK0aABOVqHr2ir6k-%ByBj@C`iK08?}tWs%7M(PQ7$xlRa)qr>>*HHv!v1|$^6LQr0@lB zS%F1VehdA7n!VX?4322yQj#YgASI!vjm%0*o!Eq=BJ7}^IFQ3qShN$+Z?Zuh!a$*CrQYX*KnGCyOU`#$E1&p5Aj?5!&9(plsdwP-UYax~Y|`rzsg#U$^-q5aZVD$QCNvQOvqokY8k#mC|s5?>{TUO9q6A zac#kOXoLM?$S|v*Ak9x^zaD$c^c3!%7mKhN{MukZJJUDv~zemw(k)lzmFRQuykC`CPJ&Zg`5+jX|((<=|Y_= zo8~7V3~)&NTFcN+D4Kwyc=2}>;Kr5EC7Slt*{QH8>Wy#)Lowl|-;BDY`9w$l2y3XM zD5qt`W0$~(5Z0i(RIf(g6VD=O%)=C0V!1)P(_dKU0Fd|ya%F};j5Z$Gr5Wsuw3mNS z-@+7RcvBUL>8)HJR9IZShr^OGwVwd49pWq9wXLd9Z>)@i)n!;RXF=bsl>Fj62Gd%c z_YNuOjnPO(muiF?A}bQ*9FF~5Iz*X)IP~j)k(g9OGVP=VA6-2+_xQQHYQru%r$R*V zNSn?o5R5X#FK-@L)wm(b_8TE|q`oL`O^O|aS1FtOly`(xyjW-yo_dEvOcwxI<(OHahCx#^BZ?gH3Q~Qk5NZW^m^DM@I?zLUg4?=D}l}#apttwibrXP91@3ljMZUY z3CcXm=JRRVLN7_^Gi!L&I5ZFnba)@_5Ry!WFIrkhcxF0z71t)>8j^#%+=>fBBitb zgeWpD8%!j=nI|*)P{!u#I#(yG1igzakeetVjYt&d{S&g>SLHzx_bl_OePugi`QA~O z1=$zdvz_F^b*FSwY(l#764hn`V&SU9yq*PqXjXHaVJoPa%sMFQxM6j4 zATUKe_X(YYNS)7Fc1$DnA_jB5vw6XvJ9A{t{9NmOEth{jvHRYAbLRUte*@poTfUEP zk6-X(-1?Ud@9rvrfL@sj+nU3*Sz$hRhi#<^B=42V7cZ-o&5y%_l%I&G%fE+h+QAD% zVoI4d2KzeWdDz(MR2Uab(Im4e{X08rxWce+8$Q`UhT1g>!nnG*2}&uz-j?oaiEMW< z9N&LnRrAU=cX?o3=KAt7vtXk`QTg=QfyKV6*_o}?60j|eneDt&H)~}EzXoSz zL4bVBocY7o4E1>mx#6!Pzp@o%G&XbaC>`$#PJB9BIq3IMog3mOb8T=SDvbe34K6wL zN&(Jqucyby-lWdv-p6LoXNU@z_|JGGB-9}GAJUxS}MD#ad{;6@S zU%=jK3+swH2)M`oikjgv9h2>bHu?T9NlkwD0G)NpZ565CU~D{6HH})>$Ru5Hk{x9W zs_NA^bUx;vJlt5$iVOJWAJueR#le^F{?8k62`lowQl7Oa4+`Y{$!xJx2%Y_v*$7Qe z&cM~1e`Nom=bVr{>+NwpMnE>gLscN^K)7crX6v{s?&WrV!>RLgWiQlxFDy&d{+SZ$ z5R=WE`D7E=Fu+3->GDbR;C0U@%5KIgbU^uGOdg+f-wv~MT;AOA!=*O`u2$%^0b$=x zMkb~27`vUP5t&oOzp2<;^Qgwn07sc5p)zw{o?+jFo9BKD`Y>59bxtUUd5q#57)Uke zs%IXt#C3$d?Q~QMP;g$*3Vx?>@ia7tbyu|+NFPx=isjgNn&xW0>`RbD>o$uEmx=I} zoj5nDHrys+nRn{;#uIZN@c=*T%{o?szZ4o~hO!v?LHgbYE`x>b0Eev^91qt}3;Gy+ z&ATvxQ~hSm&A#d}z&TEaK)!1Eravo{69Yu-PUkU-n(MD$mvm+Y`E1~1%rUmtF9?L; z*|WFhH$B5{-Iq@63+xio{&4{zPmz(LoPq0-u*1G|)$aXoeU?~VG^KMZKgCttBK^|J z$$9-0ddyB|;mIlM_yObTa3#5*9w#e?6{+>FN+R6a#PioB%-BrMMn}>G$UX55=DIYL zr0$HiUZ~HE1X9IP?1&oA(sr6lBEXHY&y+3@2+c_WBbizyx`%Hs_Ek?u&2JQ`x#r$G zS2UQsu$;%|C2LoamEm)>jM06IIio?t3wBOcLm%&s#@0t}$hc&77UcHdM#Ez23t9upiug`R zarK?+kw14HWa}jgR{=1Jey)D-72|VH9|G~3hIl!d3ZSYTLBn?JB_qGk_9M@mf~PNV zPA^Gwc$~-Ii@F1``Qe$&2yi1p{+Q5F+xYmJPexRBj(2MtF2kM^m11RBX#;@4U5pFJ zpY0;G!!QIh?N!F<{O3nG?Zq#Q(w(=DxoJa5hT4?Alx{fgIEq)0hAOKP}&R!}K-@g+5wl zEzm2{ZUcpA6vtMR26tys~c1#!WpQya>fMF6sCV=_;gmew?ALYb(7m|q7 zScptJ5PTS1D$ol3tB8_pyHGD52_w6;zyq1LgB|d=;ZKgXD#YJX{yRMJhvMb1CjCeRaHFuqPSb za2t{dbMBOvu%n#U}Z+aHfKr~d1PmTPxF((bfsu4_`7vo6q<{U7!^ zNbU-Xl)P>JH?$HfsM;u^OEusLBKu19Aao$zVIjzN9%H-0L`5MJs@nk1-n)4Zml3jC zozb}51eO^H3Rs5Roe;dc*l;$Ka6-|I-UD;xaFs;ZoDJWR=X0s`+XiQjLNbhAA#-9x3{p)4d{_3@^9#Rr&-N-InJ!Sw z;C`|w^`Af@W~}`%XM`|OBtHIe#dI0m8%MC^JX*2jePQlSnC;!{d_hp_4@23m*EsM5 zTN^Fb;G`-#U2owJz3D^6o6iNUATIL>nO0;z&@JmV>gK@Sv8*q7)#G&KhcplHBxaYn zIPsx_TtLn0>{?8PH|Jil3;l#P5OckEY2uxja=+eKOLjtGmJD`v@^+^>A7oZ`=;edx4NCFIL3r9eJ`9IsWAcTRsPfBhy4 z=cmgke62g#pHeh#-@|;8&UW9?9BtVBsL6MDPwV6^Zpnr?yvL#EdDD5x`Yl7<-}YmE zIP2byByB~1uTrS&FLTX%-f&HhyYRK=w6RRU5Bc4`hNU3m$D#~~t;w{5T59YkwDGEv zux|#by8hIZSi*f;hA7~AK z2?`pv7`OgaO8c2OIBbLg^^}{jcB+>R_3kbo$Wg<(sJPs1J5u%jx`3ftr+6(ysf5qf zIZ?dSRSmTnrPap+EHO1dH<|Fl8j@n)r~sh9t$`Xt4M^rEBGhH=V~}=&F4~0 z>QkTBFC({ybKs`{~CVlyKQD%uN`>%KehB@N)ELfeVwR(pX-K%dFFnX5f_7^5z;5Z=q6n!ziF45CaA z`HNt$>&Cxg$YLAED2?gNzXO5m7Yy^qzGAh1$$oRA=yypRnEu&ZUl@jxnG)HR>0L>8 zh8hPdg@5P0gc8h*n+y0SmO`2$Y=eCq|J|K5Aayr-5_Mqk~W1miB{ z@12XajKzr4u|l@y!KVZ10DH; zEtM}|zC(9AH0sh^c>Cc2$I`ffIB=@Ss#oINIq1T7-F?Cs)LUj;r}u1@em~C4>6$v=E6K8NI;bO zkxP82KI(Y0{<*ob!{&sCb(Oi)%pd(?vguwO=mO9flCJnv*7=~Q)5g5B%qbuv>mb|S z)|wF9^OSe4b+^xKq9k*;*ME;F{e9H2=5cW9jD(2p(PW4mJoKc?D4P!RY*{L7>Z(EK zT)BmSg(F8u+pOL12tM5AeZ5zx8YzaOYs~Mcn*}Z8#cGzF2RkE*2d~Fz8W%IDrlo88 z`n5Dnt?ucIhtN=Nr#+<`ZXrldGstI)$9D?~>XAXiMlu2ZX9pMoYCU$6giwCF5s=_5 z-Ax+vlE*U5)b<5Nn`yw~7;-_cMvQ+!S70eI{s_Z~TSwA%DG+g*^8!iW*uvn3KcyVr zT|E}XzRI?}M69ZK1)LK`9%4ykTy>`8!vGv8?`=6XMxJp{r0Aya3>bOY9}Mm2_bmPG z-n~E(wwdHHvM@wL-0S3Pz;c4!kuU0b{MPJ4pMhiC=RO%`8nvKkxh=p(cWDdiH$r8E zP`~ZKn~M_rU^nXHC58pni6Ap7nWds^b>epT?psM|etvPjey^5rmrZqRz)aP$t0CA1 zzUo$L4jZV5q+`tInlgF!Q#P{|Q;k6}HPN*44qEz5aAzDUlOHXu90nHUlFBZ8`fWKA zFn?78$}T?g1llhsbUr(?E&1~$!~#A?vE{m}!Y5K;0&(jJgy(2_A{;NmJB2Naj7;P@ z@rS{TdS0H=VEAEKA)fT1igB*Kfcvr;4QCy{Kn15C{~>OXdB|Ga?TU8gpQRS1e)twZ zVp|L1D4+e7MJhBhqfp34kUoKWFGf_reIkLX_iUhJYv=uTc<9BMoi#RrsK?Wi^kqCK zAbijO3JS#!0c<{Uy(g>A&#G}>u$n>ZMVxeuKBzkzyE)P%2FxyYl75}^zS`jzAjW(I ze+NZHZg~20Tu$c3xx9;-ck`-0nIbbR=aZARO|vD?(>h{u)i3`^c?xqLRhEZ;RJ+t1 zA9AV(MROT*z7~yrFY!kckUBp0pD3Cn4)f>u-_oC|FUV7}R6RBB0RrGL;e27CgW@NH z@|!cle5!hlSCbXp)LJd~h#23-f}%>YD5nlRH%C5=PK7ZD5yL(pUAkWICjJ=PamQK@ zP{#vOI)W`k=doDVM^x#no_5<}vLEjEXC!1YRPib8ee6#5ycL&*;-{e z+1;i)_}~9!2X?JF+40!zH#V-(nAF1RwE#9$T7*dT4BiFjr6ewc)8JMZ0`OlSU=GmTv{ubWGTMM6&oC;rShMC_f_nuvigf|t@|9Z(V%@hrWdr+7 zw!Pp9^spUGXWVu+_LADUZW9vdPx`7B%_QHZH;(yScuHjgMw+W{1P0SYmka2!I&z}B zHw^PcDMfKQcF!|Kk^amySfu#`x|sY}Sy3Z`tE2jtRMadEuOF+(+T}`8xb~C~y0-l# z?qK^NPMxVgy|K~EF)2N}ntg*Nng#JoNi)?jwhVl6Jp{<|HR!ZFs z&t&TXdeKE&Z9$;xj5)H4{umqGlpb`mcVprum2|m96cx03n&kK=_;$xx=eMC2BByr8 z5i1e(LoiXl&RV-{17_}a@?JIg(uFk2upk+Hz2a`}uLZ)g&MzldqwMR`6?cQz9%7#C zWpU7RMm=bAp8mL}H{$(^;imJKlqTd)8{J6ssmfUE)7!;iFbx3lJkTykKN8d8HE!FQ zyHZ($4}Zpd9=}mfRLwkT9DV5L{YkeXKPBcjhd*!$t~iBU*}832V{JO;W<9?~43?{E zT^cbnk#>-qtc1H4vJG`W{ACAlmZBVLtB^!fwA=(Fs2)4Wqckv?>|G|R3{$rgJJx&)(GY1fPSZq>QuaqVSmRJR;eKn=mn++PX&z&$EM>U#{4 zwl9Vo?R>hpRP9pBzH@X1V%xJ(o2}xZ^1yPe{0u`!Yuh4xy_IHR5Mx!gF`4Is)FL8} z{KfhXo4v$)1ouzO`C_Z9%2=HH%4=tU{4UfT?i{*u`Bzr92c2@vXOtiKW8e!~tIW)U zHHEyMoONM9Y)m@2ci;SDzxs&KZ$9B)L#(=`U|iTFCpWR_H_*J+ubVb2#X>GWo$%q{ff)* zZGoRs79-w=Czz+H(LIype}*Zcrf)U8p&0K9ePet^qxQ0o#k$X4cWa4aT6(`iUg}o{ z1oSNgPK?wf8?5;7UAR8%U#Dq=dXqCu^ewQ-&rxM(kC+Mch(3C#e4wf(yAkQDsQJ8L zb7?9iO#<&4oHkm^FDyGn-X4NiDOveMK|klMLZLFfk1^H7^F_AJo?gb2Du;s_~5V_2 zf1V3K3E<0g&fv?@X%%iSR9A!xhJdQHMSj4*-=ohmSy|cqjAW)*#u_dg|7p@up{)0? z9HHwiw_e4PN^`(XX2Kj z?|AUtyq(J9LFsIJ+{Qmh0f1oOhhw6$hPDD(ki(z{%h|sIm5>o?mR5+A5AX0>X>d{x zu~Z-%=y>fss3z&Mc>bH)#mP508tgoUMen^x@zlF{iB%NB-(d&Z7yK=Nb=m6Co+OK2 zJDV)tUU3P%J34M}MHSCSW!tq`9RN|u(IuNO*xf4IS>yr2SFN%^kKkmc!ZhKH7%I~zGwcP?*9Elsc0oPjnV zA{T9zCJX%;FFiFZJxnSAGG69EOY?4$Q2qEvb-KL zo+uGj5^%OVn$F8vAm=#>LN(cdiz9oQf}Gs#WS)g?c@OO+11jE6HuBFC_s}%vrhao; zU~fwstmr>YKd&Upo=rZL4!AruGwm)zhSI+YMI9v$=Hphi1`+|=YpN)LsAps9cLCg_ zVUMh+8-K>!b;|Yj?FQzkgOz_U+@XVrMgtg2zwx|<-?I({BZI+BgSPlM)?1FprsI7j ztCN4eQpN0f!d?iHG9T~I9B9X^F})AOry7)4cAb%}$;a3q_3Ot`s@!DSgq{QbHuZj= zFwg6zx)bRwR*OW%<$0^kB@IpmznkXMwp!#5oDmT+c{n%26^SPoMjK#sU-PCYmbBjI z#)7l%7O76Am;SD|fz7$`@#L5C)%Th#l13CcN>%%04W!lNO&Ytibl*F*noqe8E;Bb; z2UXxaU_#FZYZQ?6(#*a##Q2cx9Ot?gA*^Ukcxs{aqT@ye9ZO+A_;MDSamR_`7MG~qQr-uNI zuCXjak)04VK43KBY}oX5*gr@SLvO6@F4=$T$HFySRlY?aTr3z8Q`C5FUyj`wa=-C~ zx;zoAfb8uG?yvf$xi>o%MD0h^XR+P7}(a=NdGqvyenrSTQwPsPBRsx!5Nmeo_52@;L zZsK5c8uT`B;#HQ`H88toAnMRbHnXTYLa6JQog%>l2P~YbPcu)pJ2jPtC@Pu+>i0)d zB}F57k)+Jump4+^qG~!ZjAT#RBxseKTYbY$X(|+;y0vnYPeY`vv4V9HGk8}X{L?vW z1EP|J)e-XK+Gj01Z{x|-{{~K`r-#N?0D;vANq~OnVm^GJwtNmTo LHn>uF84>nh!?6)^ literal 0 HcmV?d00001 diff --git a/Images/homework71.png b/Images/homework71.png new file mode 100644 index 0000000000000000000000000000000000000000..2985a1f45929d7990625e04163aaa4da6e8c053e GIT binary patch literal 33340 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 literal 0 HcmV?d00001 diff --git a/Images/homework71_3.png b/Images/homework71_3.png new file mode 100644 index 0000000000000000000000000000000000000000..72eec317a26d7bafdaac5db7bdf2a7cb928ec7d8 GIT binary patch literal 35238 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 Date: Sun, 24 Feb 2019 00:57:25 +0800 Subject: [PATCH 2/2] Add files via upload --- ...346\240\274\345\274\217\345\214\226.ipynb" | 3050 +++++++++++++++++ 1 file changed, 3050 insertions(+) create mode 100644 "\347\254\2547\351\203\250\345\210\206 \346\226\207\344\273\266\345\222\214\346\225\260\346\215\256\346\240\274\345\274\217\345\214\226.ipynb" diff --git "a/\347\254\2547\351\203\250\345\210\206 \346\226\207\344\273\266\345\222\214\346\225\260\346\215\256\346\240\274\345\274\217\345\214\226.ipynb" "b/\347\254\2547\351\203\250\345\210\206 \346\226\207\344\273\266\345\222\214\346\225\260\346\215\256\346\240\274\345\274\217\345\214\226.ipynb" new file mode 100644 index 0000000..7dfdec3 --- /dev/null +++ "b/\347\254\2547\351\203\250\345\210\206 \346\226\207\344\273\266\345\222\214\346\225\260\346\215\256\346\240\274\345\274\217\345\214\226.ipynb" @@ -0,0 +1,3050 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "

Python程序设计与应用
" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#
第七部分 文件和数据格式化
" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 知识点\n", + "* 文件、目录、路径的基本概念。\n", + "* 从文件中读取数据的办法、语句(或函数、方法)。\n", + "* 讲解向文件中写入数据的办法、语句(或函数、方法)。\n", + "* 处理CSV 文件和JSON 数据" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 预习\n", + "* 第7章:文件和数据格式化" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "当程序运行时,变量是保存数据的好方法,但如果希望程序结束后数据仍然保持,就需要将数据保存到文件中。另外,在人事管理系统中,你不会希望每次都手动从文件中复制粘贴人事信息到你的代码里。\n", + "\n", + "你可以认为文件的内容是一个字符串值,大小可能有几个GB。\n", + "\n", + "在本部分中,你将学习如何使用Python 在硬盘上创建、读取和保存文件。" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# 1. 文件与文件路径\n", + "文件是一个存储在辅助存储器上的数据序列,可以包含任何数据内容。概念上,文件是数据的集合和抽象,类似地,函数是程序的集合和抽象。用文件形式组织和表达数据更有效也更为灵活。\n", + "\n", + "文件有两个关键属性:“文件名”(通常写成一个单词)和“路径”。路径指明了文件在计算机上的位置。例如,我的电脑本上有一个文件名为projects.docx,\n", + "它的路径在C:\\Users\\asweigart\\Documents。文件名中,最后一个句点之后的部分称为文件的“扩展名”,它指出了文件的类型。project.docx 是一个Word 文档,Users、asweigart和Documents 都是指“文件夹”(也成为目录)。文件夹可以包含文件和其他文件夹。\n", + "" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 1.1 Windows 上的倒斜杠以及OS X 和Linux 上的正斜杠\n", + "在Windows 上,路径书写使用倒斜杠作为文件夹之间的分隔符。但在OS X 和Linux 上,使用正斜杠作为它们的路径分隔符。如果想要程序运行在所有操作系统\n", + "上,在编写Python 脚本时,就必须处理这两种情况。\n", + "\n", + "好在,用os.path.join()函数来做这件事很简单。如果将单个文件和路径上的文件夹名称的字符串传递给它,**os.path.join()**就会返回一个文件路径的字符串,包含正确的路径分隔符。" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "'users\\\\swufe\\\\Documents\\\\python.docx'" + ] + }, + "execution_count": 6, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "import os\n", + "os.path.join('users','swufe','Documents','python.docx')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "如果需要创建文件名称的字符串,os.path.join()函数就很有用。这些字符串将传递给几个文件相关的函数,本部分将进行介绍。例如,下面的例子将一个文件名列表中的名称,添加到文件夹名称的末尾:" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "d:\\Pictures\\2019-01-10-1.jpg\n", + "d:\\Pictures\\myPhoto1.png\n", + "d:\\Pictures\\mountain.jpg\n" + ] + } + ], + "source": [ + "myFiles = ['2019-01-10-1.jpg', 'myPhoto1.png', 'mountain.jpg']\n", + "for fileName in myFiles:\n", + " print(os.path.join('d:\\\\Pictures', fileName))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 1.2 当前工作目录\n", + "每个运行在计算机上的程序,都有一个“当前工作目录”,或cwd。所有没有从根文件夹开始的文件名或路径,都假定在当前工作目录下。利用**os.getcwd()**函数,可以取得当前工作路径的字符串,并可以利用**os.chdir()**改变它。" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "'D:\\\\SynologyDrive\\\\学校文档\\\\教学文档\\\\程序设计与应用Python\\\\课件'" + ] + }, + "execution_count": 8, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "import os\n", + "os.getcwd()" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "os.chdir(\"c:\\\\windows\\\\system32\")" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "'c:\\\\windows\\\\system32'" + ] + }, + "execution_count": 10, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "os.getcwd()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 1.3 绝对路径与相对路径\n", + "有两种方法指定一个文件路径。\n", + "* “绝对路径”,总是从根文件夹开始。\n", + "* “相对路径”,它相对于程序的当前工作目录。\n", + "\n", + "还有点(.)和点点(..)文件夹。它们不是真正的文件夹,而是可以在路径中使用的特殊名称。单个的句点(“点”)用作文件夹目名称时,是“这个目录”的缩写。两个句点(“点点”)意思是父文件夹。\n", + "\n", + "os.path 模块提供了一些函数,返回一个相对路径的绝对路径,以及检查给定的\n", + "路径是否为绝对路径。\n", + "* 调用**os.path.abspath(path)**将返回参数的绝对路径的字符串。这是将相对路径转换为绝对路径的简便方法。\n", + "* 调用**os.path.isabs(path)**,如果参数是一个绝对路径,就返回True,如果参数是一个相对路径,就返回False。\n", + "* 调用**os.path.relpath(path, start)**将返回从start 路径到path 的相对路径的字符串。如果没有提供start,就使用当前工作目录作为开始路径。" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": { + "scrolled": true + }, + "outputs": [ + { + "data": { + "text/plain": [ + "'c:\\\\windows\\\\system32'" + ] + }, + "execution_count": 12, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "os.path.abspath('.')" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "'c:\\\\windows\\\\system32\\\\Scripts'" + ] + }, + "execution_count": 13, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "os.path.abspath('.\\\\Scripts')" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": { + "scrolled": true + }, + "outputs": [ + { + "data": { + "text/plain": [ + "False" + ] + }, + "execution_count": 14, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "os.path.isabs('.')" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "'Windows'" + ] + }, + "execution_count": 15, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "os.path.relpath('C:\\\\Windows', 'C:\\\\')" + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "metadata": { + "scrolled": true + }, + "outputs": [ + { + "data": { + "text/plain": [ + "'..\\\\..\\\\Windows'" + ] + }, + "execution_count": 16, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "os.path.relpath('C:\\\\Windows', 'C:\\\\Pictures\\\\2018')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "调用os.path.dirname(path)将返回一个字符串,它包含path 参数中最后一个斜杠之前的所有内容。调用**os.path.basename(path)**将返回一个字符串,它包含path 参数中最后一个斜杠之后的所有内容。" + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "path = 'C:\\\\Windows\\\\System32\\\\calc.exe'" + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "'calc.exe'" + ] + }, + "execution_count": 18, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "os.path.basename(path)" + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "'C:\\\\Windows\\\\System32'" + ] + }, + "execution_count": 19, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "os.path.dirname(path)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "如果同时需要一个路径的目录名称和基本名称,就可以调用**os.path.split()**,获得这两个字符串的元组,像这样:" + ] + }, + { + "cell_type": "code", + "execution_count": 20, + "metadata": { + "scrolled": true + }, + "outputs": [ + { + "data": { + "text/plain": [ + "('C:\\\\Windows\\\\System32', 'calc.exe')" + ] + }, + "execution_count": 20, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "calcFilePath = 'C:\\\\Windows\\\\System32\\\\calc.exe'\n", + "os.path.split(calcFilePath)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "同时也请注意,os.path.split()不会接受一个文件路径并返回每个文件夹的字符串的列表。如果需要这样,请使用split()字符串方法,并根据os.path.sep 中的字符串进行分割。回忆一下,根据程序运行的计算机,**os.path.sep**变量设置为正确的文件夹分割斜杠。" + ] + }, + { + "cell_type": "code", + "execution_count": 21, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "['C:', 'Windows', 'System32', 'calc.exe']" + ] + }, + "execution_count": 21, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "calcFilePath.split(os.path.sep)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 1.4 用os.makedirs()创建新文件夹\n", + "程序可以用os.makedirs()函数创建新文件夹(目录)。" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "import os\n", + "os.makedirs(\"c:\\\\myFolder\")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 1.5 查看文件大小和文件夹内容" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "一旦有办法处理文件路径,就可以开始搜集特定文件和文件夹的信息。os.path 模块提供了一些函数,用于查看文件的字节数以及给定文件夹中的文件和子文件夹。\n", + "* 调用**os.path.getsize(path)**将返回path 参数中文件的字节数。\n", + "* 调用os.listdir(path)将返回文件名字符串的列表,包含path 参数中的每个文件(请注意,这个函数在os 模块中,而不是os.path)。" + ] + }, + { + "cell_type": "code", + "execution_count": 22, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "27648" + ] + }, + "execution_count": 22, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "os.path.getsize('C:\\\\Windows\\\\System32\\\\calc.exe')" + ] + }, + { + "cell_type": "code", + "execution_count": 23, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "['0409',\n", + " '1029',\n", + " '1033',\n", + " '1036',\n", + " '1040',\n", + " '1045',\n", + " '1046',\n", + " '1049',\n", + " '1055',\n", + " '3082',\n", + " '8f629a03-482f-49f2-a27e-279f8764e5cf_HyperV-Compute-Host.dll',\n", + " '@AudioToastIcon.png',\n", + " '@BackgroundAccessToastIcon.png',\n", + " '@bitlockertoastimage.png',\n", + " '@edptoastimage.png',\n", + " '@EnrollmentToastIcon.png',\n", + " '@language_notification_icon.png',\n", + " '@optionalfeatures.png',\n", + " '@VpnToastIcon.png',\n", + " '@WiFiNotificationIcon.png',\n", + " '@windows-hello-V4.1.gif',\n", + " '@WindowsHelloFaceToastIcon.png',\n", + " '@WindowsUpdateToastIcon.contrast-black.png',\n", + " '@WindowsUpdateToastIcon.contrast-white.png',\n", + " '@WindowsUpdateToastIcon.png',\n", + " '@WirelessDisplayToast.png',\n", + " '@WwanNotificationIcon.png',\n", + " '@WwanSimLockIcon.png',\n", + " 'aadauthhelper.dll',\n", + " 'aadcloudap.dll',\n", + " 'aadjcsp.dll',\n", + " 'aadtb.dll',\n", + " 'aadWamExtension.dll',\n", + " 'abcCertFirm.dll',\n", + " 'AbcEbankSign.dll',\n", + " 'ABCEBankSignCtrl.ocx',\n", + " 'abchFTCX22.dll',\n", + " 'abchFTCX23.dll',\n", + " 'abcsFTCX22.dll',\n", + " 'abcsFTCX23.dll',\n", + " 'AboutSettingsHandlers.dll',\n", + " 'AboveLockAppHost.dll',\n", + " 'accessibilitycpl.dll',\n", + " 'accountaccessor.dll',\n", + " 'AccountsRt.dll',\n", + " 'AcGenral.dll',\n", + " 'AcLayers.dll',\n", + " 'acledit.dll',\n", + " 'aclui.dll',\n", + " 'acmigration.dll',\n", + " 'ACPBackgroundManagerPolicy.dll',\n", + " 'acppage.dll',\n", + " 'acproxy.dll',\n", + " 'AcSpecfc.dll',\n", + " 'ActionCenter.dll',\n", + " 'ActionCenterCPL.dll',\n", + " 'ActionQueue.dll',\n", + " 'ActivationClient.dll',\n", + " 'ActivationManager.dll',\n", + " 'ActivationVdev.dll',\n", + " 'activeds.dll',\n", + " 'activeds.tlb',\n", + " 'ActiveSyncCsp.dll',\n", + " 'ActiveSyncProvider.dll',\n", + " 'actxprxy.dll',\n", + " 'AcWinRT.dll',\n", + " 'AcXtrnal.dll',\n", + " 'AdaptiveCards.dll',\n", + " 'AddressParser.dll',\n", + " 'adhapi.dll',\n", + " 'adhsvc.dll',\n", + " 'AdmTmpl.dll',\n", + " 'adprovider.dll',\n", + " 'adrclient.dll',\n", + " 'adsldp.dll',\n", + " 'adsldpc.dll',\n", + " 'adsmsext.dll',\n", + " 'adsnt.dll',\n", + " 'adtschema.dll',\n", + " 'AdvancedEmojiDS.dll',\n", + " 'AdvancedInstallers',\n", + " 'advapi32.dll',\n", + " 'advapi32res.dll',\n", + " 'advpack.dll',\n", + " 'aeevts.dll',\n", + " 'aeinv.dll',\n", + " 'aepic.dll',\n", + " 'af-ZA',\n", + " 'AgentService.exe',\n", + " 'aitstatic.exe',\n", + " 'AJRouter.dll',\n", + " 'alg.exe',\n", + " 'altspace.dll',\n", + " 'am-et',\n", + " 'amcompat.tlb',\n", + " 'amsi.dll',\n", + " 'amsiproxy.dll',\n", + " 'amstream.dll',\n", + " 'Analog.Shell.Broker.dll',\n", + " 'AnalogCommonProxyStub.dll',\n", + " 'apds.dll',\n", + " 'APHostClient.dll',\n", + " 'APHostRes.dll',\n", + " 'APHostService.dll',\n", + " 'ApiSetHost.AppExecutionAlias.dll',\n", + " 'apisetschema.dll',\n", + " 'AppContracts.dll',\n", + " 'AppExtension.dll',\n", + " 'apphelp.dll',\n", + " 'Apphlpdm.dll',\n", + " 'AppHostRegistrationVerifier.exe',\n", + " 'appidapi.dll',\n", + " 'appidcertstorecheck.exe',\n", + " 'appidpolicyconverter.exe',\n", + " 'AppIdPolicyEngineApi.dll',\n", + " 'appidsvc.dll',\n", + " 'appidtel.exe',\n", + " 'appinfo.dll',\n", + " 'appinfoext.dll',\n", + " 'ApplicationFrame.dll',\n", + " 'ApplicationFrameHost.exe',\n", + " 'AppLocker',\n", + " 'AppLockerCSP.dll',\n", + " 'ApplySettingsTemplateCatalog.exe',\n", + " 'ApplyTrustOffline.exe',\n", + " 'AppManagementConfiguration.dll',\n", + " 'appmgmts.dll',\n", + " 'appmgr.dll',\n", + " 'AppMon.dll',\n", + " 'AppointmentActivation.dll',\n", + " 'AppointmentApis.dll',\n", + " 'appraiser',\n", + " 'appraiser.dll',\n", + " 'AppReadiness.dll',\n", + " 'apprepapi.dll',\n", + " 'AppResolver.dll',\n", + " 'ApproveChildRequest.exe',\n", + " 'appsruprov.dll',\n", + " 'AppV',\n", + " 'AppVCatalog.dll',\n", + " 'AppVClient.exe',\n", + " 'AppvClientEventLog.dll',\n", + " 'AppVClientPS.dll',\n", + " 'AppVDllSurrogate.exe',\n", + " 'AppVEntStreamingManager.dll',\n", + " 'AppVEntSubsystemController.dll',\n", + " 'AppVEntSubsystems64.dll',\n", + " 'AppVEntVirtualization.dll',\n", + " 'appverif.chm',\n", + " 'appverif.exe',\n", + " 'appverifUI.dll',\n", + " 'appvetwclientres.dll',\n", + " 'appvetwsharedperformance.dll',\n", + " 'appvetwstreamingux.dll',\n", + " 'AppVFileSystemMetadata.dll',\n", + " 'AppVIntegration.dll',\n", + " 'AppVManifest.dll',\n", + " 'AppVNice.exe',\n", + " 'AppVOrchestration.dll',\n", + " 'AppVPolicy.dll',\n", + " 'AppVPublishing.dll',\n", + " 'AppVReporting.dll',\n", + " 'AppVScripting.dll',\n", + " 'AppVSentinel.dll',\n", + " 'AppVShNotify.exe',\n", + " 'AppVStreamingUX.dll',\n", + " 'AppVStreamMap.dll',\n", + " 'AppVTerminator.dll',\n", + " 'appwiz.cpl',\n", + " 'AppxAllUserStore.dll',\n", + " 'AppXApplicabilityBlob.dll',\n", + " 'AppxApplicabilityEngine.dll',\n", + " 'AppXDeploymentClient.dll',\n", + " 'AppXDeploymentExtensions.desktop.dll',\n", + " 'AppXDeploymentExtensions.onecore.dll',\n", + " 'AppXDeploymentServer.dll',\n", + " 'AppxPackaging.dll',\n", + " 'AppxProvisioning.xml',\n", + " 'AppxSip.dll',\n", + " 'AppxStreamingDataSourcePS.dll',\n", + " 'AppxSysprep.dll',\n", + " 'ar-SA',\n", + " 'archiveint.dll',\n", + " 'ARP.EXE',\n", + " 'as-IN',\n", + " 'asferror.dll',\n", + " 'aspnet_counters.dll',\n", + " 'AssignedAccessCsp.dll',\n", + " 'AssignedAccessManager.dll',\n", + " 'assignedaccessmanagersvc.dll',\n", + " 'AssignedAccessShellProxy.dll',\n", + " 'asycfilt.dll',\n", + " 'at.exe',\n", + " 'AtBroker.exe',\n", + " 'atl.dll',\n", + " 'atl100.dll',\n", + " 'atl110.dll',\n", + " 'atlthunk.dll',\n", + " 'atmfd.dll',\n", + " 'atmlib.dll',\n", + " 'AttestationWmiProvider.dll',\n", + " 'attrib.exe',\n", + " 'audiodg.exe',\n", + " 'AudioEndpointBuilder.dll',\n", + " 'AudioEng.dll',\n", + " 'AudioHandlers.dll',\n", + " 'AUDIOKSE.dll',\n", + " 'audioresourceregistrar.dll',\n", + " 'AudioSes.dll',\n", + " 'audiosrv.dll',\n", + " 'AudioSrvPolicyManager.dll',\n", + " 'auditcse.dll',\n", + " 'AuditNativeSnapIn.dll',\n", + " 'auditpol.exe',\n", + " 'auditpolcore.dll',\n", + " 'AuditPolicyGPInterop.dll',\n", + " 'auditpolmsg.dll',\n", + " 'AuthBroker.dll',\n", + " 'AuthBrokerUI.dll',\n", + " 'AuthExt.dll',\n", + " 'authfwcfg.dll',\n", + " 'AuthFWGP.dll',\n", + " 'AuthFWSnapin.dll',\n", + " 'AuthFWWizFwk.dll',\n", + " 'AuthHost.exe',\n", + " 'AuthHostProxy.dll',\n", + " 'authui.dll',\n", + " 'authz.dll',\n", + " 'autochk.exe',\n", + " 'autoconv.exe',\n", + " 'autofmt.exe',\n", + " 'autopilot.dll',\n", + " 'autoplay.dll',\n", + " 'AverageRoom.bin',\n", + " 'avicap32.dll',\n", + " 'avifil32.dll',\n", + " 'avrt.dll',\n", + " 'AxInstSv.dll',\n", + " 'AxInstUI.exe',\n", + " 'az-Latn-AZ',\n", + " 'azman.msc',\n", + " 'azroles.dll',\n", + " 'azroleui.dll',\n", + " 'AzSqlExt.dll',\n", + " 'AzureSettingSyncProvider.dll',\n", + " 'baaupdate.exe',\n", + " 'BackgroundMediaPolicy.dll',\n", + " 'backgroundTaskHost.exe',\n", + " 'BackgroundTransferHost.exe',\n", + " 'BamSettingsClient.dll',\n", + " 'BarcodeProvisioningPlugin.dll',\n", + " 'basecsp.dll',\n", + " 'basesrv.dll',\n", + " 'batmeter.dll',\n", + " 'bcastdvr.proxy.dll',\n", + " 'BcastDVRBroker.dll',\n", + " 'BcastDVRClient.dll',\n", + " 'BcastDVRCommon.dll',\n", + " 'bcastdvruserservice.dll',\n", + " 'bcd.dll',\n", + " 'bcdboot.exe',\n", + " 'bcdedit.exe',\n", + " 'bcdprov.dll',\n", + " 'bcdsrv.dll',\n", + " 'BCP47Langs.dll',\n", + " 'BCP47mrm.dll',\n", + " 'bcrypt.dll',\n", + " 'bcryptprimitives.dll',\n", + " 'bdaplgin.ax',\n", + " 'bdechangepin.exe',\n", + " 'BdeHdCfg.exe',\n", + " 'BdeHdCfgLib.dll',\n", + " 'bderepair.dll',\n", + " 'bdesvc.dll',\n", + " 'BdeSysprep.dll',\n", + " 'bdeui.dll',\n", + " 'BdeUISrv.exe',\n", + " 'bdeunlock.exe',\n", + " 'be-BY',\n", + " 'BestPractices',\n", + " 'BFE.DLL',\n", + " 'bg-BG',\n", + " 'bi.dll',\n", + " 'bidispl.dll',\n", + " 'BingASDS.dll',\n", + " 'BingFilterDS.dll',\n", + " 'BingMaps.dll',\n", + " 'BingOnlineServices.dll',\n", + " 'BioCredProv.dll',\n", + " 'BioIso.exe',\n", + " 'bisrv.dll',\n", + " 'BitLockerCsp.dll',\n", + " 'BitLockerDeviceEncryption.exe',\n", + " 'BitLockerWizard.exe',\n", + " 'BitLockerWizardElev.exe',\n", + " 'bitsadmin.exe',\n", + " 'bitsigd.dll',\n", + " 'bitsperf.dll',\n", + " 'BitsProxy.dll',\n", + " 'biwinrt.dll',\n", + " 'BlbEvents.dll',\n", + " 'blbres.dll',\n", + " 'blb_ps.dll',\n", + " 'BluetoothApis.dll',\n", + " 'BluetoothDesktopHandlers.dll',\n", + " 'BluetoothPairingSystemToastIcon.contrast-black.png',\n", + " 'BluetoothPairingSystemToastIcon.contrast-high.png',\n", + " 'BluetoothPairingSystemToastIcon.contrast-white.png',\n", + " 'BluetoothPairingSystemToastIcon.png',\n", + " 'BluetoothSystemToastIcon.contrast-white.png',\n", + " 'BluetoothSystemToastIcon.png',\n", + " 'bn-BD',\n", + " 'bn-IN',\n", + " 'bnmanager.dll',\n", + " 'Boot',\n", + " 'boot.sdi',\n", + " 'bootcfg.exe',\n", + " 'bootim.exe',\n", + " 'BootMenuUX.dll',\n", + " 'bootsect.exe',\n", + " 'bootstr.dll',\n", + " 'bootux.dll',\n", + " 'BOOTVID.DLL',\n", + " 'bopomofo.uce',\n", + " 'BRADM10A.DAT',\n", + " 'bridgeres.dll',\n", + " 'bridgeunattend.exe',\n", + " 'BrMf4Wia.dll',\n", + " 'BrMfJDec.dll',\n", + " 'BrokerLib.dll',\n", + " 'browcli.dll',\n", + " 'browser.dll',\n", + " 'browserbroker.dll',\n", + " 'browserexport.exe',\n", + " 'BrowserSettingSync.dll',\n", + " 'browser_broker.exe',\n", + " 'browseui.dll',\n", + " 'BrUs3Sti.dll',\n", + " 'bs-Latn-BA',\n", + " 'BTAGService.dll',\n", + " 'BTAudioGatewayClient.dll',\n", + " 'BthAvctpSvc.dll',\n", + " 'BthAvrcp.dll',\n", + " 'BthAvrcpAppSvc.dll',\n", + " 'bthci.dll',\n", + " 'BthMtpContextHandler.dll',\n", + " 'bthpanapi.dll',\n", + " 'BthpanContextHandler.dll',\n", + " 'Bthprops',\n", + " 'bthprops.cpl',\n", + " 'BthRadioMedia.dll',\n", + " 'bthserv.dll',\n", + " 'BthTelemetry.dll',\n", + " 'bthudtask.exe',\n", + " 'btpanui.dll',\n", + " 'Bubbles.scr',\n", + " 'BWContextHandler.dll',\n", + " 'ByteCodeGenerator.exe',\n", + " 'ca-ES',\n", + " 'ca-ES-valencia',\n", + " 'cabapi.dll',\n", + " 'cabinet.dll',\n", + " 'cabview.dll',\n", + " 'cacls.exe',\n", + " 'calc.exe',\n", + " 'CallButtons.dll',\n", + " 'CallButtons.ProxyStub.dll',\n", + " 'CallHistoryClient.dll',\n", + " 'CameraCaptureUI.dll',\n", + " 'CameraSettingsUIHost.exe',\n", + " 'canonurl.dll',\n", + " 'CapabilityAccessHandlers.dll',\n", + " 'CapabilityAccessManager.dll',\n", + " 'CapabilityAccessManagerClient.dll',\n", + " 'capauthz.dll',\n", + " 'capiprovider.dll',\n", + " 'capisp.dll',\n", + " 'CaptureService.dll',\n", + " 'CastingShellExt.dll',\n", + " 'CastLaunch.dll',\n", + " 'CastSrv.exe',\n", + " 'CatRoot',\n", + " 'catroot2',\n", + " 'catsrv.dll',\n", + " 'catsrvps.dll',\n", + " 'catsrvut.dll',\n", + " 'cca.dll',\n", + " 'CCG.exe',\n", + " 'CCGLaunchPad.dll',\n", + " 'cdd.dll',\n", + " 'cdosys.dll',\n", + " 'cdp.dll',\n", + " 'cdprt.dll',\n", + " 'cdpsvc.dll',\n", + " 'cdpusersvc.dll',\n", + " 'CellularAPI.dll',\n", + " 'cellulardatacapabilityhandler.dll',\n", + " 'cemapi.dll',\n", + " 'cero.rs',\n", + " 'certca.dll',\n", + " 'certcli.dll',\n", + " 'certCredProvider.dll',\n", + " 'certenc.dll',\n", + " 'CertEnroll.dll',\n", + " 'CertEnrollCtrl.exe',\n", + " 'CertEnrollUI.dll',\n", + " 'certlm.msc',\n", + " 'certmgr.dll',\n", + " 'certmgr.msc',\n", + " 'CertPKICmdlet.dll',\n", + " 'CertPolEng.dll',\n", + " 'certprop.dll',\n", + " 'certreq.exe',\n", + " 'certutil.exe',\n", + " 'cewmdm.dll',\n", + " 'cfgbkend.dll',\n", + " 'cfgmgr32.dll',\n", + " 'CfgSPCellular.dll',\n", + " 'CfgSPPolicy.dll',\n", + " 'cflapi.dll',\n", + " 'cfmifs.dll',\n", + " 'cfmifsproxy.dll',\n", + " 'Chakra.dll',\n", + " 'Chakradiag.dll',\n", + " 'Chakrathunk.dll',\n", + " 'change.exe',\n", + " 'changepk.exe',\n", + " 'charmap.exe',\n", + " 'chartv.dll',\n", + " 'ChatApis.dll',\n", + " 'chcp.com',\n", + " 'CheckNetIsolation.exe',\n", + " 'chglogon.exe',\n", + " 'chgport.exe',\n", + " 'chgusr.exe',\n", + " 'chkdsk.exe',\n", + " 'chkntfs.exe',\n", + " 'chkwudrv.dll',\n", + " 'choice.exe',\n", + " 'chr-CHER-US',\n", + " 'ChsStrokeDS.dll',\n", + " 'chs_singlechar_pinyin.dat',\n", + " 'ChtBopomofoDS.dll',\n", + " 'ChtCangjieDS.dll',\n", + " 'ChtHkStrokeDS.dll',\n", + " 'ChtQuickDS.dll',\n", + " 'ChxAPDS.dll',\n", + " 'ChxDecoder.dll',\n", + " 'ChxHAPDS.dll',\n", + " 'chxinputrouter.dll',\n", + " 'chxranker.dll',\n", + " 'CHxReadingStringIME.dll',\n", + " 'ci.dll',\n", + " 'cic.dll',\n", + " 'CIDiag.exe',\n", + " 'cipher.exe',\n", + " 'CIRCoInst.dll',\n", + " 'CIWmi.dll',\n", + " 'clb.dll',\n", + " 'clbcatq.dll',\n", + " 'cldapi.dll',\n", + " 'cleanmgr.exe',\n", + " 'CleanPCCSP.dll',\n", + " 'clfsw32.dll',\n", + " 'cliconfg.dll',\n", + " 'cliconfg.exe',\n", + " 'cliconfg.rll',\n", + " 'clip.exe',\n", + " 'ClipboardServer.dll',\n", + " 'Clipc.dll',\n", + " 'ClipRenew.exe',\n", + " 'ClipSVC.dll',\n", + " 'ClipUp.exe',\n", + " 'cloudAP.dll',\n", + " 'CloudBackupSettings.dll',\n", + " 'CloudDomainJoinAUG.dll',\n", + " 'CloudDomainJoinDataModelServer.dll',\n", + " 'CloudExperienceHost.dll',\n", + " 'CloudExperienceHostBroker.dll',\n", + " 'CloudExperienceHostBroker.exe',\n", + " 'CloudExperienceHostCommon.dll',\n", + " 'CloudExperienceHostUser.dll',\n", + " 'CloudNotifications.exe',\n", + " 'CloudStorageWizard.exe',\n", + " 'clrhost.dll',\n", + " 'clusapi.dll',\n", + " 'cmcfg32.dll',\n", + " 'cmd.exe',\n", + " 'cmdext.dll',\n", + " 'cmdial32.dll',\n", + " 'cmdkey.exe',\n", + " 'cmdl32.exe',\n", + " 'cmgrcspps.dll',\n", + " 'cmifw.dll',\n", + " 'cmintegrator.dll',\n", + " 'cmlua.dll',\n", + " 'cmmon32.exe',\n", + " 'cmpbk32.dll',\n", + " 'cmstp.exe',\n", + " 'cmstplua.dll',\n", + " 'cmutil.dll',\n", + " 'cngcredui.dll',\n", + " 'cngprovider.dll',\n", + " 'cnvfat.dll',\n", + " 'cob-au.rs',\n", + " 'CodeIntegrity',\n", + " 'cofire.exe',\n", + " 'cofiredm.dll',\n", + " 'colbact.dll',\n", + " 'coloradapterclient.dll',\n", + " 'COLORCNV.DLL',\n", + " 'colorcpl.exe',\n", + " 'colorui.dll',\n", + " 'com',\n", + " 'combase.dll',\n", + " 'comcat.dll',\n", + " 'comctl32.dll',\n", + " 'comdlg32.dll',\n", + " 'comexp.msc',\n", + " 'coml2.dll',\n", + " 'comp.exe',\n", + " 'compact.exe',\n", + " 'CompatTelRunner.exe',\n", + " 'compmgmt.msc',\n", + " 'CompMgmtLauncher.exe',\n", + " 'ComposableShellProxyStub.dll',\n", + " 'ComposerFramework.dll',\n", + " 'CompPkgSup.dll',\n", + " 'compstui.dll',\n", + " 'ComputerDefaults.exe',\n", + " 'ComputerToastIcon.contrast-white.png',\n", + " 'ComputerToastIcon.png',\n", + " 'comrepl.dll',\n", + " 'comres.dll',\n", + " 'comsnap.dll',\n", + " 'comsvcs.dll',\n", + " 'comuid.dll',\n", + " 'concrt140.dll',\n", + " 'concrt140d.dll',\n", + " 'config',\n", + " 'configmanager2.dll',\n", + " 'Configuration',\n", + " 'ConfigureExpandedStorage.dll',\n", + " 'conhost.exe',\n", + " 'ConhostV1.dll',\n", + " 'connect.dll',\n", + " 'ConnectedAccountState.dll',\n", + " 'consent.exe',\n", + " 'ConsentUX.dll',\n", + " 'console.dll',\n", + " 'ConsoleLogon.dll',\n", + " 'ConstraintIndex.Search.dll',\n", + " 'ContactActivation.dll',\n", + " 'ContactApis.dll',\n", + " 'ContactHarvesterDS.dll',\n", + " 'container.dll',\n", + " 'containers',\n", + " 'ContentDeliveryManager.Utilities.dll',\n", + " 'control.exe',\n", + " 'convert.exe',\n", + " 'convertvhd.exe',\n", + " 'coreaudiopolicymanagerext.dll',\n", + " 'coredpus.dll',\n", + " 'coredpussvr.exe',\n", + " 'CoreMessaging.dll',\n", + " 'CoreMmRes.dll',\n", + " 'CoreShell.dll',\n", + " 'CoreShellAPI.dll',\n", + " 'CoreShellExtFramework.dll',\n", + " 'CoreUIComponents.dll',\n", + " 'correngine.dll',\n", + " 'Cortana.Persona.dll',\n", + " 'CortanaMapiHelper.dll',\n", + " 'CortanaMapiHelper.ProxyStub.dll',\n", + " 'CourtesyEngine.dll',\n", + " 'CPFilters.dll',\n", + " 'CredDialogBroker.dll',\n", + " 'CredentialMigrationHandler.dll',\n", + " 'CredentialUIBroker.exe',\n", + " 'CredProv2faHelper.dll',\n", + " 'CredProvDataModel.dll',\n", + " 'CredProvHelper.dll',\n", + " 'credprovhost.dll',\n", + " 'credprovs.dll',\n", + " 'credprovslegacy.dll',\n", + " 'credssp.dll',\n", + " 'credui.dll',\n", + " 'credwiz.exe',\n", + " 'crypt32.dll',\n", + " 'cryptbase.dll',\n", + " 'cryptcatsvc.dll',\n", + " 'cryptdlg.dll',\n", + " 'cryptdll.dll',\n", + " 'cryptext.dll',\n", + " 'cryptnet.dll',\n", + " 'cryptngc.dll',\n", + " 'CryptoWinRT.dll',\n", + " 'cryptsp.dll',\n", + " 'cryptsvc.dll',\n", + " 'crypttpmeksvc.dll',\n", + " 'cryptui.dll',\n", + " 'cryptuiwizard.dll',\n", + " 'cryptxml.dll',\n", + " 'cs-CZ',\n", + " 'cscapi.dll',\n", + " 'cscdll.dll',\n", + " 'CscMig.dll',\n", + " 'cscobj.dll',\n", + " 'cscript.exe',\n", + " 'cscsvc.dll',\n", + " 'cscui.dll',\n", + " 'CspCellularSettings.dll',\n", + " 'csplte.dll',\n", + " 'CspProxy.dll',\n", + " 'csrr.rs',\n", + " 'csrsrv.dll',\n", + " 'csrss.exe',\n", + " 'CSystemEventsBrokerClient.dll',\n", + " 'ctfmon.exe',\n", + " 'cttune.exe',\n", + " 'cttunesvr.exe',\n", + " 'curl.exe',\n", + " 'cuzzapi.dll',\n", + " 'CXHProvisioningServer.dll',\n", + " 'cy-GB',\n", + " 'C_037.NLS',\n", + " 'C_10000.NLS',\n", + " 'C_10001.NLS',\n", + " 'C_10002.NLS',\n", + " 'C_10003.NLS',\n", + " 'C_10004.NLS',\n", + " 'C_10005.NLS',\n", + " 'C_10006.NLS',\n", + " 'C_10007.NLS',\n", + " 'C_10008.NLS',\n", + " 'C_10010.NLS',\n", + " 'C_10017.NLS',\n", + " 'C_10021.NLS',\n", + " 'C_10029.NLS',\n", + " 'C_10079.NLS',\n", + " 'C_10081.NLS',\n", + " 'C_10082.NLS',\n", + " 'C_1026.NLS',\n", + " 'C_1047.NLS',\n", + " 'C_1140.NLS',\n", + " 'C_1141.NLS',\n", + " 'C_1142.NLS',\n", + " 'C_1143.NLS',\n", + " 'C_1144.NLS',\n", + " 'C_1145.NLS',\n", + " 'C_1146.NLS',\n", + " 'C_1147.NLS',\n", + " 'C_1148.NLS',\n", + " 'C_1149.NLS',\n", + " 'C_1250.NLS',\n", + " 'C_1251.NLS',\n", + " 'C_1252.NLS',\n", + " 'C_1253.NLS',\n", + " 'C_1254.NLS',\n", + " 'C_1255.NLS',\n", + " 'C_1256.NLS',\n", + " 'C_1257.NLS',\n", + " 'C_1258.NLS',\n", + " 'C_1361.NLS',\n", + " 'C_20000.NLS',\n", + " 'C_20001.NLS',\n", + " 'C_20002.NLS',\n", + " 'C_20003.NLS',\n", + " 'C_20004.NLS',\n", + " 'C_20005.NLS',\n", + " 'C_20105.NLS',\n", + " 'C_20106.NLS',\n", + " 'C_20107.NLS',\n", + " 'C_20108.NLS',\n", + " 'C_20127.NLS',\n", + " 'C_20261.NLS',\n", + " 'C_20269.NLS',\n", + " 'C_20273.NLS',\n", + " 'C_20277.NLS',\n", + " 'C_20278.NLS',\n", + " 'C_20280.NLS',\n", + " 'C_20284.NLS',\n", + " 'C_20285.NLS',\n", + " 'C_20290.NLS',\n", + " 'C_20297.NLS',\n", + " 'C_20420.NLS',\n", + " 'C_20423.NLS',\n", + " 'C_20424.NLS',\n", + " 'C_20833.NLS',\n", + " 'C_20838.NLS',\n", + " 'C_20866.NLS',\n", + " 'C_20871.NLS',\n", + " 'C_20880.NLS',\n", + " 'C_20905.NLS',\n", + " 'C_20924.NLS',\n", + " 'C_20932.NLS',\n", + " 'C_20936.NLS',\n", + " 'C_20949.NLS',\n", + " 'C_21025.NLS',\n", + " 'C_21027.NLS',\n", + " 'C_21866.NLS',\n", + " 'C_28591.NLS',\n", + " 'C_28592.NLS',\n", + " 'C_28593.NLS',\n", + " 'C_28594.NLS',\n", + " 'C_28595.NLS',\n", + " 'C_28596.NLS',\n", + " 'C_28597.NLS',\n", + " 'C_28598.NLS',\n", + " 'C_28599.NLS',\n", + " 'c_28603.nls',\n", + " 'C_28605.NLS',\n", + " 'C_437.NLS',\n", + " 'C_500.NLS',\n", + " 'C_65001.NLS',\n", + " 'C_708.NLS',\n", + " 'C_720.NLS',\n", + " 'C_737.NLS',\n", + " 'C_775.NLS',\n", + " 'C_850.NLS',\n", + " 'C_852.NLS',\n", + " 'C_855.NLS',\n", + " 'C_857.NLS',\n", + " 'C_858.NLS',\n", + " 'C_860.NLS',\n", + " 'C_861.NLS',\n", + " 'C_862.NLS',\n", + " 'C_863.NLS',\n", + " 'C_864.NLS',\n", + " 'C_865.NLS',\n", + " 'C_866.NLS',\n", + " 'C_869.NLS',\n", + " 'C_870.NLS',\n", + " 'C_874.NLS',\n", + " 'C_875.NLS',\n", + " 'C_932.NLS',\n", + " 'C_936.NLS',\n", + " 'C_949.NLS',\n", + " 'C_950.NLS',\n", + " 'C_G18030.DLL',\n", + " 'c_GSM7.DLL',\n", + " 'C_IS2022.DLL',\n", + " 'C_ISCII.DLL',\n", + " 'd2d1.dll',\n", + " 'D2D1Debug2.dll',\n", + " 'd2d1debug3.dll',\n", + " 'd3d10.dll',\n", + " 'd3d10core.dll',\n", + " 'd3d10level9.dll',\n", + " 'd3d10ref.dll',\n", + " 'd3d10sdklayers.dll',\n", + " 'd3d10warp.dll',\n", + " 'd3d10_1.dll',\n", + " 'd3d10_1core.dll',\n", + " 'd3d11.dll',\n", + " 'd3d11ref.dll',\n", + " 'd3d11sdklayers.dll',\n", + " 'd3d11_1sdklayers.dll',\n", + " 'd3d11_2sdklayers.dll',\n", + " 'd3d11_3SDKLayers.dll',\n", + " 'D3D12.dll',\n", + " 'd3d12SDKLayers.dll',\n", + " 'd3d8thk.dll',\n", + " 'd3d9.dll',\n", + " 'd3d9on12.dll',\n", + " 'D3DCompiler_33.dll',\n", + " 'D3DCompiler_34.dll',\n", + " 'D3DCompiler_35.dll',\n", + " 'D3DCompiler_36.dll',\n", + " 'D3DCompiler_37.dll',\n", + " 'D3DCompiler_38.dll',\n", + " 'D3DCompiler_39.dll',\n", + " 'D3DCompiler_40.dll',\n", + " 'D3DCompiler_41.dll',\n", + " 'D3DCompiler_42.dll',\n", + " 'D3DCompiler_43.dll',\n", + " 'D3DCompiler_47.dll',\n", + " 'd3dcsx_42.dll',\n", + " 'd3dcsx_43.dll',\n", + " 'd3dref9.dll',\n", + " 'D3DSCache.dll',\n", + " 'd3dx10.dll',\n", + " 'd3dx10_33.dll',\n", + " 'd3dx10_34.dll',\n", + " 'd3dx10_35.dll',\n", + " 'd3dx10_36.dll',\n", + " 'd3dx10_37.dll',\n", + " 'd3dx10_38.dll',\n", + " 'd3dx10_39.dll',\n", + " 'd3dx10_40.dll',\n", + " 'd3dx10_41.dll',\n", + " 'd3dx10_42.dll',\n", + " 'd3dx10_43.dll',\n", + " 'd3dx11_42.dll',\n", + " 'd3dx11_43.dll',\n", + " 'd3dx9_24.dll',\n", + " 'd3dx9_25.dll',\n", + " 'd3dx9_26.dll',\n", + " 'd3dx9_27.dll',\n", + " 'd3dx9_28.dll',\n", + " 'd3dx9_29.dll',\n", + " 'd3dx9_30.dll',\n", + " 'd3dx9_31.dll',\n", + " 'd3dx9_32.dll',\n", + " 'd3dx9_33.dll',\n", + " 'd3dx9_34.dll',\n", + " 'd3dx9_35.dll',\n", + " 'd3dx9_36.dll',\n", + " 'D3DX9_37.dll',\n", + " 'D3DX9_38.dll',\n", + " 'D3DX9_39.dll',\n", + " 'D3DX9_40.dll',\n", + " 'D3DX9_41.dll',\n", + " 'D3DX9_42.dll',\n", + " 'D3DX9_43.dll',\n", + " 'da-DK',\n", + " 'dab.dll',\n", + " 'dabapi.dll',\n", + " 'DAConn.dll',\n", + " 'dafAspInfraProvider.dll',\n", + " 'dafBth.dll',\n", + " 'DafDnsSd.dll',\n", + " 'dafDockingProvider.dll',\n", + " 'DafGip.dll',\n", + " 'DAFIoT.dll',\n", + " 'DAFIPP.dll',\n", + " 'dafpos.dll',\n", + " 'DafPrintProvider.dll',\n", + " 'dafupnp.dll',\n", + " 'dafWCN.dll',\n", + " 'dafWfdProvider.dll',\n", + " 'DAFWiProv.dll',\n", + " 'DAFWSD.dll',\n", + " 'DAMediaManager.dll',\n", + " 'DAMM.dll',\n", + " 'DaOtpCredentialProvider.dll',\n", + " 'das.dll',\n", + " 'dasHost.exe',\n", + " 'dataclen.dll',\n", + " 'DataExchange.dll',\n", + " 'DataExchangeHost.exe',\n", + " 'datamarketsvc.dll',\n", + " 'DataStoreCacheDumpTool.exe',\n", + " 'DataUsageHandlers.dll',\n", + " 'DataUsageLiveTileTask.exe',\n", + " 'datusage.dll',\n", + " 'davclnt.dll',\n", + " 'davhlpr.dll',\n", + " 'DavSyncProvider.dll',\n", + " 'daxexec.dll',\n", + " 'dbgcore.dll',\n", + " 'dbgeng.dll',\n", + " 'dbghelp.dll',\n", + " 'DbgModel.dll',\n", + " 'dbnetlib.dll',\n", + " 'dbnmpntw.dll',\n", + " 'dccw.exe',\n", + " 'dciman32.dll',\n", + " 'dcntel.dll',\n", + " 'dcomcnfg.exe',\n", + " 'dcomp.dll',\n", + " 'DDACLSys.dll',\n", + " 'DdcAntiTheftApi.dll',\n", + " 'DdcComImplementationsDesktop.dll',\n", + " 'DDDS.dll',\n", + " 'DDFs',\n", + " 'ddisplay.dll',\n", + " 'ddodiag.exe',\n", + " 'DDOIProxy.dll',\n", + " 'DDORes.dll',\n", + " 'ddpchunk.dll',\n", + " 'ddptrace.dll',\n", + " 'ddputils.dll',\n", + " 'ddp_ps.dll',\n", + " 'ddraw.dll',\n", + " 'ddrawex.dll',\n", + " 'de-DE',\n", + " 'DefaultAccountTile.png',\n", + " 'DefaultDeviceManager.dll',\n", + " 'DefaultHrtfs.bin',\n", + " 'DefaultPrinterProvider.dll',\n", + " 'DefaultQuestions.json',\n", + " 'Defrag.exe',\n", + " 'defragproxy.dll',\n", + " 'defragres.dll',\n", + " 'defragsvc.dll',\n", + " 'delegatorprovider.dll',\n", + " 'desk.cpl',\n", + " 'deskadp.dll',\n", + " 'deskmon.dll',\n", + " 'desktopimgdownldr.exe',\n", + " 'DesktopKeepOnToastImg.gif',\n", + " 'DesktopShellAppStateContract.dll',\n", + " 'DesktopShellExt.dll',\n", + " 'DesktopSwitcherDataModel.dll',\n", + " 'DesktopView.Internal.Broker.dll',\n", + " 'DesktopView.Internal.Broker.ProxyStub.dll',\n", + " 'DetailedReading-Default.xml',\n", + " 'DevDispItemProvider.dll',\n", + " 'DeveloperOptionsSettingsHandlers.dll',\n", + " 'devenum.dll',\n", + " 'deviceaccess.dll',\n", + " 'deviceassociation.dll',\n", + " 'DeviceCensus.exe',\n", + " 'DeviceCenter.dll',\n", + " 'DeviceCredential.dll',\n", + " 'DeviceCredentialDeployment.exe',\n", + " 'DeviceDirectoryClient.dll',\n", + " 'DeviceDisplayStatusManager.dll',\n", + " 'DeviceDriverRetrievalClient.dll',\n", + " 'DeviceEject.exe',\n", + " 'DeviceElementSource.dll',\n", + " 'DeviceEnroller.exe',\n", + " 'DeviceFlows.DataModel.dll',\n", + " 'DeviceMetadataRetrievalClient.dll',\n", + " 'devicengccredprov.dll',\n", + " 'DevicePairing.dll',\n", + " 'DevicePairingExperienceMEM.dll',\n", + " 'DevicePairingFolder.dll',\n", + " 'DevicePairingProxy.dll',\n", + " 'DevicePairingWizard.exe',\n", + " 'DeviceProperties.exe',\n", + " 'DeviceReactivation.dll',\n", + " 'deviceregistration.dll',\n", + " 'DeviceSetupManager.dll',\n", + " 'DeviceSetupManagerAPI.dll',\n", + " 'DeviceSetupStatusProvider.dll',\n", + " 'DevicesFlowBroker.dll',\n", + " 'DeviceSoftwareInstallationClient.dll',\n", + " 'DeviceUpdateAgent.dll',\n", + " 'DeviceUxRes.dll',\n", + " 'devinv.dll',\n", + " 'devmgmt.msc',\n", + " 'devmgr.dll',\n", + " 'DevModeRunAsUserConfig.msc',\n", + " 'devobj.dll',\n", + " 'DevPropMgr.dll',\n", + " 'DevQueryBroker.dll',\n", + " 'devrtl.dll',\n", + " 'dfdts.dll',\n", + " 'DFDWiz.exe',\n", + " 'dfrgui.exe',\n", + " 'dfscli.dll',\n", + " 'dfshim.dll',\n", + " 'DfsShlEx.dll',\n", + " 'dggpext.dll',\n", + " 'dhcpcmonitor.dll',\n", + " 'dhcpcore.dll',\n", + " 'dhcpcore6.dll',\n", + " 'dhcpcsvc.dll',\n", + " 'dhcpcsvc6.dll',\n", + " 'dhcpsapi.dll',\n", + " 'DHolographicDisplay.dll',\n", + " 'DiagCpl.dll',\n", + " 'DiagnosticInvoker.dll',\n", + " 'DiagnosticLogCSP.dll',\n", + " 'diagperf.dll',\n", + " 'DiagSvc.dll',\n", + " 'DiagSvcs',\n", + " 'diagtrack.dll',\n", + " 'dialclient.dll',\n", + " 'dialer.exe',\n", + " 'dialserver.dll',\n", + " 'DictationManager.dll',\n", + " 'difxapi.dll',\n", + " 'dimsjob.dll',\n", + " 'dimsroam.dll',\n", + " 'dinput.dll',\n", + " 'dinput8.dll',\n", + " 'Direct2DDesktop.dll',\n", + " 'directmanipulation.dll',\n", + " 'DisableIPv6.dll',\n", + " 'discan.dll',\n", + " 'diskmgmt.msc',\n", + " 'diskpart.exe',\n", + " 'diskperf.exe',\n", + " 'diskraid.exe',\n", + " 'DiskSnapshot.conf',\n", + " 'DiskSnapshot.exe',\n", + " 'Dism',\n", + " 'Dism.exe',\n", + " 'DismApi.dll',\n", + " 'DispBroker.dll',\n", + " 'dispdiag.exe',\n", + " 'dispex.dll',\n", + " 'Display.dll',\n", + " 'DisplayManager.dll',\n", + " 'DisplaySwitch.exe',\n", + " 'DisplaySystemToastIcon.contrast-white.png',\n", + " 'DisplaySystemToastIcon.png',\n", + " 'djctq.rs',\n", + " 'djoin.exe',\n", + " 'dllhost.exe',\n", + " 'dllhst3g.exe',\n", + " 'dlnashext.dll',\n", + " 'DMAlertListener.ProxyStub.dll',\n", + " 'DmApiSetExtImplDesktop.dll',\n", + " 'DMAppsRes.dll',\n", + " 'dmcertinst.exe',\n", + " 'dmcfghost.exe',\n", + " ...]" + ] + }, + "execution_count": 23, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "os.listdir('C:\\\\Windows\\\\System32')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "如果想知道这个目录下所有文件的总字节数,就可以同时使用os.path.getsize()和os.listdir()。" + ] + }, + { + "cell_type": "code", + "execution_count": 25, + "metadata": { + "scrolled": true + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "2375.9645986557007\n" + ] + } + ], + "source": [ + "totalSize = 0\n", + "for filename in os.listdir('C:\\\\Windows\\\\System32'):\n", + " totalSize = totalSize + os.path.getsize(os.path.join('C:\\\\Windows\\\\System32', filename))\n", + "print(totalSize/1024/1024)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "** 课堂小练习:**\n", + "如果想打印出总的文件大小(用GB)表示,应该怎么做?\n", + "\n", + "注意,这不包含System32目录下的文件夹内容的大小。" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 1.6 检查路径有效性\n", + "如果你提供的路径不存在,许多Python 函数就会崩溃并报错。os.path 模块提供了一些函数,用于检测给定的路径是否存在,以及它是文件还是文件夹。\n", + "* 如果path 参数所指的文件或文件夹存在,调用**os.path.exists(path)**将返回True,否则返回False。\n", + "* 如果path 参数存在,并且是一个文件,调用**os.path.isfile(path)**将返回True,否则返回False。\n", + "* 如果path 参数存在,并且是一个文件夹,调用**os.path.isdir(path)**将返回True,否则返回False。" + ] + }, + { + "cell_type": "code", + "execution_count": 26, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "True" + ] + }, + "execution_count": 26, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "os.path.exists('C:\\\\Windows')" + ] + }, + { + "cell_type": "code", + "execution_count": 27, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "False" + ] + }, + "execution_count": 27, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "os.path.exists('C:\\\\Windows123456')" + ] + }, + { + "cell_type": "code", + "execution_count": 28, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "True" + ] + }, + "execution_count": 28, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "os.path.isdir('C:\\\\Windows\\\\System32')" + ] + }, + { + "cell_type": "code", + "execution_count": 29, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "False" + ] + }, + "execution_count": 29, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "os.path.isfile('C:\\\\Windows\\\\System32')" + ] + }, + { + "cell_type": "code", + "execution_count": 30, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "False" + ] + }, + "execution_count": 30, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "os.path.isdir('C:\\\\Windows\\\\System32\\\\calc.exe')" + ] + }, + { + "cell_type": "code", + "execution_count": 31, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "True" + ] + }, + "execution_count": 31, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "os.path.isfile('C:\\\\Windows\\\\System32\\\\calc.exe')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# 2.文件读写过程\n", + "\n", + "\n", + "文件包括两种类型:
\n", + "* 纯文本文件:“文本文件”只包含基本文本字符,不包含字体、大小和颜色信息。带有.txt 扩展名的文本文件,以及带有.py 扩展名的Python 脚本文件,都是纯文本文件的例子。\n", + "\n", + "* 二进制文件:“二进制文件”是所有其他文件类型,诸如字处理文档、PDF、图像、电子表格和可执行程序。如果用Notepad 或TextEdit 打开一个二进制文件,它看起来就像乱码。二进制文件直接由比特0和比特1组成,没有统一字符编码,文件内部数据的组织格式与文件用途有关。二进制文件和文本文件最主要的区别在于是否有统一的字符编码\n", + "\n", + "无论文件创建为文本文件或者二进制文件,都可以用“文本文件方式”和“二进制文件方式”打开,打开后的操作不同。" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "人生苦短,我用Python\n", + "b'\\xc8\\xcb\\xc9\\xfa\\xbf\\xe0\\xb6\\xcc\\xa3\\xac\\xce\\xd2\\xd3\\xc3Python'\n" + ] + } + ], + "source": [ + "# 由于前面操作切换了当前目录,本文件可能放在系统不同的目录结构里,所以这里最好能重启一下内核:点击kernel菜单下的Restart。\n", + "import os\n", + "textFile = open(\"Documents/example.txt\",\"rt\") #t表示文本文件方式\n", + "print(textFile.readline())\n", + "textFile.close()\n", + "binFile = open(\"Documents/example.txt\",\"rb\") #b表示二进制文件方式\n", + "print(binFile.readline())\n", + "binFile.close()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "在Python 中,读写文件有3 个步骤:
\n", + "(1) 调用open()函数,返回一个File 对象。
\n", + "(2) 调用File 对象的read()或write()方法。
\n", + "(3) 调用File 对象的close()方法,关闭该文件。
" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 2.1 用open()函数打开文件\n", + "要用**open()**函数打开一个文件,就要向它传递一个字符串路径,表明希望打开的文件。这既可以是绝对路径,也可以是相对路径。open()函数返回一个File对象。\n", + "\n", + "
**<变量名> = open(<文件名>, <打开模式>)**
" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "textFile = open(\"Documents/example.txt\",\"rt\") #t表示文本文件方式" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "这些命令都将以读取纯文本文件的模式打开文件,或简称为“读模式”。当文件以读模式打开时,Python 只让你从文件中读取数据,你***不能***以任何方式写入或修改它。\n", + "\n", + "在Python 中打开文件时,读模式是默认的模式。但如果你不希望依赖于Python 的默认值,也可以明确指明该模式,向open()传入字符串'r',作为第二个参数。\n", + "\n", + "调用open()将返回一个File 对象。File 对象代表计算机中的一个文件,它只是Python 中另一种类型的值,就像你已熟悉的列表和字典。\n", + "\n", + "open()函数提供7种基本的打开模式:\n", + "\n", + "|打开模式|含义|\n", + "|-----|:-----|\n", + "|'r'|只读模式,如果文件不存在,返回异常FileNotFoundError,默认值|\n", + "|'w'|覆盖写模式,文件不存在则创建,存在则完全覆盖源文件|\n", + "|'x'|创建写模式,文件不存在则创建,存在则返回异常FileExistsError|\n", + "|'a'|追加写模式,文件不存在则创建,存在则在原文件最后追加内容|\n", + "|'b'|二进制文件模式|\n", + "|'t'|文本文件模式,默认值|\n", + "|'+'|与r/w/x/a一同使用,在原功能基础上增加同时读写功能|" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 2.2 读取文件内容\n", + "既然有了一个File 对象,就可以开始从它读取内容。如果希望将整个文件的内容读取为一个**字符串值**,就使用File对象的read()方法。" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "编号,姓名,部门,电子邮箱,电话号码,身份证号码\n", + "10932,张珊,管理,zhans@163.com,18612345678,520125197907167551\n", + "10933,李思,软件,lisi@163.com,18612345679,510110195512176250\n", + "10934,王武,财务,wangwu@example.com,18612345680,510102196510255826\n", + "10935,赵柳,财务,zhaoliu@163.com,18612345681,510115195810287715\n", + "10936,钱棋,人事,qianqi@example.com,18612345682,510103196707165650\n", + "10941,张明,管理,zhangming@example.com,18612345683,510105198112166015\n", + "10942,赵敏,人事,zhaomin@163.com,18612345684,510105198505225815\n", + "10945,王红,培训,wanghong@example.com,18612345685,510221196208516555\n", + "10946,李萧,培训,lixiao@example.com,18612345686,510221196601510810\n", + "10947,孙科,软件,sunke@163.com,18612345687,510105198507025519\n", + "10948,刘利,软件,liuli@example.com,18612345688,510227197510280527\n" + ] + } + ], + "source": [ + "empFile = open(\"Documents/employees.txt\")\n", + "empInfo = empFile.read()\n", + "empFile.close()\n", + "print(empInfo)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "或者,可以使用**readlines()**方法,从该文件取得一个字符串的列表。列表中的每个字符串就是文本中的每一行。请注意每行后面的换行符:\\\\n" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "['编号,姓名,部门,电子邮箱,电话号码,身份证号码\\n', '10932,张珊,管理,zhans@163.com,18612345678,520125197907167551\\n', '10933,李思,软件,lisi@163.com,18612345679,510110195512176250\\n', '10934,王武,财务,wangwu@example.com,18612345680,510102196510255826\\n', '10935,赵柳,财务,zhaoliu@163.com,18612345681,510115195810287715\\n', '10936,钱棋,人事,qianqi@example.com,18612345682,510103196707165650\\n', '10941,张明,管理,zhangming@example.com,18612345683,510105198112166015\\n', '10942,赵敏,人事,zhaomin@163.com,18612345684,510105198505225815\\n', '10945,王红,培训,wanghong@example.com,18612345685,510221196208516555\\n', '10946,李萧,培训,lixiao@example.com,18612345686,510221196601510810\\n', '10947,孙科,软件,sunke@163.com,18612345687,510105198507025519\\n', '10948,刘利,软件,liuli@example.com,18612345688,510227197510280527']\n" + ] + } + ], + "source": [ + "empFile = open(\"Documents/employees.txt\")\n", + "empInfo = empFile.readlines()\n", + "empFile.close()\n", + "print(type(empInfo))\n", + "print(empInfo)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "** 课堂练习 **\n", + "\n", + "请统计employees.txt文件的中女员工的个数:" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "首先定义一个函数,根据身份证号码判断是不是女员工(是女员工返回1,不是返回0):" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "def isFemaleByIDCard(idCard):\n", + " if len(idCard) == 18:\n", + " return 1 if int(idCard[16]) % 2 == 0 else 0 #理解一下这句话 :)\n", + " elif len(idCard) == 15:\n", + " return 1 if int(idCard[13] % 2) == 0 else 0\n", + " else:\n", + " return 0" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "第2步,将employees.txt文件的内容读入,并存储到empList中:" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[['10932', '张珊', '管理', 'zhans@163.com', '18612345678', '520125197907167551'], ['10933', '李思', '软件', 'lisi@163.com', '18612345679', '510110195512176250'], ['10934', '王武', '财务', 'wangwu@example.com', '18612345680', '510102196510255826'], ['10935', '赵柳', '财务', 'zhaoliu@163.com', '18612345681', '510115195810287715'], ['10936', '钱棋', '人事', 'qianqi@example.com', '18612345682', '510103196707165650'], ['10941', '张明', '管理', 'zhangming@example.com', '18612345683', '510105198112166015'], ['10942', '赵敏', '人事', 'zhaomin@163.com', '18612345684', '510105198505225815'], ['10945', '王红', '培训', 'wanghong@example.com', '18612345685', '510221196208516555'], ['10946', '李萧', '培训', 'lixiao@example.com', '18612345686', '510221196601510810'], ['10947', '孙科', '软件', 'sunke@163.com', '18612345687', '510105198507025519'], ['10948', '刘利', '软件', 'liuli@example.com', '18612345688', '510227197510280527']]\n" + ] + } + ], + "source": [ + "empFile = open(\"Documents/employees.txt\")\n", + "empInfo = empFile.readlines()\n", + "empFile.close()\n", + "\n", + "empList = []\n", + "for i in range(1,len(empInfo)): #注意,这里是从1开始的,为什么?\n", + " empStr = empInfo[i]\n", + " empStr = empStr.strip('\\n') # 这里是做什么?\n", + " empList.append(empStr.split(',')) #这里又是在做什么?\n", + "print(empList)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "第3步,调用isFemaleByIDCard函数进行统计:" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": { + "scrolled": true + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "女员工的人数是: 2\n" + ] + } + ], + "source": [ + "femaleCount = 0\n", + "for emp in empList:\n", + " femaleCount += isFemaleByIDCard(emp[5])\n", + "\n", + "print(\"女员工的人数是:\", femaleCount)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "根据打开方式不同可以对文件进行相应的读写操作,Python提供4个常用的文件内容读取方法:\n", + "\n", + "|方法|含义|\n", + "|---|:---|\n", + "|<file>.readall()|读入整个文件内容,返回一个字符串或字节流|\n", + "|<file>.read(size=-1)|从文件中读入整个文件内容,如果给出参数,读入前size长度的字符串或字节流|\n", + "|<file>.readline(size = -1)|从文件中读入一行内容,如果给出参数,读入该行前size长度的字符串或字节流|\n", + "|<file>.readlines(hint=-1)|从文件中读入所有行,以每行为元素形成一个列表,如果给出参数,读入hint行|\n", + "\n", + "\n", + "文本文件的逐行打印:" + ] + }, + { + "cell_type": "code", + "execution_count": 25, + "metadata": { + "scrolled": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "编号,姓名,部门,电子邮箱,电话号码,身份证号码\n", + "\n", + "10932,张珊,管理,zhans@163.com,18612345678,520125197907167551\n", + "\n", + "10933,李思,软件,lisi@163.com,18612345679,510110195512176250\n", + "\n", + "10934,王武,财务,wangwu@example.com,18612345680,510102196510255826\n", + "\n", + "10935,赵柳,财务,zhaoliu@163.com,18612345681,510115195810287715\n", + "\n", + "10936,钱棋,人事,qianqi@example.com,18612345682,510103196707165650\n", + "\n", + "10941,张明,管理,zhangming@example.com,18612345683,51010519811216015\n", + "\n", + "10942,赵敏,人事,zhaomin@163.com,18612345684,510105198505225815\n", + "\n", + "10945,王红,培训,wanghong@example.com,18612345685,510221196208516555\n", + "\n", + "10946,李萧,培训,lixiao@example.com,18612345686,510221196601510810\n", + "\n", + "10947,孙科,软件,sunke@163.com,18612345687,510105198507025519\n", + "\n", + "10948,刘利,软件,liuli@example.com,18612345688,510227197510280527\n" + ] + } + ], + "source": [ + "with open(\"Documents/employees.txt\",\"r\") as empFile:\n", + " for line in empFile:\n", + " print(line)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "上面的方法用到了with语句,使用with语句,可以不需要调用文件的close()方法,文件会在with语句结束后自动关闭。\n", + "\n", + "如果程序需要逐行处理文件内容,建议采用上述代码格式。特别是对于大型文件的读取,这样处理比较合理。" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 2.3 写入文件\n", + "Python 允许你将内容写入文件,方式与print()函数将字符串“写”到屏幕上类似。但是,如果打开文件时用读模式,就不能写入文件。你需要以“写入纯文本模\n", + "式”或“添加纯文本模式”打开该文件,或简称为“写模式”和“添加模式”。写模式将覆写原有的文件,从头开始,就像你用一个新值覆写一个变量的值。\n", + "\n", + "将'**w**'作为第二个参数传递给open(),以写模式打开该文件。不同的是,添加模式将在已有文件的末尾添加文本。可以认为这类似向一个变量中的列表添加内容,而不是完全覆写该变量。\n", + "\n", + "将'**a**'作为第二个参数传递给open(),以添加模式打开该文件。\n", + "\n", + "如果传递给 open()的文件名不存在,写模式和添加模式都会创建一个新的空文件。在读取或写入文件后,调用close()方法,然后才能再次打开该文件。" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**课堂练习**\n", + "\n", + "接着上面的例子,将女员工人数,男员工人数和身份证号码有误的员工写入到统计结果文件result.txt:" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "类似的,定义一个函数,根据身份证号码判断是不是男员工(是女员工返回1,不是返回0):" + ] + }, + { + "cell_type": "code", + "execution_count": 28, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "def isMaleByIDCard(idCard):\n", + " if len(idCard) == 18:\n", + " return 1 if int(idCard[16]) % 2 == 1 else 0 #理解一下这句话 :)\n", + " elif len(idCard) == 15:\n", + " return 1 if int(idCard[13] % 2) == 1 else 0\n", + " else:\n", + " return 0" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "再定义一个函数,判断传入的身份证号码是否有误(身份证号码应该是18位或者15位),如果号码格式正确,返回True;如果格式不正确,返回False:" + ] + }, + { + "cell_type": "code", + "execution_count": 29, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "def isCorrectIDCard(idCard):\n", + " if len(idCard) in (15, 18):\n", + " return True\n", + " else:\n", + " return False" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "***PS. 这个方法判断身份证号码的正确性是简单粗暴的,如果要实现更复杂的判断规则,也许你想了解一下正则表达式,这会是扩展的内容。***" + ] + }, + { + "cell_type": "code", + "execution_count": 30, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "总人数: 11\n", + "女员工人数: 2\n", + "男员工人数: 7\n", + "以下员工身份证号码有误:李思 张明 " + ] + } + ], + "source": [ + "femaleCount = 0\n", + "maleCount = 0\n", + "invalidIDCard = []\n", + "\n", + "empFile = open(\"Documents/employees.txt\")\n", + "empInfo = empFile.readlines()\n", + "empFile.close()\n", + "\n", + "empList = []\n", + "for i in range(1,len(empInfo)): \n", + " empStr = empInfo[i]\n", + " empStr = empStr.strip('\\n') \n", + " empList.append(empStr.split(',')) \n", + "\n", + "for emp in empList:\n", + " femaleCount += isFemaleByIDCard(emp[5])\n", + " maleCount += isMaleByIDCard(emp[5])\n", + " if isCorrectIDCard(emp[5]) == False:\n", + " invalidIDCard.append(emp[1])\n", + "\n", + "print(\"总人数:\", len(empList))\n", + "print(\"女员工人数:\", femaleCount)\n", + "print(\"男员工人数:\", maleCount)\n", + "if len(invalidIDCard)>0:\n", + " print(\"以下员工身份证号码有误:\", end=\"\")\n", + " for name in invalidIDCard:\n", + " print(name, end=\" \")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "将统计的内容写入到result.txt文件:" + ] + }, + { + "cell_type": "code", + "execution_count": 31, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "resultFile = open(\"Documents/result.txt\",\"w\")\n", + "resultFile.write(\"总人数:{}\\n\".format(len(empList)))\n", + "resultFile.write(\"女员工人数:{}\\n\".format(femaleCount))\n", + "resultFile.write(\"男员工人数:{}\\n\".format(maleCount))\n", + "if len(invalidIDCard) > 0:\n", + " nameStr = \"\"\n", + " for name in invalidIDCard:\n", + " nameStr += \" \" + name\n", + "\n", + "resultFile.write(\"\\n\")\n", + "resultFile.write(\"有{}个员工身份证号码有误:{}\\n\".format(len(invalidIDCard),nameStr))\n", + "resultFile.close()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "想想你们有500个员工,这个统计效率是不是很高了?" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Python提供3个与文件内容写入有关的方法:\n", + "\n", + "|方法|含义|\n", + "|---|:---|\n", + "|<file>.write(s)|向文件写入一个字符串或字节流|\n", + "|<file>.writelines(lines)|将一个元素为字符串的列表写入文件|\n", + "|<file>.seek(offset)|改变当前文件操作指针的位置,offset的值:0:文件开头; 1: 当前位置; 2: 文件结尾|" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "上面的统计内容,可以使用wirtelines()函数将身份证号码有误的员工姓名一次写入文件:" + ] + }, + { + "cell_type": "code", + "execution_count": 32, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "with open(\"Documents/result.txt\",\"w\") as resultFile:\n", + " resultFile.write(\"总人数:{}\\n\".format(len(empList)))\n", + " resultFile.write(\"女员工人数:{}\\n\".format(femaleCount))\n", + " resultFile.write(\"男员工人数:{}\\n\".format(maleCount))\n", + " if len(invalidIDCard) > 0:\n", + " resultFile.write(\"\\n\")\n", + " resultFile.write(\"有{}个员工身份证号码有误:\\n\".format(len(invalidIDCard)))\n", + " \n", + " resultFile.writelines(invalidIDCard)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "看看下面的结果,好像有点问题:\n", + "\n", + "\n", + "\n", + "解决这个问题的方法会有很多,其中比较方便的一种是列表推导式(非常Python的一种写法,也许你想了解以下):" + ] + }, + { + "cell_type": "code", + "execution_count": 33, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "with open(\"Documents/result.txt\",\"w\") as resultFile:\n", + " resultFile.write(\"总人数:{}\\n\".format(len(empList)))\n", + " resultFile.write(\"女员工人数:{}\\n\".format(femaleCount))\n", + " resultFile.write(\"男员工人数:{}\\n\".format(maleCount))\n", + " if len(invalidIDCard) > 0:\n", + " resultFile.write(\"\\n\")\n", + " resultFile.write(\"有{}个员工身份证号码有误:\\n\".format(len(invalidIDCard)))\n", + " \n", + " resultFile.writelines([item + \" \" for item in invalidIDCard])" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# 3.处理CSV文件\n", + "\n", + "CSV 表示“Comma-Separated Values(逗号分隔的值)”,CSV文件是简化的电子表格,保存为纯文本文件。它是一种通用的、相对简单的文件格式,在商业和科学上广泛应用,尤其应用在程序之间转移表格数据。\n", + "\n", + "上面处理的员工信息格式其实就是一种CSV文件的格式。该格式的应用有一些基本规则,如下:\n", + "\n", + "(1)纯文本格式,通过单一编码表示字符;
\n", + "(2)以行为单位,开头不留空行,行之间没有空行;
\n", + "(3)每行表示一个一维数据,多行表示二维数据;
\n", + "(4)以逗号分隔每列数据,列数据为空也要保留逗号;
\n", + "(5)可以包含或不包含列名,包含时列名放置在文件第一行。
\n", + "\n", + "\n", + "Python 的csv模块让解析CSV文件变得容易。" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 3.1 csv 模块\n", + "CSV 文件中的每行代表电子表格中的一行,逗号分割了该行中的单元格。在一个CSV 文件中,看起来像这样:\n", + "\n", + "\n", + "\n", + "CSV 文件是简单的,缺少Excel 电子表格的许多功能。例如,CSV 文件中:\n", + "* 值没有类型,所有东西都是字符串;\n", + "* 没有字体大小或颜色的设置;\n", + "* 没有多个工作表;\n", + "* 不能指定单元格的宽度和高度;\n", + "* 不能合并单元格;\n", + "* 不能嵌入图像或图表。\n", + "\n", + "CSV 的文件的优势是简单。\n", + "\n", + "csv模块是Python 自带的,所以不需要安装就可以导入它。" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 3.2 Reader 对象\n", + "要用csv模块从CSV 文件中读取数据,需要创建一个Reader 对象。Reader 对象让你迭代遍历CSV 文件中的每一行。" + ] + }, + { + "cell_type": "code", + "execution_count": 34, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "[['编号', '姓名', '基本工资', '奖金', '住房补助', '五险一金', '其他扣款', '专项附加扣除'],\n", + " ['10932',\n", + " '张珊',\n", + " '15000.00 ',\n", + " '4000.00 ',\n", + " '2300.00 ',\n", + " '980.00 ',\n", + " '300.00 ',\n", + " '1000.00'],\n", + " ['10933',\n", + " '李思',\n", + " '12000.00 ',\n", + " '5000.00 ',\n", + " '2600.00 ',\n", + " '890.00 ',\n", + " '400.00 ',\n", + " '2000.00'],\n", + " ['10934',\n", + " '王武',\n", + " '10100.00 ',\n", + " '2000.00 ',\n", + " '2500.00 ',\n", + " '860.00 ',\n", + " '500.00 ',\n", + " '1500.00'],\n", + " ['10935',\n", + " '赵柳',\n", + " '10050.00 ',\n", + " '1000.00 ',\n", + " '2700.00 ',\n", + " '1080.00 ',\n", + " '300.00 ',\n", + " '2000.00'],\n", + " ['10936',\n", + " '钱棋',\n", + " '10200.00 ',\n", + " '2000.00 ',\n", + " '2400.00 ',\n", + " '1000.00 ',\n", + " '600.00 ',\n", + " '1000.00'],\n", + " ['10941',\n", + " '张明',\n", + " '13600.00 ',\n", + " '4000.00 ',\n", + " '2100.00 ',\n", + " '680.00 ',\n", + " '300.00 ',\n", + " '1000.00'],\n", + " ['10942',\n", + " '赵敏',\n", + " '13200.00 ',\n", + " '2500.00 ',\n", + " '2300.00 ',\n", + " '670.00 ',\n", + " '400.00 ',\n", + " '3000.00'],\n", + " ['10945',\n", + " '王红',\n", + " '13600.00 ',\n", + " '2600.00 ',\n", + " '2030.00 ',\n", + " '560.00 ',\n", + " '400.00 ',\n", + " '2000.00'],\n", + " ['10946',\n", + " '李萧',\n", + " '12500.00 ',\n", + " '2800.00 ',\n", + " '2400.00 ',\n", + " '420.00 ',\n", + " '500.00 ',\n", + " '1500.00'],\n", + " ['10947',\n", + " '孙科',\n", + " '12000.00 ',\n", + " '3500.00 ',\n", + " '2030.00 ',\n", + " '880.00 ',\n", + " '300.00 ',\n", + " '1000.00'],\n", + " ['10948',\n", + " '刘利',\n", + " '14200.00 ',\n", + " '2500.00 ',\n", + " '2020.00 ',\n", + " '900.00 ',\n", + " '400.00 ',\n", + " '2000.00']]" + ] + }, + "execution_count": 34, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "import csv\n", + "\n", + "incomeFile = open('Documents/income.csv')\n", + "incomeReader = csv.reader(incomeFile)\n", + "incomeList = list(incomeReader)\n", + "incomeList" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "回头和前面对于员工信息处理的方法比较一下,是不是更简单了?\n", + "\n", + "既然已经将CSV文件表示为列表的列表,就可以用表达式**incomeList[row][col]**来访问特定行和列的值。其中,row是incomeList中一个列表的下标,col是该列表中你想访问的项的下标。" + ] + }, + { + "cell_type": "code", + "execution_count": 36, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "'张珊'" + ] + }, + "execution_count": 36, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "incomeList[1][1]" + ] + }, + { + "cell_type": "code", + "execution_count": 38, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "'五险一金'" + ] + }, + "execution_count": 38, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "incomeList[0][5]" + ] + }, + { + "cell_type": "code", + "execution_count": 39, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "'980.00 '" + ] + }, + "execution_count": 39, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "incomeList[1][5]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 3.3 在for 循环中,从Reader 对象读取数据\n", + "对于大型的CSV 文件,你需要在一个for 循环中使用Reader 对象。这样避免将整个文件一次性装入内存。例如:" + ] + }, + { + "cell_type": "code", + "execution_count": 40, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "编号 姓名 基本工资 奖金 住房补助 五险一金 其他扣款 专项附加扣除\n", + "10932 张珊 15000.00 4000.00 2300.00 980.00 300.00 1000.00\n", + "10933 李思 12000.00 5000.00 2600.00 890.00 400.00 2000.00\n", + "10934 王武 10100.00 2000.00 2500.00 860.00 500.00 1500.00\n", + "10935 赵柳 10050.00 1000.00 2700.00 1080.00 300.00 2000.00\n", + "10936 钱棋 10200.00 2000.00 2400.00 1000.00 600.00 1000.00\n", + "10941 张明 13600.00 4000.00 2100.00 680.00 300.00 1000.00\n", + "10942 赵敏 13200.00 2500.00 2300.00 670.00 400.00 3000.00\n", + "10945 王红 13600.00 2600.00 2030.00 560.00 400.00 2000.00\n", + "10946 李萧 12500.00 2800.00 2400.00 420.00 500.00 1500.00\n", + "10947 孙科 12000.00 3500.00 2030.00 880.00 300.00 1000.00\n", + "10948 刘利 14200.00 2500.00 2020.00 900.00 400.00 2000.00\n" + ] + } + ], + "source": [ + "import csv\n", + "\n", + "incomeFile = open('Documents/income.csv')\n", + "incomeReader = csv.reader(incomeFile)\n", + "\n", + "for row in incomeReader:\n", + " print(\" \".join(row))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Reader对象只能循环遍历一次。要再次读取CSV文件,必须调用csv.reader,创建一个对象。例如,下面的代码什么都打印不出来:" + ] + }, + { + "cell_type": "code", + "execution_count": 42, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "for row in incomeReader:\n", + " print(\" \".join(row))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 3.4 Writer 对象\n", + "利用Writer对象可以将数据写 CSV文件。要创建一个 Writer对象,就使用csv.writer()函数。\n", + "\n", + "将income.csv文件中的每个人的基本工资、奖金和住房补助加起来成为收入;五险一金、其他扣款和专项附加扣除加起来成为扣除,并将新的数据写入到文件incomeTotal.csv文件中:" + ] + }, + { + "cell_type": "code", + "execution_count": 52, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "编号 姓名 收入 扣除\n", + "10932 张珊 21300.0 2280.0\n", + "10933 李思 19600.0 3290.0\n", + "10934 王武 14600.0 2860.0\n", + "10935 赵柳 13750.0 3380.0\n", + "10936 钱棋 14600.0 2600.0\n", + "10941 张明 19700.0 1980.0\n", + "10942 赵敏 18000.0 4070.0\n", + "10945 王红 18230.0 2960.0\n", + "10946 李萧 17700.0 2420.0\n", + "10947 孙科 17530.0 2180.0\n", + "10948 刘利 18720.0 3300.0\n" + ] + } + ], + "source": [ + "import csv\n", + "\n", + "incomeFile = open('Documents/income.csv')\n", + "incomeReader = csv.reader(incomeFile)\n", + "\n", + "incomeTotalRows = []\n", + "incomeTotalRows.append(['编号', '姓名', '收入', '扣除'])\n", + "\n", + "for row in incomeReader:\n", + " if incomeReader.line_num == 1: #这句是做什么?\n", + " continue\n", + "\n", + " incomeTotalRows.append([row[0], row[1], float(row[2]) +float(row[3]) + float(row[4]), float(row[5]) + float(row[6]) + float(row[7])])\n", + "\n", + "incomeFile.close()\n", + "\n", + "for row in incomeTotalRows:\n", + " print(\" \".join([str(item) for item in row])) #这里又用到了列表推导式" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "写入CSV 文件:" + ] + }, + { + "cell_type": "code", + "execution_count": 53, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "incomeTotalFile = open('Documents/incomeTotal.csv', 'w', newline=\"\") #newline什么作用?上网查一查\n", + "incomeTotalCSVWriter = csv.writer(incomeTotalFile)\n", + "\n", + "for row in incomeTotalRows:\n", + " incomeTotalCSVWriter.writerow(row)\n", + " \n", + "incomeTotalFile.close()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# 4. 高维数据的格式化JSON\n", + "\n", + "JavaScript对象表示法是一种流行的方式,将数据格式化,成为人可读的字符串。JSON是JavaScript 程序编写数据结构的原生方式。不需要了解JavaScript,也能处理JSON格式的数据。\n", + "\n", + "与一维二维数据不同,高维数据能展示数据间更为复杂的组织关系。为了保持灵活性,表示高维数据不采用任何结构形式,仅采用最基本的二元关系,即键值对。万维网是高维数据最成功的典型应用。\n", + "JSON格式可以对高维数据进行表达和存储。JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,易于阅读和理解。JSON格式表达键值对的基本格式如下,键值对都保存在双引号中:\n", + "
** \"key\" : \"value\" **
\n", + "\n", + "当多个键值对放在一起时,JSON有如下一些约定:\n", + "* 数据保存在键值对中;\n", + "* 键值对之间由逗号分隔;\n", + "* 括号用于保存键值对数据组成的对象;\n", + "* 方括号用于保存键值对数据组成的数组。\n", + "\n", + "下面是JSON 格式数据的一个例子:\n", + "\n", + "```Python\n", + "{\n", + "\"empNo\":\"10932\",\n", + " \"empName\":\"张珊\",\n", + " \"incomeSum\":21300.00,\n", + " \"deductionSum\":2280.00\n", + " }\n", + "```\n", + "是不是和字典很像?注意,这是一个JSON字符串。\n", + "\n", + "了解JSON 是很有用,因为很多网站都提供JSON 格式的内容,作为程序与网站交互的方式。这就是所谓的提供“应用程序编程接口(API)”。访问API 和通过\n", + "URL 访问任何其他网页是一样的。不同的是,API 返回的数据是针对机器格式化的(例如用JSON),API 不是人容易阅读的。" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 4.1 json 模块\n", + "Python 的json 模块处理了JSON 数据字符串和Python 值之间转换的所有细节,得到了**json.loads()**和**json.dumps()**函数。\n", + "\n", + "JSON 不能存储每一种Python 值,它只能包含以下数据类型的值:字符串、整型、浮点型、布尔型、列表、字典和NoneType。\n", + "\n", + "JSON 不能表示Python 特有的对象,如File 对象、CSV Reader 或Writer 对象、Regex对象或Selenium WebElement 对象。" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 4.1.1 用loads()函数读取JSON\n", + "要将包含JSON 数据的字符串转换为Python 的值,就将它传递给json.loads()函数(这个名字的意思是“load string”,而不是“loads”):" + ] + }, + { + "cell_type": "code", + "execution_count": 55, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "\n", + "{'empNo': '10932', 'empName': '张珊', 'incomeSum': 21300.0, 'deductionSum': 2280.0}\n" + ] + } + ], + "source": [ + "empJsonData = '{\"empNo\":\"10932\",\"empName\":\"张珊\",\"incomeSum\":21300.00,\"deductionSum\":2280.00}'\n", + "\n", + "import json\n", + "empPythonValue = json.loads(empJsonData)\n", + "print(type(empPythonValue))\n", + "print()\n", + "print(empPythonValue)" + ] + }, + { + "cell_type": "code", + "execution_count": 57, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "\n", + "[{'empNo': '10932', 'empName': '张珊', 'incomeSum': 21300.0, 'deductionSum': 2280.0}, {'empNo': '10933', 'empName': '李思', 'incomeSum': 19600.0, 'deductionSum': 3290.0}, {'empNo': '10934', 'empName': '王武', 'incomeSum': 14600.0, 'deductionSum': 2860.0}]\n" + ] + } + ], + "source": [ + "moreEmpJsonData = '[{\"empNo\":\"10932\",\"empName\":\"张珊\",\"incomeSum\":21300.00,\"deductionSum\":2280.00},\\\n", + "{\"empNo\":\"10933\",\"empName\":\"李思\",\"incomeSum\":19600.00,\"deductionSum\":3290.00},\\\n", + "{\"empNo\":\"10934\",\"empName\":\"王武\",\"incomeSum\":14600.00,\"deductionSum\":2860.00}]'\n", + "\n", + "import json\n", + "moreEmpPythonValue = json.loads(moreEmpJsonData)\n", + "print(type(moreEmpPythonValue))\n", + "print()\n", + "print(moreEmpPythonValue)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 4.1.2 用dumps 函数写出JSON\n", + "json.dumps()函数(它表示“dump string”,而不是“dumps”)将一个Python 值转换成JSON 格式的数据字符串。" + ] + }, + { + "cell_type": "code", + "execution_count": 59, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n" + ] + } + ], + "source": [ + "empDicValue = {\"empNo\":\"10932\",\"empName\":\"张珊\",\"incomeSum\":21300.00,\"deductionSum\":2280.00} #这是一个Python字典\n", + "print(type(empDicValue))" + ] + }, + { + "cell_type": "code", + "execution_count": 60, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "\n", + "{\"empNo\": \"10932\", \"empName\": \"\\u5f20\\u73ca\", \"incomeSum\": 21300.0, \"deductionSum\": 2280.0}\n" + ] + } + ], + "source": [ + "empJsonStr = json.dumps(empDicValue) #empJsonStr是一个字符串\n", + "print(type(empJsonStr))\n", + "print()\n", + "print(empJsonStr)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "有了Json,就可以将Python中的列表,字典等对象转换成字符串,在互联网上传输;也可以从互联网获取Json字符串,转换成Python中的字典或列表。" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 4.2 实例:豆瓣电影数据分析" + ] + }, + { + "cell_type": "code", + "execution_count": 85, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "import json, requests\n", + "\n", + "url = 'http://api.douban.com/v2/movie/top250'\n", + "response = requests.get(url) # 这里可能需要你更进一步学习Python\n", + "start=1\n", + "count=25\n", + "response = requests.get(url, params={'start': start, 'count': count})\n", + "response.encoding='UTF_8'\n", + "content=response.json()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "下面来分析一下这个content:" + ] + }, + { + "cell_type": "code", + "execution_count": 83, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "{'count': 25, 'start': 1, 'total': 250, 'subjects': [{'rating': {'max': 10, 'average': 9.6, 'stars': '50', 'min': 0}, 'genres': ['剧情', '爱情', '同性'], 'title': '霸王别姬', 'casts': [{'alt': 'https://movie.douban.com/celebrity/1003494/', 'avatars': {'small': 'http://img3.doubanio.com/view/celebrity/s_ratio_celebrity/public/p67.jpg', 'large': 'http://img3.doubanio.com/view/celebrity/s_ratio_celebrity/public/p67.jpg', 'medium': 'http://img3.doubanio.com/view/celebrity/s_ratio_celebrity/public/p67.jpg'}, 'name': '张国荣', 'id': '1003494'}, {'alt': 'https://movie.douban.com/celebrity/1050265/', 'avatars': {'small': 'http://img1.doubanio.com/view/celebrity/s_ratio_celebrity/public/p46345.jpg', 'large': 'http://img1.doubanio.com/view/celebrity/s_ratio_celebrity/public/p46345.jpg', 'medium': 'http://img1.doubanio.com/view/celebrity/s_ratio_celebrity/public/p46345.jpg'}, 'name': '张丰毅', 'id': '1050265'}, {'alt': 'https://movie.douban.com/celebrity/1035641/', 'avatars': {'small': 'http://img3.doubanio.com/view/celebrity/s_ratio_celebrity/public/p1399268395.47.jpg', 'large': 'http://img3.doubanio.com/view/celebrity/s_ratio_celebrity/public/p1399268395.47.jpg', 'medium': 'http://img3.doubanio.com/view/celebrity/s_ratio_celebrity/public/p1399268395.47.jpg'}, 'name': '巩俐', 'id': '1035641'}], 'collect_count': 1359042, 'original_title': '霸王别姬', 'subtype': 'movie', 'directors': [{'alt': 'https://movie.douban.com/celebrity/1023040/', 'avatars': {'small': 'http://img1.doubanio.com/view/celebrity/s_ratio_celebrity/public/p1451727734.81.jpg', 'large': 'http://img1.doubanio.com/view/celebrity/s_ratio_celebrity/public/p1451727734.81.jpg', 'medium': 'http://img1.doubanio.com/view/celebrity/s_ratio_celebrity/public/p1451727734.81.jpg'}, 'name': '陈凯歌', 'id': '1023040'}], 'year': '1993', 'images': {'small': 'http://img1.doubanio.com/view/photo/s_ratio_poster/public/p1910813120.jpg', 'large': 'http://img1.doubanio.com/view/photo/s_ratio_poster/public/p1910813120.jpg', 'medium': 'http://img1.doubanio.com/view/photo/s_ratio_poster/public/p1910813120.jpg'}, 'alt': 'https://movie.douban.com/subject/1291546/', 'id': '1291546'}, {'rating': {'max': 10, 'average': 9.4, 'stars': '50', 'min': 0}, 'genres': ['剧情', '动作', '犯罪'], 'title': '这个杀手不太冷', 'casts': [{'alt': 'https://movie.douban.com/celebrity/1025182/', 'avatars': {'small': 'http://img1.doubanio.com/view/celebrity/s_ratio_celebrity/public/p8833.jpg', 'large': 'http://img1.doubanio.com/view/celebrity/s_ratio_celebrity/public/p8833.jpg', 'medium': 'http://img1.doubanio.com/view/celebrity/s_ratio_celebrity/public/p8833.jpg'}, 'name': '让·雷诺', 'id': '1025182'}, {'alt': 'https://movie.douban.com/celebrity/1054454/', 'avatars': {'small': 'http://img1.doubanio.com/view/celebrity/s_ratio_celebrity/public/p2274.jpg', 'large': 'http://img1.doubanio.com/view/celebrity/s_ratio_celebrity/public/p2274.jpg', 'medium': 'http://img1.doubanio.com/view/celebrity/s_ratio_celebrity/public/p2274.jpg'}, 'name': '娜塔莉·波特曼', 'id': '1054454'}, {'alt': 'https://movie.douban.com/celebrity/1010507/', 'avatars': {'small': 'http://img3.doubanio.com/view/celebrity/s_ratio_celebrity/public/p33896.jpg', 'large': 'http://img3.doubanio.com/view/celebrity/s_ratio_celebrity/public/p33896.jpg', 'medium': 'http://img3.doubanio.com/view/celebrity/s_ratio_celebrity/public/p33896.jpg'}, 'name': '加里·奥德曼', 'id': '1010507'}], 'collect_count': 1766121, 'original_title': 'Léon', 'subtype': 'movie', 'directors': [{'alt': 'https://movie.douban.com/celebrity/1031876/', 'avatars': {'small': 'http://img1.doubanio.com/view/celebrity/s_ratio_celebrity/public/p33301.jpg', 'large': 'http://img1.doubanio.com/view/celebrity/s_ratio_celebrity/public/p33301.jpg', 'medium': 'http://img1.doubanio.com/view/celebrity/s_ratio_celebrity/public/p33301.jpg'}, 'name': '吕克·贝松', 'id': '1031876'}], 'year': '1994', 'images': {'small': 'http://img1.doubanio.com/view/photo/s_ratio_poster/public/p511118051.jpg', 'large': 'http://img1.doubanio.com/view/photo/s_ratio_poster/public/p511118051.jpg', 'medium': 'http://img1.doubanio.com/view/photo/s_ratio_poster/public/p511118051.jpg'}, 'alt': 'https://movie.douban.com/subject/1295644/', 'id': '1295644'}, {'rating': {'max': 10, 'average': 9.4, 'stars': '50', 'min': 0}, 'genres': ['剧情', '爱情'], 'title': '阿甘正传', 'casts': [{'alt': 'https://movie.douban.com/celebrity/1054450/', 'avatars': {'small': 'http://img1.doubanio.com/view/celebrity/s_ratio_celebrity/public/p28603.jpg', 'large': 'http://img1.doubanio.com/view/celebrity/s_ratio_celebrity/public/p28603.jpg', 'medium': 'http://img1.doubanio.com/view/celebrity/s_ratio_celebrity/public/p28603.jpg'}, 'name': '汤姆·汉克斯', 'id': '1054450'}, {'alt': 'https://movie.douban.com/celebrity/1002676/', 'avatars': {'small': 'http://img3.doubanio.com/view/celebrity/s_ratio_celebrity/public/p1537890386.77.jpg', 'large': 'http://img3.doubanio.com/view/celebrity/s_ratio_celebrity/public/p1537890386.77.jpg', 'medium': 'http://img3.doubanio.com/view/celebrity/s_ratio_celebrity/public/p1537890386.77.jpg'}, 'name': '罗宾·怀特', 'id': '1002676'}, {'alt': 'https://movie.douban.com/celebrity/1031848/', 'avatars': {'small': 'http://img1.doubanio.com/view/celebrity/s_ratio_celebrity/public/p1345.jpg', 'large': 'http://img1.doubanio.com/view/celebrity/s_ratio_celebrity/public/p1345.jpg', 'medium': 'http://img1.doubanio.com/view/celebrity/s_ratio_celebrity/public/p1345.jpg'}, 'name': '加里·西尼斯', 'id': '1031848'}], 'collect_count': 1491187, 'original_title': 'Forrest Gump', 'subtype': 'movie', 'directors': [{'alt': 'https://movie.douban.com/celebrity/1053564/', 'avatars': {'small': 'http://img1.doubanio.com/view/celebrity/s_ratio_celebrity/public/p505.jpg', 'large': 'http://img1.doubanio.com/view/celebrity/s_ratio_celebrity/public/p505.jpg', 'medium': 'http://img1.doubanio.com/view/celebrity/s_ratio_celebrity/public/p505.jpg'}, 'name': '罗伯特·泽米吉斯', 'id': '1053564'}], 'year': '1994', 'images': {'small': 'http://img3.doubanio.com/view/photo/s_ratio_poster/public/p510876377.jpg', 'large': 'http://img3.doubanio.com/view/photo/s_ratio_poster/public/p510876377.jpg', 'medium': 'http://img3.doubanio.com/view/photo/s_ratio_poster/public/p510876377.jpg'}, 'alt': 'https://movie.douban.com/subject/1292720/', 'id': '1292720'}, {'rating': {'max': 10, 'average': 9.5, 'stars': '50', 'min': 0}, 'genres': ['剧情', '喜剧', '爱情'], 'title': '美丽人生', 'casts': [{'alt': 'https://movie.douban.com/celebrity/1041004/', 'avatars': {'small': 'http://img1.doubanio.com/view/celebrity/s_ratio_celebrity/public/p26764.jpg', 'large': 'http://img1.doubanio.com/view/celebrity/s_ratio_celebrity/public/p26764.jpg', 'medium': 'http://img1.doubanio.com/view/celebrity/s_ratio_celebrity/public/p26764.jpg'}, 'name': '罗伯托·贝尼尼', 'id': '1041004'}, {'alt': 'https://movie.douban.com/celebrity/1000375/', 'avatars': {'small': 'http://img3.doubanio.com/view/celebrity/s_ratio_celebrity/public/p9548.jpg', 'large': 'http://img3.doubanio.com/view/celebrity/s_ratio_celebrity/public/p9548.jpg', 'medium': 'http://img3.doubanio.com/view/celebrity/s_ratio_celebrity/public/p9548.jpg'}, 'name': '尼可莱塔·布拉斯基', 'id': '1000375'}, {'alt': 'https://movie.douban.com/celebrity/1000368/', 'avatars': {'small': 'http://img1.doubanio.com/view/celebrity/s_ratio_celebrity/public/p45590.jpg', 'large': 'http://img1.doubanio.com/view/celebrity/s_ratio_celebrity/public/p45590.jpg', 'medium': 'http://img1.doubanio.com/view/celebrity/s_ratio_celebrity/public/p45590.jpg'}, 'name': '乔治·坎塔里尼', 'id': '1000368'}], 'collect_count': 778658, 'original_title': 'La vita è bella', 'subtype': 'movie', 'directors': [{'alt': 'https://movie.douban.com/celebrity/1041004/', 'avatars': {'small': 'http://img1.doubanio.com/view/celebrity/s_ratio_celebrity/public/p26764.jpg', 'large': 'http://img1.doubanio.com/view/celebrity/s_ratio_celebrity/public/p26764.jpg', 'medium': 'http://img1.doubanio.com/view/celebrity/s_ratio_celebrity/public/p26764.jpg'}, 'name': '罗伯托·贝尼尼', 'id': '1041004'}], 'year': '1997', 'images': {'small': 'http://img1.doubanio.com/view/photo/s_ratio_poster/public/p510861873.jpg', 'large': 'http://img1.doubanio.com/view/photo/s_ratio_poster/public/p510861873.jpg', 'medium': 'http://img1.doubanio.com/view/photo/s_ratio_poster/public/p510861873.jpg'}, 'alt': 'https://movie.douban.com/subject/1292063/', 'id': '1292063'}, {'rating': {'max': 10, 'average': 9.3, 'stars': '50', 'min': 0}, 'genres': ['剧情', '爱情', '灾难'], 'title': '泰坦尼克号', 'casts': [{'alt': 'https://movie.douban.com/celebrity/1041029/', 'avatars': {'small': 'http://img1.doubanio.com/view/celebrity/s_ratio_celebrity/public/p814.jpg', 'large': 'http://img1.doubanio.com/view/celebrity/s_ratio_celebrity/public/p814.jpg', 'medium': 'http://img1.doubanio.com/view/celebrity/s_ratio_celebrity/public/p814.jpg'}, 'name': '莱昂纳多·迪卡普里奥', 'id': '1041029'}, {'alt': 'https://movie.douban.com/celebrity/1054446/', 'avatars': {'small': 'http://img3.doubanio.com/view/celebrity/s_ratio_celebrity/public/p53358.jpg', 'large': 'http://img3.doubanio.com/view/celebrity/s_ratio_celebrity/public/p53358.jpg', 'medium': 'http://img3.doubanio.com/view/celebrity/s_ratio_celebrity/public/p53358.jpg'}, 'name': '凯特·温丝莱特', 'id': '1054446'}, {'alt': 'https://movie.douban.com/celebrity/1031864/', 'avatars': {'small': 'http://img3.doubanio.com/view/celebrity/s_ratio_celebrity/public/p45186.jpg', 'large': 'http://img3.doubanio.com/view/celebrity/s_ratio_celebrity/public/p45186.jpg', 'medium': 'http://img3.doubanio.com/view/celebrity/s_ratio_celebrity/public/p45186.jpg'}, 'name': '比利·赞恩', 'id': '1031864'}], 'collect_count': 1372888, 'original_title': 'Titanic', 'subtype': 'movie', 'directors': [{'alt': 'https://movie.douban.com/celebrity/1022571/', 'avatars': {'small': 'http://img1.doubanio.com/view/celebrity/s_ratio_celebrity/public/p33715.jpg', 'large': 'http://img1.doubanio.com/view/celebrity/s_ratio_celebrity/public/p33715.jpg', 'medium': 'http://img1.doubanio.com/view/celebrity/s_ratio_celebrity/public/p33715.jpg'}, 'name': '詹姆斯·卡梅隆', 'id': '1022571'}], 'year': '1997', 'images': {'small': 'http://img1.doubanio.com/view/photo/s_ratio_poster/public/p457760035.jpg', 'large': 'http://img1.doubanio.com/view/photo/s_ratio_poster/public/p457760035.jpg', 'medium': 'http://img1.doubanio.com/view/photo/s_ratio_poster/public/p457760035.jpg'}, 'alt': 'https://movie.douban.com/subject/1292722/', 'id': '1292722'}, {'rating': {'max': 10, 'average': 9.3, 'stars': '50', 'min': 0}, 'genres': ['剧情', '动画', '奇幻'], 'title': '千与千寻', 'casts': [{'alt': 'https://movie.douban.com/celebrity/1023337/', 'avatars': {'small': 'http://img1.doubanio.com/view/celebrity/s_ratio_celebrity/public/p1463193210.13.jpg', 'large': 'http://img1.doubanio.com/view/celebrity/s_ratio_celebrity/public/p1463193210.13.jpg', 'medium': 'http://img1.doubanio.com/view/celebrity/s_ratio_celebrity/public/p1463193210.13.jpg'}, 'name': '柊瑠美', 'id': '1023337'}, {'alt': 'https://movie.douban.com/celebrity/1005438/', 'avatars': {'small': 'http://img3.doubanio.com/view/celebrity/s_ratio_celebrity/public/p44986.jpg', 'large': 'http://img3.doubanio.com/view/celebrity/s_ratio_celebrity/public/p44986.jpg', 'medium': 'http://img3.doubanio.com/view/celebrity/s_ratio_celebrity/public/p44986.jpg'}, 'name': '入野自由', 'id': '1005438'}, {'alt': 'https://movie.douban.com/celebrity/1045797/', 'avatars': {'small': 'http://img1.doubanio.com/view/celebrity/s_ratio_celebrity/public/p1376151005.51.jpg', 'large': 'http://img1.doubanio.com/view/celebrity/s_ratio_celebrity/public/p1376151005.51.jpg', 'medium': 'http://img1.doubanio.com/view/celebrity/s_ratio_celebrity/public/p1376151005.51.jpg'}, 'name': '夏木真理', 'id': '1045797'}], 'collect_count': 1263257, 'original_title': '千と千尋の神隠し', 'subtype': 'movie', 'directors': [{'alt': 'https://movie.douban.com/celebrity/1054439/', 'avatars': {'small': 'http://img3.doubanio.com/view/celebrity/s_ratio_celebrity/public/p616.jpg', 'large': 'http://img3.doubanio.com/view/celebrity/s_ratio_celebrity/public/p616.jpg', 'medium': 'http://img3.doubanio.com/view/celebrity/s_ratio_celebrity/public/p616.jpg'}, 'name': '宫崎骏', 'id': '1054439'}], 'year': '2001', 'images': {'small': 'http://img1.doubanio.com/view/photo/s_ratio_poster/public/p1606727862.jpg', 'large': 'http://img1.doubanio.com/view/photo/s_ratio_poster/public/p1606727862.jpg', 'medium': 'http://img1.doubanio.com/view/photo/s_ratio_poster/public/p1606727862.jpg'}, 'alt': 'https://movie.douban.com/subject/1291561/', 'id': '1291561'}, {'rating': {'max': 10, 'average': 9.5, 'stars': '50', 'min': 0}, 'genres': ['剧情', '历史', '战争'], 'title': '辛德勒的名单', 'casts': [{'alt': 'https://movie.douban.com/celebrity/1031220/', 'avatars': {'small': 'http://img3.doubanio.com/view/celebrity/s_ratio_celebrity/public/p44906.jpg', 'large': 'http://img3.doubanio.com/view/celebrity/s_ratio_celebrity/public/p44906.jpg', 'medium': 'http://img3.doubanio.com/view/celebrity/s_ratio_celebrity/public/p44906.jpg'}, 'name': '连姆·尼森', 'id': '1031220'}, {'alt': 'https://movie.douban.com/celebrity/1054393/', 'avatars': {'small': 'http://img3.doubanio.com/view/celebrity/s_ratio_celebrity/public/p1374649659.58.jpg', 'large': 'http://img3.doubanio.com/view/celebrity/s_ratio_celebrity/public/p1374649659.58.jpg', 'medium': 'http://img3.doubanio.com/view/celebrity/s_ratio_celebrity/public/p1374649659.58.jpg'}, 'name': '本·金斯利', 'id': '1054393'}, {'alt': 'https://movie.douban.com/celebrity/1006956/', 'avatars': {'small': 'http://img1.doubanio.com/view/celebrity/s_ratio_celebrity/public/p28941.jpg', 'large': 'http://img1.doubanio.com/view/celebrity/s_ratio_celebrity/public/p28941.jpg', 'medium': 'http://img1.doubanio.com/view/celebrity/s_ratio_celebrity/public/p28941.jpg'}, 'name': '拉尔夫·费因斯', 'id': '1006956'}], 'collect_count': 725172, 'original_title': \"Schindler's List\", 'subtype': 'movie', 'directors': [{'alt': 'https://movie.douban.com/celebrity/1054440/', 'avatars': {'small': 'http://img1.doubanio.com/view/celebrity/s_ratio_celebrity/public/p34602.jpg', 'large': 'http://img1.doubanio.com/view/celebrity/s_ratio_celebrity/public/p34602.jpg', 'medium': 'http://img1.doubanio.com/view/celebrity/s_ratio_celebrity/public/p34602.jpg'}, 'name': '史蒂文·斯皮尔伯格', 'id': '1054440'}], 'year': '1993', 'images': {'small': 'http://img1.doubanio.com/view/photo/s_ratio_poster/public/p492406163.jpg', 'large': 'http://img1.doubanio.com/view/photo/s_ratio_poster/public/p492406163.jpg', 'medium': 'http://img1.doubanio.com/view/photo/s_ratio_poster/public/p492406163.jpg'}, 'alt': 'https://movie.douban.com/subject/1295124/', 'id': '1295124'}, {'rating': {'max': 10, 'average': 9.3, 'stars': '50', 'min': 0}, 'genres': ['剧情', '科幻', '悬疑'], 'title': '盗梦空间', 'casts': [{'alt': 'https://movie.douban.com/celebrity/1041029/', 'avatars': {'small': 'http://img1.doubanio.com/view/celebrity/s_ratio_celebrity/public/p814.jpg', 'large': 'http://img1.doubanio.com/view/celebrity/s_ratio_celebrity/public/p814.jpg', 'medium': 'http://img1.doubanio.com/view/celebrity/s_ratio_celebrity/public/p814.jpg'}, 'name': '莱昂纳多·迪卡普里奥', 'id': '1041029'}, {'alt': 'https://movie.douban.com/celebrity/1101703/', 'avatars': {'small': 'http://img3.doubanio.com/view/celebrity/s_ratio_celebrity/public/p3517.jpg', 'large': 'http://img3.doubanio.com/view/celebrity/s_ratio_celebrity/public/p3517.jpg', 'medium': 'http://img3.doubanio.com/view/celebrity/s_ratio_celebrity/public/p3517.jpg'}, 'name': '约瑟夫·高登-莱维特', 'id': '1101703'}, {'alt': 'https://movie.douban.com/celebrity/1012520/', 'avatars': {'small': 'http://img3.doubanio.com/view/celebrity/s_ratio_celebrity/public/p118.jpg', 'large': 'http://img3.doubanio.com/view/celebrity/s_ratio_celebrity/public/p118.jpg', 'medium': 'http://img3.doubanio.com/view/celebrity/s_ratio_celebrity/public/p118.jpg'}, 'name': '艾伦·佩吉', 'id': '1012520'}], 'collect_count': 1495410, 'original_title': 'Inception', 'subtype': 'movie', 'directors': [{'alt': 'https://movie.douban.com/celebrity/1054524/', 'avatars': {'small': 'http://img1.doubanio.com/view/celebrity/s_ratio_celebrity/public/p673.jpg', 'large': 'http://img1.doubanio.com/view/celebrity/s_ratio_celebrity/public/p673.jpg', 'medium': 'http://img1.doubanio.com/view/celebrity/s_ratio_celebrity/public/p673.jpg'}, 'name': '克里斯托弗·诺兰', 'id': '1054524'}], 'year': '2010', 'images': {'small': 'http://img1.doubanio.com/view/photo/s_ratio_poster/public/p513344864.jpg', 'large': 'http://img1.doubanio.com/view/photo/s_ratio_poster/public/p513344864.jpg', 'medium': 'http://img1.doubanio.com/view/photo/s_ratio_poster/public/p513344864.jpg'}, 'alt': 'https://movie.douban.com/subject/3541415/', 'id': '3541415'}, {'rating': {'max': 10, 'average': 9.3, 'stars': '50', 'min': 0}, 'genres': ['剧情'], 'title': '忠犬八公的故事', 'casts': [{'alt': 'https://movie.douban.com/celebrity/1040997/', 'avatars': {'small': 'http://img1.doubanio.com/view/celebrity/s_ratio_celebrity/public/p33013.jpg', 'large': 'http://img1.doubanio.com/view/celebrity/s_ratio_celebrity/public/p33013.jpg', 'medium': 'http://img1.doubanio.com/view/celebrity/s_ratio_celebrity/public/p33013.jpg'}, 'name': '理查·基尔', 'id': '1040997'}, {'alt': 'https://movie.douban.com/celebrity/1049499/', 'avatars': {'small': 'http://img1.doubanio.com/view/celebrity/s_ratio_celebrity/public/p5502.jpg', 'large': 'http://img1.doubanio.com/view/celebrity/s_ratio_celebrity/public/p5502.jpg', 'medium': 'http://img1.doubanio.com/view/celebrity/s_ratio_celebrity/public/p5502.jpg'}, 'name': '萨拉·罗默尔', 'id': '1049499'}, {'alt': 'https://movie.douban.com/celebrity/1025215/', 'avatars': {'small': 'http://img1.doubanio.com/view/celebrity/s_ratio_celebrity/public/p17520.jpg', 'large': 'http://img1.doubanio.com/view/celebrity/s_ratio_celebrity/public/p17520.jpg', 'medium': 'http://img1.doubanio.com/view/celebrity/s_ratio_celebrity/public/p17520.jpg'}, 'name': '琼·艾伦', 'id': '1025215'}], 'collect_count': 1083236, 'original_title': \"Hachi: A Dog's Tale\", 'subtype': 'movie', 'directors': [{'alt': 'https://movie.douban.com/celebrity/1018014/', 'avatars': {'small': 'http://img1.doubanio.com/view/celebrity/s_ratio_celebrity/public/p4333.jpg', 'large': 'http://img1.doubanio.com/view/celebrity/s_ratio_celebrity/public/p4333.jpg', 'medium': 'http://img1.doubanio.com/view/celebrity/s_ratio_celebrity/public/p4333.jpg'}, 'name': '拉斯·霍尔斯道姆', 'id': '1018014'}], 'year': '2009', 'images': {'small': 'http://img3.doubanio.com/view/photo/s_ratio_poster/public/p524964016.jpg', 'large': 'http://img3.doubanio.com/view/photo/s_ratio_poster/public/p524964016.jpg', 'medium': 'http://img3.doubanio.com/view/photo/s_ratio_poster/public/p524964016.jpg'}, 'alt': 'https://movie.douban.com/subject/3011091/', 'id': '3011091'}, {'rating': {'max': 10, 'average': 9.3, 'stars': '50', 'min': 0}, 'genres': ['爱情', '科幻', '动画'], 'title': '机器人总动员', 'casts': [{'alt': 'https://movie.douban.com/celebrity/1009535/', 'avatars': {'small': 'http://img3.doubanio.com/view/celebrity/s_ratio_celebrity/public/p13028.jpg', 'large': 'http://img3.doubanio.com/view/celebrity/s_ratio_celebrity/public/p13028.jpg', 'medium': 'http://img3.doubanio.com/view/celebrity/s_ratio_celebrity/public/p13028.jpg'}, 'name': '本·贝尔特', 'id': '1009535'}, {'alt': 'https://movie.douban.com/celebrity/1000389/', 'avatars': {'small': 'http://img1.doubanio.com/view/celebrity/s_ratio_celebrity/public/p1519794715.93.jpg', 'large': 'http://img1.doubanio.com/view/celebrity/s_ratio_celebrity/public/p1519794715.93.jpg', 'medium': 'http://img1.doubanio.com/view/celebrity/s_ratio_celebrity/public/p1519794715.93.jpg'}, 'name': '艾丽莎·奈特', 'id': '1000389'}, {'alt': 'https://movie.douban.com/celebrity/1018022/', 'avatars': {'small': 'http://img3.doubanio.com/view/celebrity/s_ratio_celebrity/public/p31068.jpg', 'large': 'http://img3.doubanio.com/view/celebrity/s_ratio_celebrity/public/p31068.jpg', 'medium': 'http://img3.doubanio.com/view/celebrity/s_ratio_celebrity/public/p31068.jpg'}, 'name': '杰夫·格尔林', 'id': '1018022'}], 'collect_count': 952565, 'original_title': 'WALL·E', 'subtype': 'movie', 'directors': [{'alt': 'https://movie.douban.com/celebrity/1036450/', 'avatars': {'small': 'http://img3.doubanio.com/view/celebrity/s_ratio_celebrity/public/p1467359656.96.jpg', 'large': 'http://img3.doubanio.com/view/celebrity/s_ratio_celebrity/public/p1467359656.96.jpg', 'medium': 'http://img3.doubanio.com/view/celebrity/s_ratio_celebrity/public/p1467359656.96.jpg'}, 'name': '安德鲁·斯坦顿', 'id': '1036450'}], 'year': '2008', 'images': {'small': 'http://img1.doubanio.com/view/photo/s_ratio_poster/public/p1461851991.jpg', 'large': 'http://img1.doubanio.com/view/photo/s_ratio_poster/public/p1461851991.jpg', 'medium': 'http://img1.doubanio.com/view/photo/s_ratio_poster/public/p1461851991.jpg'}, 'alt': 'https://movie.douban.com/subject/2131459/', 'id': '2131459'}, {'rating': {'max': 10, 'average': 9.2, 'stars': '45', 'min': 0}, 'genres': ['剧情', '喜剧', '爱情'], 'title': '三傻大闹宝莱坞', 'casts': [{'alt': 'https://movie.douban.com/celebrity/1031931/', 'avatars': {'small': 'http://img3.doubanio.com/view/celebrity/s_ratio_celebrity/public/p13628.jpg', 'large': 'http://img3.doubanio.com/view/celebrity/s_ratio_celebrity/public/p13628.jpg', 'medium': 'http://img3.doubanio.com/view/celebrity/s_ratio_celebrity/public/p13628.jpg'}, 'name': '阿米尔·汗', 'id': '1031931'}, {'alt': 'https://movie.douban.com/celebrity/1049635/', 'avatars': {'small': 'http://img3.doubanio.com/view/celebrity/s_ratio_celebrity/public/p5568.jpg', 'large': 'http://img3.doubanio.com/view/celebrity/s_ratio_celebrity/public/p5568.jpg', 'medium': 'http://img3.doubanio.com/view/celebrity/s_ratio_celebrity/public/p5568.jpg'}, 'name': '卡琳娜·卡普尔', 'id': '1049635'}, {'alt': 'https://movie.douban.com/celebrity/1018290/', 'avatars': {'small': 'http://img1.doubanio.com/view/celebrity/s_ratio_celebrity/public/p5651.jpg', 'large': 'http://img1.doubanio.com/view/celebrity/s_ratio_celebrity/public/p5651.jpg', 'medium': 'http://img1.doubanio.com/view/celebrity/s_ratio_celebrity/public/p5651.jpg'}, 'name': '马达范', 'id': '1018290'}], 'collect_count': 1257107, 'original_title': '3 Idiots', 'subtype': 'movie', 'directors': [{'alt': 'https://movie.douban.com/celebrity/1286677/', 'avatars': {'small': 'http://img3.doubanio.com/view/celebrity/s_ratio_celebrity/public/p16549.jpg', 'large': 'http://img3.doubanio.com/view/celebrity/s_ratio_celebrity/public/p16549.jpg', 'medium': 'http://img3.doubanio.com/view/celebrity/s_ratio_celebrity/public/p16549.jpg'}, 'name': '拉吉库马尔·希拉尼', 'id': '1286677'}], 'year': '2009', 'images': {'small': 'http://img1.doubanio.com/view/photo/s_ratio_poster/public/p579729551.jpg', 'large': 'http://img1.doubanio.com/view/photo/s_ratio_poster/public/p579729551.jpg', 'medium': 'http://img1.doubanio.com/view/photo/s_ratio_poster/public/p579729551.jpg'}, 'alt': 'https://movie.douban.com/subject/3793023/', 'id': '3793023'}, {'rating': {'max': 10, 'average': 9.2, 'stars': '50', 'min': 0}, 'genres': ['剧情', '音乐'], 'title': '海上钢琴师', 'casts': [{'alt': 'https://movie.douban.com/celebrity/1025176/', 'avatars': {'small': 'http://img1.doubanio.com/view/celebrity/s_ratio_celebrity/public/p6281.jpg', 'large': 'http://img1.doubanio.com/view/celebrity/s_ratio_celebrity/public/p6281.jpg', 'medium': 'http://img1.doubanio.com/view/celebrity/s_ratio_celebrity/public/p6281.jpg'}, 'name': '蒂姆·罗斯', 'id': '1025176'}, {'alt': 'https://movie.douban.com/celebrity/1010659/', 'avatars': {'small': 'http://img3.doubanio.com/view/celebrity/s_ratio_celebrity/public/p1355152571.6.jpg', 'large': 'http://img3.doubanio.com/view/celebrity/s_ratio_celebrity/public/p1355152571.6.jpg', 'medium': 'http://img3.doubanio.com/view/celebrity/s_ratio_celebrity/public/p1355152571.6.jpg'}, 'name': '普路特·泰勒·文斯', 'id': '1010659'}, {'alt': 'https://movie.douban.com/celebrity/1027407/', 'avatars': {'small': 'http://img1.doubanio.com/view/celebrity/s_ratio_celebrity/public/p12333.jpg', 'large': 'http://img1.doubanio.com/view/celebrity/s_ratio_celebrity/public/p12333.jpg', 'medium': 'http://img1.doubanio.com/view/celebrity/s_ratio_celebrity/public/p12333.jpg'}, 'name': '比尔·努恩', 'id': '1027407'}], 'collect_count': 1062029, 'original_title': \"La leggenda del pianista sull'oceano\", 'subtype': 'movie', 'directors': [{'alt': 'https://movie.douban.com/celebrity/1018983/', 'avatars': {'small': 'http://img1.doubanio.com/view/celebrity/s_ratio_celebrity/public/p195.jpg', 'large': 'http://img1.doubanio.com/view/celebrity/s_ratio_celebrity/public/p195.jpg', 'medium': 'http://img1.doubanio.com/view/celebrity/s_ratio_celebrity/public/p195.jpg'}, 'name': '朱塞佩·托纳多雷', 'id': '1018983'}], 'year': '1998', 'images': {'small': 'http://img3.doubanio.com/view/photo/s_ratio_poster/public/p511146807.jpg', 'large': 'http://img3.doubanio.com/view/photo/s_ratio_poster/public/p511146807.jpg', 'medium': 'http://img3.doubanio.com/view/photo/s_ratio_poster/public/p511146807.jpg'}, 'alt': 'https://movie.douban.com/subject/1292001/', 'id': '1292001'}, {'rating': {'max': 10, 'average': 9.3, 'stars': '50', 'min': 0}, 'genres': ['剧情', '音乐'], 'title': '放牛班的春天', 'casts': [{'alt': 'https://movie.douban.com/celebrity/1048281/', 'avatars': {'small': 'http://img1.doubanio.com/view/celebrity/s_ratio_celebrity/public/p3363.jpg', 'large': 'http://img1.doubanio.com/view/celebrity/s_ratio_celebrity/public/p3363.jpg', 'medium': 'http://img1.doubanio.com/view/celebrity/s_ratio_celebrity/public/p3363.jpg'}, 'name': '热拉尔·朱尼奥', 'id': '1048281'}, {'alt': 'https://movie.douban.com/celebrity/1054351/', 'avatars': {'small': 'http://img3.doubanio.com/view/celebrity/s_ratio_celebrity/public/p9329.jpg', 'large': 'http://img3.doubanio.com/view/celebrity/s_ratio_celebrity/public/p9329.jpg', 'medium': 'http://img3.doubanio.com/view/celebrity/s_ratio_celebrity/public/p9329.jpg'}, 'name': '弗朗索瓦·贝莱昂', 'id': '1054351'}, {'alt': 'https://movie.douban.com/celebrity/1000491/', 'avatars': {'small': 'http://img1.doubanio.com/view/celebrity/s_ratio_celebrity/public/p44424.jpg', 'large': 'http://img1.doubanio.com/view/celebrity/s_ratio_celebrity/public/p44424.jpg', 'medium': 'http://img1.doubanio.com/view/celebrity/s_ratio_celebrity/public/p44424.jpg'}, 'name': '凯德·麦拉德', 'id': '1000491'}], 'collect_count': 952740, 'original_title': 'Les choristes', 'subtype': 'movie', 'directors': [{'alt': 'https://movie.douban.com/celebrity/1277959/', 'avatars': {'small': 'http://img1.doubanio.com/view/celebrity/s_ratio_celebrity/public/p24744.jpg', 'large': 'http://img1.doubanio.com/view/celebrity/s_ratio_celebrity/public/p24744.jpg', 'medium': 'http://img1.doubanio.com/view/celebrity/s_ratio_celebrity/public/p24744.jpg'}, 'name': '克里斯托夫·巴拉蒂', 'id': '1277959'}], 'year': '2004', 'images': {'small': 'http://img1.doubanio.com/view/photo/s_ratio_poster/public/p1910824951.jpg', 'large': 'http://img1.doubanio.com/view/photo/s_ratio_poster/public/p1910824951.jpg', 'medium': 'http://img1.doubanio.com/view/photo/s_ratio_poster/public/p1910824951.jpg'}, 'alt': 'https://movie.douban.com/subject/1291549/', 'id': '1291549'}, {'rating': {'max': 10, 'average': 9.2, 'stars': '45', 'min': 0}, 'genres': ['剧情', '科幻'], 'title': '楚门的世界', 'casts': [{'alt': 'https://movie.douban.com/celebrity/1054438/', 'avatars': {'small': 'http://img1.doubanio.com/view/celebrity/s_ratio_celebrity/public/p615.jpg', 'large': 'http://img1.doubanio.com/view/celebrity/s_ratio_celebrity/public/p615.jpg', 'medium': 'http://img1.doubanio.com/view/celebrity/s_ratio_celebrity/public/p615.jpg'}, 'name': '金·凯瑞', 'id': '1054438'}, {'alt': 'https://movie.douban.com/celebrity/1053572/', 'avatars': {'small': 'http://img3.doubanio.com/view/celebrity/s_ratio_celebrity/public/p516.jpg', 'large': 'http://img3.doubanio.com/view/celebrity/s_ratio_celebrity/public/p516.jpg', 'medium': 'http://img3.doubanio.com/view/celebrity/s_ratio_celebrity/public/p516.jpg'}, 'name': '劳拉·琳妮', 'id': '1053572'}, {'alt': 'https://movie.douban.com/celebrity/1048024/', 'avatars': {'small': 'http://img3.doubanio.com/view/celebrity/s_ratio_celebrity/public/p1485163747.76.jpg', 'large': 'http://img3.doubanio.com/view/celebrity/s_ratio_celebrity/public/p1485163747.76.jpg', 'medium': 'http://img3.doubanio.com/view/celebrity/s_ratio_celebrity/public/p1485163747.76.jpg'}, 'name': '艾德·哈里斯', 'id': '1048024'}], 'collect_count': 982531, 'original_title': 'The Truman Show', 'subtype': 'movie', 'directors': [{'alt': 'https://movie.douban.com/celebrity/1022721/', 'avatars': {'small': 'http://img1.doubanio.com/view/celebrity/s_ratio_celebrity/public/p4360.jpg', 'large': 'http://img1.doubanio.com/view/celebrity/s_ratio_celebrity/public/p4360.jpg', 'medium': 'http://img1.doubanio.com/view/celebrity/s_ratio_celebrity/public/p4360.jpg'}, 'name': '彼得·威尔', 'id': '1022721'}], 'year': '1998', 'images': {'small': 'http://img1.doubanio.com/view/photo/s_ratio_poster/public/p479682972.jpg', 'large': 'http://img1.doubanio.com/view/photo/s_ratio_poster/public/p479682972.jpg', 'medium': 'http://img1.doubanio.com/view/photo/s_ratio_poster/public/p479682972.jpg'}, 'alt': 'https://movie.douban.com/subject/1292064/', 'id': '1292064'}, {'rating': {'max': 10, 'average': 9.2, 'stars': '45', 'min': 0}, 'genres': ['喜剧', '爱情', '奇幻'], 'title': '大话西游之大圣娶亲', 'casts': [{'alt': 'https://movie.douban.com/celebrity/1048026/', 'avatars': {'small': 'http://img1.doubanio.com/view/celebrity/s_ratio_celebrity/public/p47421.jpg', 'large': 'http://img1.doubanio.com/view/celebrity/s_ratio_celebrity/public/p47421.jpg', 'medium': 'http://img1.doubanio.com/view/celebrity/s_ratio_celebrity/public/p47421.jpg'}, 'name': '周星驰', 'id': '1048026'}, {'alt': 'https://movie.douban.com/celebrity/1016771/', 'avatars': {'small': 'http://img1.doubanio.com/view/celebrity/s_ratio_celebrity/public/p45481.jpg', 'large': 'http://img1.doubanio.com/view/celebrity/s_ratio_celebrity/public/p45481.jpg', 'medium': 'http://img1.doubanio.com/view/celebrity/s_ratio_celebrity/public/p45481.jpg'}, 'name': '吴孟达', 'id': '1016771'}, {'alt': 'https://movie.douban.com/celebrity/1041734/', 'avatars': {'small': 'http://img3.doubanio.com/view/celebrity/s_ratio_celebrity/public/p49237.jpg', 'large': 'http://img3.doubanio.com/view/celebrity/s_ratio_celebrity/public/p49237.jpg', 'medium': 'http://img3.doubanio.com/view/celebrity/s_ratio_celebrity/public/p49237.jpg'}, 'name': '朱茵', 'id': '1041734'}], 'collect_count': 999499, 'original_title': '西遊記大結局之仙履奇緣', 'subtype': 'movie', 'directors': [{'alt': 'https://movie.douban.com/celebrity/1274431/', 'avatars': {'small': 'http://img1.doubanio.com/view/celebrity/s_ratio_celebrity/public/p45374.jpg', 'large': 'http://img1.doubanio.com/view/celebrity/s_ratio_celebrity/public/p45374.jpg', 'medium': 'http://img1.doubanio.com/view/celebrity/s_ratio_celebrity/public/p45374.jpg'}, 'name': '刘镇伟', 'id': '1274431'}], 'year': '1995', 'images': {'small': 'http://img3.doubanio.com/view/photo/s_ratio_poster/public/p2455050536.jpg', 'large': 'http://img3.doubanio.com/view/photo/s_ratio_poster/public/p2455050536.jpg', 'medium': 'http://img3.doubanio.com/view/photo/s_ratio_poster/public/p2455050536.jpg'}, 'alt': 'https://movie.douban.com/subject/1292213/', 'id': '1292213'}, {'rating': {'max': 10, 'average': 9.2, 'stars': '50', 'min': 0}, 'genres': ['剧情', '科幻', '冒险'], 'title': '星际穿越', 'casts': [{'alt': 'https://movie.douban.com/celebrity/1040511/', 'avatars': {'small': 'http://img1.doubanio.com/view/celebrity/s_ratio_celebrity/public/p1392653727.04.jpg', 'large': 'http://img1.doubanio.com/view/celebrity/s_ratio_celebrity/public/p1392653727.04.jpg', 'medium': 'http://img1.doubanio.com/view/celebrity/s_ratio_celebrity/public/p1392653727.04.jpg'}, 'name': '马修·麦康纳', 'id': '1040511'}, {'alt': 'https://movie.douban.com/celebrity/1048027/', 'avatars': {'small': 'http://img3.doubanio.com/view/celebrity/s_ratio_celebrity/public/p10467.jpg', 'large': 'http://img3.doubanio.com/view/celebrity/s_ratio_celebrity/public/p10467.jpg', 'medium': 'http://img3.doubanio.com/view/celebrity/s_ratio_celebrity/public/p10467.jpg'}, 'name': '安妮·海瑟薇', 'id': '1048027'}, {'alt': 'https://movie.douban.com/celebrity/1000225/', 'avatars': {'small': 'http://img3.doubanio.com/view/celebrity/s_ratio_celebrity/public/p54076.jpg', 'large': 'http://img3.doubanio.com/view/celebrity/s_ratio_celebrity/public/p54076.jpg', 'medium': 'http://img3.doubanio.com/view/celebrity/s_ratio_celebrity/public/p54076.jpg'}, 'name': '杰西卡·查斯坦', 'id': '1000225'}], 'collect_count': 988796, 'original_title': 'Interstellar', 'subtype': 'movie', 'directors': [{'alt': 'https://movie.douban.com/celebrity/1054524/', 'avatars': {'small': 'http://img1.doubanio.com/view/celebrity/s_ratio_celebrity/public/p673.jpg', 'large': 'http://img1.doubanio.com/view/celebrity/s_ratio_celebrity/public/p673.jpg', 'medium': 'http://img1.doubanio.com/view/celebrity/s_ratio_celebrity/public/p673.jpg'}, 'name': '克里斯托弗·诺兰', 'id': '1054524'}], 'year': '2014', 'images': {'small': 'http://img1.doubanio.com/view/photo/s_ratio_poster/public/p2206088801.jpg', 'large': 'http://img1.doubanio.com/view/photo/s_ratio_poster/public/p2206088801.jpg', 'medium': 'http://img1.doubanio.com/view/photo/s_ratio_poster/public/p2206088801.jpg'}, 'alt': 'https://movie.douban.com/subject/1889243/', 'id': '1889243'}, {'rating': {'max': 10, 'average': 9.2, 'stars': '45', 'min': 0}, 'genres': ['动画', '奇幻', '冒险'], 'title': '龙猫', 'casts': [{'alt': 'https://movie.douban.com/celebrity/1019382/', 'avatars': {'small': 'http://img1.doubanio.com/view/celebrity/s_ratio_celebrity/public/p1455201170.02.jpg', 'large': 'http://img1.doubanio.com/view/celebrity/s_ratio_celebrity/public/p1455201170.02.jpg', 'medium': 'http://img1.doubanio.com/view/celebrity/s_ratio_celebrity/public/p1455201170.02.jpg'}, 'name': '日高法子', 'id': '1019382'}, {'alt': 'https://movie.douban.com/celebrity/1025582/', 'avatars': {'small': 'http://img3.doubanio.com/view/celebrity/s_ratio_celebrity/public/p29537.jpg', 'large': 'http://img3.doubanio.com/view/celebrity/s_ratio_celebrity/public/p29537.jpg', 'medium': 'http://img3.doubanio.com/view/celebrity/s_ratio_celebrity/public/p29537.jpg'}, 'name': '坂本千夏', 'id': '1025582'}, {'alt': 'https://movie.douban.com/celebrity/1379738/', 'avatars': {'small': 'http://img1.doubanio.com/view/celebrity/s_ratio_celebrity/public/p1503457262.72.jpg', 'large': 'http://img1.doubanio.com/view/celebrity/s_ratio_celebrity/public/p1503457262.72.jpg', 'medium': 'http://img1.doubanio.com/view/celebrity/s_ratio_celebrity/public/p1503457262.72.jpg'}, 'name': '糸井重里', 'id': '1379738'}], 'collect_count': 894110, 'original_title': 'となりのトトロ', 'subtype': 'movie', 'directors': [{'alt': 'https://movie.douban.com/celebrity/1054439/', 'avatars': {'small': 'http://img3.doubanio.com/view/celebrity/s_ratio_celebrity/public/p616.jpg', 'large': 'http://img3.doubanio.com/view/celebrity/s_ratio_celebrity/public/p616.jpg', 'medium': 'http://img3.doubanio.com/view/celebrity/s_ratio_celebrity/public/p616.jpg'}, 'name': '宫崎骏', 'id': '1054439'}], 'year': '1988', 'images': {'small': 'http://img3.doubanio.com/view/photo/s_ratio_poster/public/p2540924496.jpg', 'large': 'http://img3.doubanio.com/view/photo/s_ratio_poster/public/p2540924496.jpg', 'medium': 'http://img3.doubanio.com/view/photo/s_ratio_poster/public/p2540924496.jpg'}, 'alt': 'https://movie.douban.com/subject/1291560/', 'id': '1291560'}, {'rating': {'max': 10, 'average': 9.2, 'stars': '50', 'min': 0}, 'genres': ['剧情', '犯罪'], 'title': '教父', 'casts': [{'alt': 'https://movie.douban.com/celebrity/1041025/', 'avatars': {'small': 'http://img1.doubanio.com/view/celebrity/s_ratio_celebrity/public/p45035.jpg', 'large': 'http://img1.doubanio.com/view/celebrity/s_ratio_celebrity/public/p45035.jpg', 'medium': 'http://img1.doubanio.com/view/celebrity/s_ratio_celebrity/public/p45035.jpg'}, 'name': '马龙·白兰度', 'id': '1041025'}, {'alt': 'https://movie.douban.com/celebrity/1054451/', 'avatars': {'small': 'http://img1.doubanio.com/view/celebrity/s_ratio_celebrity/public/p645.jpg', 'large': 'http://img1.doubanio.com/view/celebrity/s_ratio_celebrity/public/p645.jpg', 'medium': 'http://img1.doubanio.com/view/celebrity/s_ratio_celebrity/public/p645.jpg'}, 'name': '阿尔·帕西诺', 'id': '1054451'}, {'alt': 'https://movie.douban.com/celebrity/1000050/', 'avatars': {'small': 'http://img1.doubanio.com/view/celebrity/s_ratio_celebrity/public/p53524.jpg', 'large': 'http://img1.doubanio.com/view/celebrity/s_ratio_celebrity/public/p53524.jpg', 'medium': 'http://img1.doubanio.com/view/celebrity/s_ratio_celebrity/public/p53524.jpg'}, 'name': '詹姆斯·肯恩', 'id': '1000050'}], 'collect_count': 639773, 'original_title': 'The Godfather', 'subtype': 'movie', 'directors': [{'alt': 'https://movie.douban.com/celebrity/1054419/', 'avatars': {'small': 'http://img1.doubanio.com/view/celebrity/s_ratio_celebrity/public/p592.jpg', 'large': 'http://img1.doubanio.com/view/celebrity/s_ratio_celebrity/public/p592.jpg', 'medium': 'http://img1.doubanio.com/view/celebrity/s_ratio_celebrity/public/p592.jpg'}, 'name': '弗朗西斯·福特·科波拉', 'id': '1054419'}], 'year': '1972', 'images': {'small': 'http://img1.doubanio.com/view/photo/s_ratio_poster/public/p1853232210.jpg', 'large': 'http://img1.doubanio.com/view/photo/s_ratio_poster/public/p1853232210.jpg', 'medium': 'http://img1.doubanio.com/view/photo/s_ratio_poster/public/p1853232210.jpg'}, 'alt': 'https://movie.douban.com/subject/1291841/', 'id': '1291841'}, {'rating': {'max': 10, 'average': 9.3, 'stars': '50', 'min': 0}, 'genres': ['剧情'], 'title': '熔炉', 'casts': [{'alt': 'https://movie.douban.com/celebrity/1011009/', 'avatars': {'small': 'http://img1.doubanio.com/view/celebrity/s_ratio_celebrity/public/p55195.jpg', 'large': 'http://img1.doubanio.com/view/celebrity/s_ratio_celebrity/public/p55195.jpg', 'medium': 'http://img1.doubanio.com/view/celebrity/s_ratio_celebrity/public/p55195.jpg'}, 'name': '孔侑', 'id': '1011009'}, {'alt': 'https://movie.douban.com/celebrity/1276062/', 'avatars': {'small': 'http://img3.doubanio.com/view/celebrity/s_ratio_celebrity/public/p1409765749.47.jpg', 'large': 'http://img3.doubanio.com/view/celebrity/s_ratio_celebrity/public/p1409765749.47.jpg', 'medium': 'http://img3.doubanio.com/view/celebrity/s_ratio_celebrity/public/p1409765749.47.jpg'}, 'name': '郑有美', 'id': '1276062'}, {'alt': 'https://movie.douban.com/celebrity/1331104/', 'avatars': {'small': 'http://img1.doubanio.com/view/celebrity/s_ratio_celebrity/public/p1393488191.45.jpg', 'large': 'http://img1.doubanio.com/view/celebrity/s_ratio_celebrity/public/p1393488191.45.jpg', 'medium': 'http://img1.doubanio.com/view/celebrity/s_ratio_celebrity/public/p1393488191.45.jpg'}, 'name': '金志映', 'id': '1331104'}], 'collect_count': 533221, 'original_title': '도가니', 'subtype': 'movie', 'directors': [{'alt': 'https://movie.douban.com/celebrity/1317274/', 'avatars': {'small': 'http://img3.doubanio.com/view/celebrity/s_ratio_celebrity/public/p52558.jpg', 'large': 'http://img3.doubanio.com/view/celebrity/s_ratio_celebrity/public/p52558.jpg', 'medium': 'http://img3.doubanio.com/view/celebrity/s_ratio_celebrity/public/p52558.jpg'}, 'name': '黄东赫', 'id': '1317274'}], 'year': '2011', 'images': {'small': 'http://img3.doubanio.com/view/photo/s_ratio_poster/public/p1363250216.jpg', 'large': 'http://img3.doubanio.com/view/photo/s_ratio_poster/public/p1363250216.jpg', 'medium': 'http://img3.doubanio.com/view/photo/s_ratio_poster/public/p1363250216.jpg'}, 'alt': 'https://movie.douban.com/subject/5912992/', 'id': '5912992'}, {'rating': {'max': 10, 'average': 9.1, 'stars': '45', 'min': 0}, 'genres': ['剧情', '犯罪', '悬疑'], 'title': '无间道', 'casts': [{'alt': 'https://movie.douban.com/celebrity/1054424/', 'avatars': {'small': 'http://img1.doubanio.com/view/celebrity/s_ratio_celebrity/public/p1378956633.91.jpg', 'large': 'http://img1.doubanio.com/view/celebrity/s_ratio_celebrity/public/p1378956633.91.jpg', 'medium': 'http://img1.doubanio.com/view/celebrity/s_ratio_celebrity/public/p1378956633.91.jpg'}, 'name': '刘德华', 'id': '1054424'}, {'alt': 'https://movie.douban.com/celebrity/1115918/', 'avatars': {'small': 'http://img1.doubanio.com/view/celebrity/s_ratio_celebrity/public/p33525.jpg', 'large': 'http://img1.doubanio.com/view/celebrity/s_ratio_celebrity/public/p33525.jpg', 'medium': 'http://img1.doubanio.com/view/celebrity/s_ratio_celebrity/public/p33525.jpg'}, 'name': '梁朝伟', 'id': '1115918'}, {'alt': 'https://movie.douban.com/celebrity/1050076/', 'avatars': {'small': 'http://img1.doubanio.com/view/celebrity/s_ratio_celebrity/public/p24841.jpg', 'large': 'http://img1.doubanio.com/view/celebrity/s_ratio_celebrity/public/p24841.jpg', 'medium': 'http://img1.doubanio.com/view/celebrity/s_ratio_celebrity/public/p24841.jpg'}, 'name': '黄秋生', 'id': '1050076'}], 'collect_count': 865015, 'original_title': '無間道', 'subtype': 'movie', 'directors': [{'alt': 'https://movie.douban.com/celebrity/1106979/', 'avatars': {'small': 'http://img3.doubanio.com/view/celebrity/s_ratio_celebrity/public/p1403267018.07.jpg', 'large': 'http://img3.doubanio.com/view/celebrity/s_ratio_celebrity/public/p1403267018.07.jpg', 'medium': 'http://img3.doubanio.com/view/celebrity/s_ratio_celebrity/public/p1403267018.07.jpg'}, 'name': '刘伟强', 'id': '1106979'}, {'alt': 'https://movie.douban.com/celebrity/1126158/', 'avatars': {'small': 'http://img3.doubanio.com/view/celebrity/s_ratio_celebrity/public/p3547.jpg', 'large': 'http://img3.doubanio.com/view/celebrity/s_ratio_celebrity/public/p3547.jpg', 'medium': 'http://img3.doubanio.com/view/celebrity/s_ratio_celebrity/public/p3547.jpg'}, 'name': '麦兆辉', 'id': '1126158'}], 'year': '2002', 'images': {'small': 'http://img3.doubanio.com/view/photo/s_ratio_poster/public/p2233971046.jpg', 'large': 'http://img3.doubanio.com/view/photo/s_ratio_poster/public/p2233971046.jpg', 'medium': 'http://img3.doubanio.com/view/photo/s_ratio_poster/public/p2233971046.jpg'}, 'alt': 'https://movie.douban.com/subject/1307914/', 'id': '1307914'}, {'rating': {'max': 10, 'average': 9.0, 'stars': '45', 'min': 0}, 'genres': ['剧情', '传记', '家庭'], 'title': '当幸福来敲门', 'casts': [{'alt': 'https://movie.douban.com/celebrity/1027138/', 'avatars': {'small': 'http://img1.doubanio.com/view/celebrity/s_ratio_celebrity/public/p31885.jpg', 'large': 'http://img1.doubanio.com/view/celebrity/s_ratio_celebrity/public/p31885.jpg', 'medium': 'http://img1.doubanio.com/view/celebrity/s_ratio_celebrity/public/p31885.jpg'}, 'name': '威尔·史密斯', 'id': '1027138'}, {'alt': 'https://movie.douban.com/celebrity/1010532/', 'avatars': {'small': 'http://img1.doubanio.com/view/celebrity/s_ratio_celebrity/public/p1519305434.22.jpg', 'large': 'http://img1.doubanio.com/view/celebrity/s_ratio_celebrity/public/p1519305434.22.jpg', 'medium': 'http://img1.doubanio.com/view/celebrity/s_ratio_celebrity/public/p1519305434.22.jpg'}, 'name': '贾登·史密斯', 'id': '1010532'}, {'alt': 'https://movie.douban.com/celebrity/1040513/', 'avatars': {'small': 'http://img3.doubanio.com/view/celebrity/s_ratio_celebrity/public/p1378018910.89.jpg', 'large': 'http://img3.doubanio.com/view/celebrity/s_ratio_celebrity/public/p1378018910.89.jpg', 'medium': 'http://img3.doubanio.com/view/celebrity/s_ratio_celebrity/public/p1378018910.89.jpg'}, 'name': '坦迪·牛顿', 'id': '1040513'}], 'collect_count': 1047350, 'original_title': 'The Pursuit of Happyness', 'subtype': 'movie', 'directors': [{'alt': 'https://movie.douban.com/celebrity/1045093/', 'avatars': {'small': 'http://img3.doubanio.com/view/celebrity/s_ratio_celebrity/public/p20409.jpg', 'large': 'http://img3.doubanio.com/view/celebrity/s_ratio_celebrity/public/p20409.jpg', 'medium': 'http://img3.doubanio.com/view/celebrity/s_ratio_celebrity/public/p20409.jpg'}, 'name': '加布里埃莱·穆奇诺', 'id': '1045093'}], 'year': '2006', 'images': {'small': 'http://img1.doubanio.com/view/photo/s_ratio_poster/public/p1312700744.jpg', 'large': 'http://img1.doubanio.com/view/photo/s_ratio_poster/public/p1312700744.jpg', 'medium': 'http://img1.doubanio.com/view/photo/s_ratio_poster/public/p1312700744.jpg'}, 'alt': 'https://movie.douban.com/subject/1849031/', 'id': '1849031'}, {'rating': {'max': 10, 'average': 9.2, 'stars': '45', 'min': 0}, 'genres': ['喜剧', '动画', '冒险'], 'title': '疯狂动物城', 'casts': [{'alt': 'https://movie.douban.com/celebrity/1017930/', 'avatars': {'small': 'http://img1.doubanio.com/view/celebrity/s_ratio_celebrity/public/p4815.jpg', 'large': 'http://img1.doubanio.com/view/celebrity/s_ratio_celebrity/public/p4815.jpg', 'medium': 'http://img1.doubanio.com/view/celebrity/s_ratio_celebrity/public/p4815.jpg'}, 'name': '金妮弗·古德温', 'id': '1017930'}, {'alt': 'https://movie.douban.com/celebrity/1013760/', 'avatars': {'small': 'http://img1.doubanio.com/view/celebrity/s_ratio_celebrity/public/p18772.jpg', 'large': 'http://img1.doubanio.com/view/celebrity/s_ratio_celebrity/public/p18772.jpg', 'medium': 'http://img1.doubanio.com/view/celebrity/s_ratio_celebrity/public/p18772.jpg'}, 'name': '杰森·贝特曼', 'id': '1013760'}, {'alt': 'https://movie.douban.com/celebrity/1049501/', 'avatars': {'small': 'http://img1.doubanio.com/view/celebrity/s_ratio_celebrity/public/p1410696282.74.jpg', 'large': 'http://img1.doubanio.com/view/celebrity/s_ratio_celebrity/public/p1410696282.74.jpg', 'medium': 'http://img1.doubanio.com/view/celebrity/s_ratio_celebrity/public/p1410696282.74.jpg'}, 'name': '伊德里斯·艾尔巴', 'id': '1049501'}], 'collect_count': 1001044, 'original_title': 'Zootopia', 'subtype': 'movie', 'directors': [{'alt': 'https://movie.douban.com/celebrity/1286985/', 'avatars': {'small': 'http://img1.doubanio.com/view/celebrity/s_ratio_celebrity/public/p1457505519.94.jpg', 'large': 'http://img1.doubanio.com/view/celebrity/s_ratio_celebrity/public/p1457505519.94.jpg', 'medium': 'http://img1.doubanio.com/view/celebrity/s_ratio_celebrity/public/p1457505519.94.jpg'}, 'name': '拜伦·霍华德', 'id': '1286985'}, {'alt': 'https://movie.douban.com/celebrity/1324037/', 'avatars': {'small': 'http://img3.doubanio.com/view/celebrity/s_ratio_celebrity/public/p1457505501.8.jpg', 'large': 'http://img3.doubanio.com/view/celebrity/s_ratio_celebrity/public/p1457505501.8.jpg', 'medium': 'http://img3.doubanio.com/view/celebrity/s_ratio_celebrity/public/p1457505501.8.jpg'}, 'name': '瑞奇·摩尔', 'id': '1324037'}, {'alt': 'https://movie.douban.com/celebrity/1304069/', 'avatars': {'small': 'http://img3.doubanio.com/view/celebrity/s_ratio_celebrity/public/p1456810614.66.jpg', 'large': 'http://img3.doubanio.com/view/celebrity/s_ratio_celebrity/public/p1456810614.66.jpg', 'medium': 'http://img3.doubanio.com/view/celebrity/s_ratio_celebrity/public/p1456810614.66.jpg'}, 'name': '杰拉德·布什', 'id': '1304069'}], 'year': '2016', 'images': {'small': 'http://img3.doubanio.com/view/photo/s_ratio_poster/public/p2315672647.jpg', 'large': 'http://img3.doubanio.com/view/photo/s_ratio_poster/public/p2315672647.jpg', 'medium': 'http://img3.doubanio.com/view/photo/s_ratio_poster/public/p2315672647.jpg'}, 'alt': 'https://movie.douban.com/subject/25662329/', 'id': '25662329'}, {'rating': {'max': 10, 'average': 9.0, 'stars': '45', 'min': 0}, 'genres': ['剧情', '喜剧', '爱情'], 'title': '怦然心动', 'casts': [{'alt': 'https://movie.douban.com/celebrity/1031867/', 'avatars': {'small': 'http://img1.doubanio.com/view/celebrity/s_ratio_celebrity/public/p16442.jpg', 'large': 'http://img1.doubanio.com/view/celebrity/s_ratio_celebrity/public/p16442.jpg', 'medium': 'http://img1.doubanio.com/view/celebrity/s_ratio_celebrity/public/p16442.jpg'}, 'name': '玛德琳·卡罗尔', 'id': '1031867'}, {'alt': 'https://movie.douban.com/celebrity/1004751/', 'avatars': {'small': 'http://img3.doubanio.com/view/celebrity/s_ratio_celebrity/public/p22277.jpg', 'large': 'http://img3.doubanio.com/view/celebrity/s_ratio_celebrity/public/p22277.jpg', 'medium': 'http://img3.doubanio.com/view/celebrity/s_ratio_celebrity/public/p22277.jpg'}, 'name': '卡兰·麦克奥利菲', 'id': '1004751'}, {'alt': 'https://movie.douban.com/celebrity/1049546/', 'avatars': {'small': 'http://img1.doubanio.com/view/celebrity/s_ratio_celebrity/public/p12355.jpg', 'large': 'http://img1.doubanio.com/view/celebrity/s_ratio_celebrity/public/p12355.jpg', 'medium': 'http://img1.doubanio.com/view/celebrity/s_ratio_celebrity/public/p12355.jpg'}, 'name': '瑞贝卡·德·莫妮', 'id': '1049546'}], 'collect_count': 1140756, 'original_title': 'Flipped', 'subtype': 'movie', 'directors': [{'alt': 'https://movie.douban.com/celebrity/1031903/', 'avatars': {'small': 'http://img1.doubanio.com/view/celebrity/s_ratio_celebrity/public/p1379484184.83.jpg', 'large': 'http://img1.doubanio.com/view/celebrity/s_ratio_celebrity/public/p1379484184.83.jpg', 'medium': 'http://img1.doubanio.com/view/celebrity/s_ratio_celebrity/public/p1379484184.83.jpg'}, 'name': '罗伯·莱纳', 'id': '1031903'}], 'year': '2010', 'images': {'small': 'http://img3.doubanio.com/view/photo/s_ratio_poster/public/p663036666.jpg', 'large': 'http://img3.doubanio.com/view/photo/s_ratio_poster/public/p663036666.jpg', 'medium': 'http://img3.doubanio.com/view/photo/s_ratio_poster/public/p663036666.jpg'}, 'alt': 'https://movie.douban.com/subject/3319755/', 'id': '3319755'}, {'rating': {'max': 10, 'average': 9.2, 'stars': '45', 'min': 0}, 'genres': ['剧情', '喜剧'], 'title': '触不可及', 'casts': [{'alt': 'https://movie.douban.com/celebrity/1050210/', 'avatars': {'small': 'http://img1.doubanio.com/view/celebrity/s_ratio_celebrity/public/p1375092314.14.jpg', 'large': 'http://img1.doubanio.com/view/celebrity/s_ratio_celebrity/public/p1375092314.14.jpg', 'medium': 'http://img1.doubanio.com/view/celebrity/s_ratio_celebrity/public/p1375092314.14.jpg'}, 'name': '弗朗索瓦·克鲁塞', 'id': '1050210'}, {'alt': 'https://movie.douban.com/celebrity/1220507/', 'avatars': {'small': 'http://img1.doubanio.com/view/celebrity/s_ratio_celebrity/public/p41401.jpg', 'large': 'http://img1.doubanio.com/view/celebrity/s_ratio_celebrity/public/p41401.jpg', 'medium': 'http://img1.doubanio.com/view/celebrity/s_ratio_celebrity/public/p41401.jpg'}, 'name': '奥玛·希', 'id': '1220507'}, {'alt': 'https://movie.douban.com/celebrity/1289597/', 'avatars': {'small': 'http://img3.doubanio.com/view/celebrity/s_ratio_celebrity/public/p42048.jpg', 'large': 'http://img3.doubanio.com/view/celebrity/s_ratio_celebrity/public/p42048.jpg', 'medium': 'http://img3.doubanio.com/view/celebrity/s_ratio_celebrity/public/p42048.jpg'}, 'name': '安娜·勒尼', 'id': '1289597'}], 'collect_count': 666066, 'original_title': 'Intouchables', 'subtype': 'movie', 'directors': [{'alt': 'https://movie.douban.com/celebrity/1001404/', 'avatars': {'small': 'http://img1.doubanio.com/view/celebrity/s_ratio_celebrity/public/p41640.jpg', 'large': 'http://img1.doubanio.com/view/celebrity/s_ratio_celebrity/public/p41640.jpg', 'medium': 'http://img1.doubanio.com/view/celebrity/s_ratio_celebrity/public/p41640.jpg'}, 'name': '奥利维埃·纳卡什', 'id': '1001404'}, {'alt': 'https://movie.douban.com/celebrity/1010884/', 'avatars': {'small': 'http://img1.doubanio.com/view/celebrity/s_ratio_celebrity/public/p50463.jpg', 'large': 'http://img1.doubanio.com/view/celebrity/s_ratio_celebrity/public/p50463.jpg', 'medium': 'http://img1.doubanio.com/view/celebrity/s_ratio_celebrity/public/p50463.jpg'}, 'name': '埃里克·托莱达诺', 'id': '1010884'}], 'year': '2011', 'images': {'small': 'http://img1.doubanio.com/view/photo/s_ratio_poster/public/p1454261925.jpg', 'large': 'http://img1.doubanio.com/view/photo/s_ratio_poster/public/p1454261925.jpg', 'medium': 'http://img1.doubanio.com/view/photo/s_ratio_poster/public/p1454261925.jpg'}, 'alt': 'https://movie.douban.com/subject/6786002/', 'id': '6786002'}, {'rating': {'max': 10, 'average': 9.2, 'stars': '50', 'min': 0}, 'genres': ['剧情', '历史', '爱情'], 'title': '乱世佳人', 'casts': [{'alt': 'https://movie.douban.com/celebrity/1010506/', 'avatars': {'small': 'http://img1.doubanio.com/view/celebrity/s_ratio_celebrity/public/p3151.jpg', 'large': 'http://img1.doubanio.com/view/celebrity/s_ratio_celebrity/public/p3151.jpg', 'medium': 'http://img1.doubanio.com/view/celebrity/s_ratio_celebrity/public/p3151.jpg'}, 'name': '费雯·丽', 'id': '1010506'}, {'alt': 'https://movie.douban.com/celebrity/1006997/', 'avatars': {'small': 'http://img3.doubanio.com/view/celebrity/s_ratio_celebrity/public/p5289.jpg', 'large': 'http://img3.doubanio.com/view/celebrity/s_ratio_celebrity/public/p5289.jpg', 'medium': 'http://img3.doubanio.com/view/celebrity/s_ratio_celebrity/public/p5289.jpg'}, 'name': '克拉克·盖博', 'id': '1006997'}, {'alt': 'https://movie.douban.com/celebrity/1010604/', 'avatars': {'small': 'http://img3.doubanio.com/view/celebrity/s_ratio_celebrity/public/p4239.jpg', 'large': 'http://img3.doubanio.com/view/celebrity/s_ratio_celebrity/public/p4239.jpg', 'medium': 'http://img3.doubanio.com/view/celebrity/s_ratio_celebrity/public/p4239.jpg'}, 'name': '奥利维娅·德哈维兰', 'id': '1010604'}], 'collect_count': 486030, 'original_title': 'Gone with the Wind', 'subtype': 'movie', 'directors': [{'alt': 'https://movie.douban.com/celebrity/1032275/', 'avatars': {'small': 'http://img1.doubanio.com/view/celebrity/s_ratio_celebrity/public/p11303.jpg', 'large': 'http://img1.doubanio.com/view/celebrity/s_ratio_celebrity/public/p11303.jpg', 'medium': 'http://img1.doubanio.com/view/celebrity/s_ratio_celebrity/public/p11303.jpg'}, 'name': '维克多·弗莱明', 'id': '1032275'}, {'alt': 'https://movie.douban.com/celebrity/1010711/', 'avatars': {'small': 'http://img3.doubanio.com/view/celebrity/s_ratio_celebrity/public/p19067.jpg', 'large': 'http://img3.doubanio.com/view/celebrity/s_ratio_celebrity/public/p19067.jpg', 'medium': 'http://img3.doubanio.com/view/celebrity/s_ratio_celebrity/public/p19067.jpg'}, 'name': '乔治·库克', 'id': '1010711'}, {'alt': 'https://movie.douban.com/celebrity/1012588/', 'avatars': {'small': 'http://img1.doubanio.com/view/celebrity/s_ratio_celebrity/public/p54831.jpg', 'large': 'http://img1.doubanio.com/view/celebrity/s_ratio_celebrity/public/p54831.jpg', 'medium': 'http://img1.doubanio.com/view/celebrity/s_ratio_celebrity/public/p54831.jpg'}, 'name': '山姆·伍德', 'id': '1012588'}], 'year': '1939', 'images': {'small': 'http://img1.doubanio.com/view/photo/s_ratio_poster/public/p1963126880.jpg', 'large': 'http://img1.doubanio.com/view/photo/s_ratio_poster/public/p1963126880.jpg', 'medium': 'http://img1.doubanio.com/view/photo/s_ratio_poster/public/p1963126880.jpg'}, 'alt': 'https://movie.douban.com/subject/1300267/', 'id': '1300267'}], 'title': '豆瓣电影Top250'}\n" + ] + } + ], + "source": [ + "print(type(content))\n", + "print(content)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "content是个字典,包括了count, start, total和subjects这些键,他们分别可能是什么?\n", + "\n", + "看看subjects里面的东西:" + ] + }, + { + "cell_type": "code", + "execution_count": 84, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "movies = content['subjects']" + ] + }, + { + "cell_type": "code", + "execution_count": 129, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "{'alt': 'https://movie.douban.com/subject/1292063/',\n", + " 'casts': [{'alt': 'https://movie.douban.com/celebrity/1041004/',\n", + " 'avatars': {'large': 'http://img1.doubanio.com/view/celebrity/s_ratio_celebrity/public/p26764.jpg',\n", + " 'medium': 'http://img1.doubanio.com/view/celebrity/s_ratio_celebrity/public/p26764.jpg',\n", + " 'small': 'http://img1.doubanio.com/view/celebrity/s_ratio_celebrity/public/p26764.jpg'},\n", + " 'id': '1041004',\n", + " 'name': '罗伯托·贝尼尼'},\n", + " {'alt': 'https://movie.douban.com/celebrity/1000375/',\n", + " 'avatars': {'large': 'http://img3.doubanio.com/view/celebrity/s_ratio_celebrity/public/p9548.jpg',\n", + " 'medium': 'http://img3.doubanio.com/view/celebrity/s_ratio_celebrity/public/p9548.jpg',\n", + " 'small': 'http://img3.doubanio.com/view/celebrity/s_ratio_celebrity/public/p9548.jpg'},\n", + " 'id': '1000375',\n", + " 'name': '尼可莱塔·布拉斯基'},\n", + " {'alt': 'https://movie.douban.com/celebrity/1000368/',\n", + " 'avatars': {'large': 'http://img1.doubanio.com/view/celebrity/s_ratio_celebrity/public/p45590.jpg',\n", + " 'medium': 'http://img1.doubanio.com/view/celebrity/s_ratio_celebrity/public/p45590.jpg',\n", + " 'small': 'http://img1.doubanio.com/view/celebrity/s_ratio_celebrity/public/p45590.jpg'},\n", + " 'id': '1000368',\n", + " 'name': '乔治·坎塔里尼'}],\n", + " 'collect_count': 778658,\n", + " 'directors': [{'alt': 'https://movie.douban.com/celebrity/1041004/',\n", + " 'avatars': {'large': 'http://img1.doubanio.com/view/celebrity/s_ratio_celebrity/public/p26764.jpg',\n", + " 'medium': 'http://img1.doubanio.com/view/celebrity/s_ratio_celebrity/public/p26764.jpg',\n", + " 'small': 'http://img1.doubanio.com/view/celebrity/s_ratio_celebrity/public/p26764.jpg'},\n", + " 'id': '1041004',\n", + " 'name': '罗伯托·贝尼尼'}],\n", + " 'genres': ['剧情', '喜剧', '爱情'],\n", + " 'id': '1292063',\n", + " 'images': {'large': 'http://img1.doubanio.com/view/photo/s_ratio_poster/public/p510861873.jpg',\n", + " 'medium': 'http://img1.doubanio.com/view/photo/s_ratio_poster/public/p510861873.jpg',\n", + " 'small': 'http://img1.doubanio.com/view/photo/s_ratio_poster/public/p510861873.jpg'},\n", + " 'original_title': 'La vita è bella',\n", + " 'rating': {'average': 9.5, 'max': 10, 'min': 0, 'stars': '50'},\n", + " 'subtype': 'movie',\n", + " 'title': '美丽人生',\n", + " 'year': '1997'}" + ] + }, + "execution_count": 129, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "movies[3]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "看上去是一部电影的信息。 \n", + "\n", + "打印出每部电影的名称,评分,年份,主演,导演:" + ] + }, + { + "cell_type": "code", + "execution_count": 136, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "霸王别姬 1993 9.6张国荣,张丰毅,巩俐 陈凯歌 \n", + "这个杀手不太冷 1994 9.4让·雷诺,娜塔莉·波特曼,加里·奥德曼 吕克·贝松 \n", + "阿甘正传 1994 9.4汤姆·汉克斯,罗宾·怀特,加里·西尼斯 罗伯特·泽米吉斯 \n", + "美丽人生 1997 9.5罗伯托·贝尼尼,尼可莱塔·布拉斯基,乔治·坎塔里尼 罗伯托·贝尼尼 \n", + "泰坦尼克号 1997 9.3莱昂纳多·迪卡普里奥,凯特·温丝莱特,比利·赞恩 詹姆斯·卡梅隆 \n", + "千与千寻 2001 9.3柊瑠美,入野自由,夏木真理 宫崎骏 \n", + "辛德勒的名单 1993 9.5连姆·尼森,本·金斯利,拉尔夫·费因斯 史蒂文·斯皮尔伯格 \n", + "盗梦空间 2010 9.3莱昂纳多·迪卡普里奥,约瑟夫·高登-莱维特,艾伦·佩吉 克里斯托弗·诺兰 \n", + "忠犬八公的故事 2009 9.3理查·基尔,萨拉·罗默尔,琼·艾伦 拉斯·霍尔斯道姆 \n", + "机器人总动员 2008 9.3本·贝尔特,艾丽莎·奈特,杰夫·格尔林 安德鲁·斯坦顿 \n", + "三傻大闹宝莱坞 2009 9.2阿米尔·汗,卡琳娜·卡普尔,马达范 拉吉库马尔·希拉尼 \n", + "海上钢琴师 1998 9.2蒂姆·罗斯,普路特·泰勒·文斯,比尔·努恩 朱塞佩·托纳多雷 \n", + "放牛班的春天 2004 9.3热拉尔·朱尼奥,弗朗索瓦·贝莱昂,凯德·麦拉德 克里斯托夫·巴拉蒂 \n", + "楚门的世界 1998 9.2金·凯瑞,劳拉·琳妮,艾德·哈里斯 彼得·威尔 \n", + "大话西游之大圣娶亲 1995 9.2周星驰,吴孟达,朱茵 刘镇伟 \n", + "星际穿越 2014 9.2马修·麦康纳,安妮·海瑟薇,杰西卡·查斯坦 克里斯托弗·诺兰 \n", + "龙猫 1988 9.2日高法子,坂本千夏,糸井重里 宫崎骏 \n", + "教父 1972 9.2马龙·白兰度,阿尔·帕西诺,詹姆斯·肯恩 弗朗西斯·福特·科波拉\n", + "熔炉 2011 9.3孔侑,郑有美,金志映 黄东赫 \n", + "无间道 2002 9.1刘德华,梁朝伟,黄秋生 刘伟强,麦兆辉 \n", + "当幸福来敲门 2006 9.0威尔·史密斯,贾登·史密斯,坦迪·牛顿 加布里埃莱·穆奇诺 \n", + "疯狂动物城 2016 9.2金妮弗·古德温,杰森·贝特曼,伊德里斯·艾尔巴 拜伦·霍华德,瑞奇·摩尔,杰拉德·布什\n", + "怦然心动 2010 9.0玛德琳·卡罗尔,卡兰·麦克奥利菲,瑞贝卡·德·莫妮 罗伯·莱纳 \n", + "触不可及 2011 9.2弗朗索瓦·克鲁塞,奥玛·希,安娜·勒尼 奥利维埃·纳卡什,埃里克·托莱达诺\n", + "乱世佳人 1939 9.2费雯·丽,克拉克·盖博,奥利维娅·德哈维兰 维克多·弗莱明,乔治·库克,山姆·伍德\n" + ] + } + ], + "source": [ + "for movie in movies:\n", + " title = movie['title'].strip()\n", + " year = movie['year'].strip()\n", + " rate = movie['rating']['average']\n", + " casts = ','.join([item['name'] for item in movie['casts']])\n", + " directors = ','.join([item['name'] for item in movie['directors']])\n", + " \n", + " print('{title:<{len1}}{year:<6}{rate:3.1f}{casts:<{len2}}{directors:<{len3}}'.format(title=title,len1=22-len(title.encode('GBK'))+len(title), \n", + " year=year, \n", + " rate=rate, \n", + " casts=casts,len2=55-len(casts.encode('GBK'))+len(casts), \n", + " directors=directors,len3=22-len(directors.encode('GBK'))+len(directors)))\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "*** 上面的format语句现在理解不到没有关系,也许你可以在网上查一查。***\n", + "\n", + "### 思考:如果希望按照评分由高到低打印出来,可以怎么做?" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# 5. 小结\n", + "\n", + "文件被组织在文件夹中(也称为目录),路径描述了一个文件的位置。运行在计算机上的每个程序都有一个当前工作目录,它让你相对于当前的位置指定文件路径,而非总是需要完整路径(绝对路径)。os.path 模块包含许多函数,用于操作文件路径。\n", + "\n", + "程序也可以直接操作文本文件的内容。open()函数将打开这些文件,将它们的内容读取为一个大字符串(利用read()方法),或读取为字符串的列表(利用方\n", + "法readlines())。Open()函数可以将文件以写模式或添加模式打开,分别创建新的文本文件或在原有的文本文件中添加内容。\n", + "\n", + "\n", + "CSV 和JSON 是常见的纯文本格式,用于保存数据。它们很容易被程序解析,同时仍然让人可读,所以它们经常被用作简单的电子表格或网络应用程序的数据。csv 和json 模块大大简化了读取和写入CSV 和JSON 文件的过程。\n", + "\n", + "一个常见的任务是接受多种格式的数据,解析它,并获得需要的特定信息。这些任务往往非常特别,商业软件并不是最有帮助的。通过编写自己的脚本,可以让计算机处理大量以这些格式呈现的数据。" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 练习\n", + "**(1)** 相对路径是相对于什么?
\n", + "\n", + "**(2)** 绝对路径从什么开始?
\n", + "\n", + "**(3)** os.getcwd()和os.chdir()函数做什么事?
\n", + "\n", + "**(4)** read()和readlines()方法之间的区别是什么?\n", + "\n", + "**(5)** 向csv.reader()和csv.writer()传入什么,来创建Reader 和Writer 对象?\n", + "\n", + "**(6)** 对于Reader 和Writer 对象,File 对象需要以什么模式打开?
\n", + "\n", + "**(7)** 什么函数接受一个JSON 数据的字符串,并返回一个Python 数据结构?
\n", + "\n", + "**(8)** 什么函数接受一个Python 数据结构,并返回一个JSON 数据的字符串?
" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# 作业:商城销售统计" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "假设你是学生实验超市的销售总监,每个月你会收到销售数据,这些数据存在CSV文件中,文件内容看起来像这样:\n", + "\n", + "\n", + "其中order_id是订单号,goods_id是商品代码,goods_name是商品名称,unit_price是商品单价,quantity是销售数量,return_qty是退货数量。\n", + "\n", + "现在你有2018年1月至4月份销售数据,分别存在2018_01.csv,2018_02.csv,2018_03.csv,2018_04.csv文件中,请做出以下统计:\n", + "* 每个月的销售额,以及4个月的销售总额写入到salesAmount.txt文件中,每个月的数据和总额数据各占1行(共5行)。你的文件应该看起来像:\n", + "\n", + "* 每个月销售额最高的10种商品的商品代码,商品名称,销售数量,销售额分别写入到1个文件中,文件名分别为:salesTop10_01.txt,salesTop10_02.txt,salesTop10_03.txt,salesTop10_04.txt。你的每个文件应该看起来像:\n", + "" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "将作业的程序源文件保存在12345678.py文件中作为第5次作业的附件,其中12345678需要替换成你的学号,发送到xzl_swufe@163.com。

\n", + "邮件标题必须类似于:作业7_12345678。其中12345678需要替换成你的学号。

邮件标题必须类似于:作业7_12345678。其中12345678需要替换成你的学号。

邮件标题必须类似于:作业7_12345678。其中12345678需要替换成你的学号。" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.6.2" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +}