@@ -11848,11 +11848,11 @@ <h2 id="datetime-for-working-with-dates-and-times"><a href="https://docs.python.
11848
11848
11849
11849
11850
11850
< div class ="output_subarea output_stream output_stdout output_text ">
11851
- < pre > local now: 2018-09-19 22:00:35.202267
11852
- utc now: 2018-09-19 20:00:35.202567
11853
- 2018 9 19 22 0 35
11851
+ < pre > local now: 2018-09-19 22:44:15.396930
11852
+ utc now: 2018-09-19 20:44:15.397085
11853
+ 2018 9 19 22 44 15
11854
11854
date: 2018-09-19
11855
- time: 22:00:35.202267
11855
+ time: 22:44:15.396930
11856
11856
</ pre >
11857
11857
</ div >
11858
11858
</ div >
@@ -11896,8 +11896,8 @@ <h3 id="strftime()"><code>strftime()</code><a class="anchor-link" href="#strftim
11896
11896
11897
11897
11898
11898
< div class ="output_subarea output_stream output_stdout output_text ">
11899
- < pre > 2018/09/19-22:00:35
11900
- date: 2018-09-19 time:22:00:35
11899
+ < pre > 2018/09/19-22:44:15
11900
+ date: 2018-09-19 time:22:44:15
11901
11901
</ pre >
11902
11902
</ div >
11903
11903
</ div >
@@ -11984,7 +11984,7 @@ <h3 id="timedelta"><a href="https://docs.python.org/3/library/datetime.html#time
11984
11984
11985
11985
11986
11986
< div class ="output_subarea output_stream output_stdout output_text ">
11987
- < pre > tomorrow this time: 2018-09-20 22:00:35.202267
11987
+ < pre > tomorrow this time: 2018-09-20 22:44:15.396930
11988
11988
tomorrow - now = 1 day, 0:00:00
11989
11989
days: 1, seconds: 0
11990
11990
total seconds: 86400.0
@@ -12077,10 +12077,10 @@ <h3 id="Working-with-timezones">Working with timezones<a class="anchor-link" hre
12077
12077
12078
12078
12079
12079
< div class ="output_subarea output_stream output_stdout output_text ">
12080
- < pre > naive utc now: 2018-09-19 20:00:36.074664 , tzinfo: None
12081
- utc now: 2018-09-19 20:00:36.074664 +00:00, tzinfo: UTC
12082
- Paris: 2018-09-19 22:00:36.074664 +02:00, tzinfo: Europe/Paris
12083
- New York: 2018-09-19 16:00:36.074664 -04:00, tzinfo: America/New_York
12080
+ < pre > naive utc now: 2018-09-19 20:44:16.308229 , tzinfo: None
12081
+ utc now: 2018-09-19 20:44:16.308229 +00:00, tzinfo: UTC
12082
+ Paris: 2018-09-19 22:44:16.308229 +02:00, tzinfo: Europe/Paris
12083
+ New York: 2018-09-19 16:44:16.308229 -04:00, tzinfo: America/New_York
12084
12084
</ pre >
12085
12085
</ div >
12086
12086
</ div >
@@ -12238,8 +12238,8 @@ <h3 id="Formatting-log-entries">Formatting log entries<a class="anchor-link" hre
12238
12238
12239
12239
12240
12240
< div class ="output_subarea output_stream output_stderr output_text ">
12241
- < pre > 2018-09-19 22:00:36,127 | MyLogger | WARNING | Something bad is going to happen
12242
- 2018-09-19 22:00:36,128 | MyLogger | ERROR | Uups, it already happened
12241
+ < pre > 2018-09-19 22:44:16,365 | MyLogger | WARNING | Something bad is going to happen
12242
+ 2018-09-19 22:44:16,366 | MyLogger | ERROR | Uups, it already happened
12243
12243
</ pre >
12244
12244
</ div >
12245
12245
</ div >
@@ -12252,13 +12252,57 @@ <h3 id="Formatting-log-entries">Formatting log entries<a class="anchor-link" hre
12252
12252
</ div >
12253
12253
< div class ="inner_cell ">
12254
12254
< div class ="text_cell_render border-box-sizing rendered_html ">
12255
- < h2 id ="random-for-random-number-generation " > < a href =" https://docs.python.org/3/library/random.html " > < code > random </ code > </ a > for random number generation < a class ="anchor-link " href ="#random-for-random-number-generation "> ¶</ a > </ h2 >
12255
+ < h3 id ="Logging-to-a-file " > Logging to a file < a class ="anchor-link " href ="#Logging-to-a-file "> ¶</ a > </ h3 >
12256
12256
</ div >
12257
12257
</ div >
12258
12258
</ div >
12259
12259
< div class ="cell border-box-sizing code_cell rendered ">
12260
12260
< div class ="input ">
12261
12261
< div class ="prompt input_prompt "> In [10]:</ div >
12262
+ < div class ="inner_cell ">
12263
+ < div class ="input_area ">
12264
+ < div class =" highlight hl-ipython3 "> < pre > < span > </ span > < span class ="kn "> import</ span > < span class ="nn "> os</ span >
12265
+ < span class ="kn "> import</ span > < span class ="nn "> logging</ span >
12266
+
12267
+ < span class ="c1 "> # This is only required for Jupyter notebook environment</ span >
12268
+ < span class ="kn "> from</ span > < span class ="nn "> importlib</ span > < span class ="k "> import</ span > < span class ="n "> reload</ span >
12269
+ < span class ="n "> reload</ span > < span class ="p "> (</ span > < span class ="n "> logging</ span > < span class ="p "> )</ span >
12270
+
12271
+ < span class ="n "> logger</ span > < span class ="o "> =</ span > < span class ="n "> logging</ span > < span class ="o "> .</ span > < span class ="n "> getLogger</ span > < span class ="p "> (</ span > < span class ="s1 "> 'MyFileLogger'</ span > < span class ="p "> )</ span >
12272
+
12273
+ < span class ="c1 "> # Let's define a file_handler for our logger</ span >
12274
+ < span class ="n "> log_path</ span > < span class ="o "> =</ span > < span class ="n "> os</ span > < span class ="o "> .</ span > < span class ="n "> path</ span > < span class ="o "> .</ span > < span class ="n "> join</ span > < span class ="p "> (</ span > < span class ="n "> os</ span > < span class ="o "> .</ span > < span class ="n "> getcwd</ span > < span class ="p "> (),</ span > < span class ="s1 "> 'my_log.txt'</ span > < span class ="p "> )</ span >
12275
+ < span class ="n "> file_handler</ span > < span class ="o "> =</ span > < span class ="n "> logging</ span > < span class ="o "> .</ span > < span class ="n "> FileHandler</ span > < span class ="p "> (</ span > < span class ="n "> log_path</ span > < span class ="p "> )</ span >
12276
+
<
10000
/code>
12277
+ < span class ="c1 "> # And a nice format</ span >
12278
+ < span class ="n "> formatter</ span > < span class ="o "> =</ span > < span class ="n "> logging</ span > < span class ="o "> .</ span > < span class ="n "> Formatter</ span > < span class ="p "> (</ span > < span class ="s1 "> '</ span > < span class ="si "> %(asctime)s</ span > < span class ="s1 "> | </ span > < span class ="si "> %(name)-12s</ span > < span class ="s1 "> | </ span > < span class ="si "> %(levelname)-10s</ span > < span class ="s1 "> | </ span > < span class ="si "> %(message)s</ span > < span class ="s1 "> '</ span > < span class ="p "> )</ span >
12279
+ < span class ="n "> file_handler</ span > < span class ="o "> .</ span > < span class ="n "> setFormatter</ span > < span class ="p "> (</ span > < span class ="n "> formatter</ span > < span class ="p "> )</ span >
12280
+
12281
+ < span class ="n "> logger</ span > < span class ="o "> .</ span > < span class ="n "> addHandler</ span > < span class ="p "> (</ span > < span class ="n "> file_handler</ span > < span class ="p "> )</ span >
12282
+
12283
+ < span class ="c1 "> # If you want to see it also in the console, add another handler for it</ span >
12284
+ < span class ="c1 "> # logger.addHandler(logging.StreamHandler())</ span >
12285
+
12286
+ < span class ="n "> logger</ span > < span class ="o "> .</ span > < span class ="n "> warning</ span > < span class ="p "> (</ span > < span class ="s1 "> 'Oops something is going to happen'</ span > < span class ="p "> )</ span >
12287
+ < span class ="n "> logger</ span > < span class ="o "> .</ span > < span class ="n "> error</ span > < span class ="p "> (</ span > < span class ="s1 "> 'John Doe visits our place'</ span > < span class ="p "> )</ span >
12288
+ </ pre > </ div >
12289
+
12290
+ </ div >
12291
+ </ div >
12292
+ </ div >
12293
+
12294
+ </ div >
12295
+ < div class ="cell border-box-sizing text_cell rendered "> < div class ="prompt input_prompt ">
12296
+ </ div >
12297
+ < div class ="inner_cell ">
12298
+ < div class ="text_cell_render border-box-sizing rendered_html ">
12299
+ < h2 id ="random-for-random-number-generation "> < a href ="https://docs.python.org/3/library/random.html "> < code > random</ code > </ a > for random number generation< a class ="anchor-link " href ="#random-for-random-number-generation "> ¶</ a > </ h2 >
12300
+ </ div >
12301
+ </ div >
12302
+ </ div >
12303
+ < div class ="cell border-box-sizing code_cell rendered ">
12304
+ < div class ="input ">
12305
+ < div class ="prompt input_prompt "> In [11]:</ div >
12262
12306
< div class ="inner_cell ">
12263
12307
< div class ="input_area ">
12264
12308
< div class =" highlight hl-ipython3 "> < pre > < span > </ span > < span class ="kn "> import</ span > < span class ="nn "> random</ span >
@@ -12284,8 +12328,8 @@ <h2 id="random-for-random-number-generation"><a href="https://docs.python.org/3/
12284
12328
12285
12329
12286
12330
< div class ="output_subarea output_stream output_stdout output_text ">
12287
- < pre > random integer between 1-100: 63
12288
- random float between 0-1: 0.11984811411151686
12331
+ < pre > random integer between 1-100: 33
12332
+ random float between 0-1: 0.10137384902353497
12289
12333
</ pre >
12290
12334
</ div >
12291
12335
</ div >
@@ -12305,7 +12349,7 @@ <h2 id="random-for-random-number-generation"><a href="https://docs.python.org/3/
12305
12349
</ div >
12306
12350
< div class ="cell border-box-sizing code_cell rendered ">
12307
12351
< div class ="input ">
12308
- < div class ="prompt input_prompt "> In [11 ]:</ div >
12352
+ < div class ="prompt input_prompt "> In [12 ]:</ div >
12309
12353
< div class ="inner_cell ">
12310
12354
< div class ="input_area ">
12311
12355
< div class =" highlight hl-ipython3 "> < pre > < span > </ span > < span class ="kn "> import</ span > < span class ="nn "> random</ span >
@@ -12367,7 +12411,7 @@ <h3 id="Searching-occurences">Searching occurences<a class="anchor-link" href="#
12367
12411
</ div >
12368
12412
< div class ="cell border-box-sizing code_cell rendered ">
12369
12413
< div class ="input ">
12370
- < div class ="prompt input_prompt "> In [12 ]:</ div >
12414
+ < div class ="prompt input_prompt "> In [13 ]:</ div >
12371
12415
< div class ="inner_cell ">
12372
12416
< div class ="input_area ">
12373
12417
< div class =" highlight hl-ipython3 "> < pre > < span > </ span > < span class ="kn "> import</ span > < span class ="nn "> re</ span >
@@ -12420,7 +12464,7 @@ <h3 id="Variable-validation">Variable validation<a class="anchor-link" href="#Va
12420
12464
</ div >
12421
12465
< div class ="cell border-box-sizing code_cell rendered ">
12422
12466
< div class ="input ">
12423
- < div class ="prompt input_prompt "> In [13 ]:</ div >
12467
+ < div class ="prompt input_prompt "> In [14 ]:</ div >
12424
12468
< div class ="inner_cell ">
12425
12469
< div class ="input_area ">
12426
12470
< div class =" highlight hl-ipython3 "> < pre > < span > </ span > < span class ="kn "> import</ span > < span class ="nn "> re</ span >
0 commit comments