@@ -11848,11 +11848,11 @@ <h2 id="datetime-for-working-with-dates-and-times"><a href="https://docs.python.
1184811848
1184911849
1185011850< 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
1185411854date: 2018-09-19
11855- time: 22:00:35.202267
11855+ time: 22:44:15.396930
1185611856</ pre >
1185711857</ div >
1185811858</ div >
@@ -11896,8 +11896,8 @@ <h3 id="strftime()"><code>strftime()</code><a class="anchor-link" href="#strftim
1189611896
1189711897
1189811898< 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
1190111901</ pre >
1190211902</ div >
1190311903</ div >
@@ -11984,7 +11984,7 @@ <h3 id="timedelta"><a href="https://docs.python.org/3/library/datetime.html#time
1198411984
1198511985
1198611986< 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
1198811988tomorrow - now = 1 day, 0:00:00
1198911989days: 1, seconds: 0
1199011990total seconds: 86400.0
@@ -12077,10 +12077,10 @@ <h3 id="Working-with-timezones">Working with timezones<a class="anchor-link" hre
1207712077
1207812078
1207912079< 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
1208412084</ pre >
1208512085</ div >
1208612086</ div >
@@ -12238,8 +12238,8 @@ <h3 id="Formatting-log-entries">Formatting log entries<a class="anchor-link" hre
1223812238
1223912239
1224012240< 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
1224312243</ pre >
1224412244</ div >
1224512245</ div >
@@ -12252,13 +12252,57 @@ <h3 id="Formatting-log-entries">Formatting log entries<a class="anchor-link" hre
1225212252</ div >
1225312253< div class ="inner_cell ">
1225412254< 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 >
1225612256</ div >
1225712257</ div >
1225812258</ div >
1225912259< div class ="cell border-box-sizing code_cell rendered ">
1226012260< div class ="input ">
1226112261< 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+
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 >
1226212306< div class ="inner_cell ">
1226312307 < div class ="input_area ">
1226412308< 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/
1228412328
1228512329
1228612330< 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
1228912333</ pre >
1229012334</ div >
1229112335</ div >
@@ -12305,7 +12349,7 @@ <h2 id="random-for-random-number-generation"><a href="https://docs.python.org/3/
1230512349</ div >
1230612350< div class ="cell border-box-sizing code_cell rendered ">
1230712351< div class ="input ">
12308- < div class ="prompt input_prompt "> In [11 ]:</ div >
12352+ < div class ="prompt input_prompt "> In [12 ]:</ div >
1230912353< div class ="inner_cell ">
1231012354 < div class ="input_area ">
1231112355< 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="#
1236712411</ div >
1236812412< div class ="cell border-box-sizing code_cell rendered ">
1236912413< div class ="input ">
12370- < div class ="prompt input_prompt "> In [12 ]:</ div >
12414+ < div class ="prompt input_prompt "> In [13 ]:</ div >
1237112415< div class ="inner_cell ">
1237212416 < div class ="input_area ">
1237312417< 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
1242012464</ div >
1242112465< div class ="cell border-box-sizing code_cell rendered ">
1242212466< div class ="input ">
12423- < div class ="prompt input_prompt "> In [13 ]:</ div >
12467+ < div class ="prompt input_prompt "> In [14 ]:</ div >
1242412468< div class ="inner_cell ">
1242512469 < div class ="input_area ">
1242612470< div class =" highlight hl-ipython3 "> < pre > < span > </ span > < span class ="kn "> import</ span > < span class ="nn "> re</ span >
0 commit comments