Adding chapter 4 source code

This commit is contained in:
muassif
2021-02-21 19:22:50 +04:00
committed by GitHub
parent 801ff51fdc
commit e8469ec365
32 changed files with 405 additions and 0 deletions
+1
View File
@@ -0,0 +1 @@
Hello WorldEnd
+15
View File
@@ -0,0 +1,15 @@
#exception1.py
try:
#print (x)
x = 5
y = 1
z = x /y
print('x'+y)
except NameError as e:
print(e)
except ZeroDivisionError:
print("Division by 0 is not allowed")
except Exception as e:
print("An error occured")
print(e)
+10
View File
@@ -0,0 +1,10 @@
#exception2.py
try:
f = open("abc.txt", "w")
except Exception as e:
print("Error:" + e)
else:
f.write("Hello World")
f.write("End")
finally:
f.close()
+18
View File
@@ -0,0 +1,18 @@
#exception3.py
import math
def sqrt(num):
if not isinstance(num, (int, float)) :
raise TypeError("only numbers are allowed")
if num < 0:
raise Exception ("Negative number not supported")
return math.sqrt(num)
if __name__ == "__main__":
try:
print(sqrt(9))
print(sqrt('a'))
print (sqrt(-9))
except Exception as e:
print(e)
+28
View File
@@ -0,0 +1,28 @@
#exception3.py
import math
class NumTypeError(TypeError):
pass
class NegativeNumError(Exception):
def __init__(self):
super().__init__("Negative number not supported")
def sqrt(num):
if not isinstance(num, (int, float)) :
raise NumTypeError("only numbers are allowed")
if num < 0:
raise NegativeNumError
return math.sqrt(num)
if __name__ == "__main__":
try:
print(sqrt(9))
print(sqrt('a'))
print (sqrt(-9))
except NumTypeError as e:
print(e)
except NegativeNumError as e:
print(e)
+2
View File
@@ -0,0 +1,2 @@
This is a sample file 1
This is a test data 1
+2
View File
@@ -0,0 +1,2 @@
This is a sample file 2
This is a test data 2
+9
View File
@@ -0,0 +1,9 @@
#contextmgr1.py
with open("myfile.txt",'w') as f1:
f1.write("This is a sample file\n")
lines = ["This is a test data\n", "in two lines\n"]
f1.writelines(lines)
with open("myfile.txt",'r') as f2:
for line in f2.readlines():
print(line)
+6
View File
@@ -0,0 +1,6 @@
#multifilesread1.py
import fileinput
with fileinput.input(files = ("1.txt",'2.txt') )as f:
for line in f:
print(f.filename())
print(line)
+3
View File
@@ -0,0 +1,3 @@
This is a sample file
This is a test data
in two lines
+16
View File
@@ -0,0 +1,16 @@
#writereadfile.pywrite to a file and then read from it
f1 = open("myfile.txt",'w')
f1.write("This is a sample file\n")
lines =["This is a test data\n", "in two lines\n"]
f1.writelines(lines)
f1.close()
f2 = open("myfile.txt",'r')
print(f2.read(4))
print(f2.readline())
print(f2.readline())
f2.seek(0)
for line in f2.readlines():
print(line)
f2.close()
+4
View File
@@ -0,0 +1,4 @@
Iteration is one of the key tools used for data processing and data transformation.
The iterations are especially useful when dealing with large datasets and bringing
the whole dataset into the memory is not possible or efficient. Iterators provide
a way to bring the data into memory one item at a time.
+12
View File
@@ -0,0 +1,12 @@
#generators1.py
def my_gen():
yield 'A'
yield 'B'
yield 'C'
if(__name__ == "__main__"):
iter1 = my_gen()
print(iter1.__next__())
print(next(iter1))
print(iter1.__next__())
+19
View File
@@ -0,0 +1,19 @@
#generator2.py
class Week:
def __init__(self):
self.days = {1:'Monday', 2: "Tuesday",
3:"Wednesday", 4: "Thursday",
5:"Friday", 6:"Saturday", 7:"Sunday"}
def week_gen(self):
for x in self.days:
yield self.days[x]
if(__name__ == "__main__"):
wk = Week()
iter1 = wk.week_gen()
iter2 = iter(wk.week_gen())
print(iter1.__next__())
print(iter2.__next__())
print(next(iter1))
print(next(iter2))
+7
View File
@@ -0,0 +1,7 @@
#generator3.py
L = [1,2,3,4,5,6,7,8,9,0]
f1 = [x+1 for x in L]
g1 = (x+1 for x in L)
print(g1.__next__())
print(g1.__next__())
+14
View File
@@ -0,0 +1,14 @@
#generator4.py
def prime_gen(num):
for cand in range(2, num+1):
for i in range (2, cand):
if (cand % i) == 0:
break
else:
yield cand
def x2_gen(list2):
for num in list2:
yield num*num
print(sum(x2_gen(prime_gen(5))))
+20
View File
@@ -0,0 +1,20 @@
#iterator1.py
#example 1: iterating on a list
for x in [1,2,3]:
print(x)
#example 2: iterating on a string
for x in "Python for Geeks":
print(x, end="")
print('')
#example 3: iterating on a dictionary
week_days = {1:'Mon', 2:'Tue',
3:'Wed', 4:'Thu',
5:'Fri', 6:'Sat', 7:'Sun'}
for k in week_days:
print(k, week_days[k])
#example 4: iterating on a file
for row in open('abc.txt'):
print(row, end="")
+25
View File
@@ -0,0 +1,25 @@
#iterator2.py
class Week:
def __init__(self):
self.days = {1:'Monday', 2: "Tuesday",
3:"Wednesday", 4: "Thursday",
5:"Friday", 6:"Saturday", 7:"Sunday"}
self._index = 1
def __iter__(self):
self._index = 1
return self
def __next__(self):
if self._index < 1 | self._index > 8:
raise StopIteration
else:
ret_value = self.days[self._index]
self._index +=1
return ret_value
if(__name__ == "__main__"):
wk = Week()
for day in wk:
print(day)
+29
View File
@@ -0,0 +1,29 @@
#iterator3.py
class Week:
def __init__(self):
self.days = {1:'Monday', 2: "Tuesday",
3:"Wednesday", 4: "Thursday",
5:"Friday", 6:"Saturday", 7:"Sunday"}
self._index = 1
def __iter__(self):
self._index = 1
return self
def __next__(self):
if self._index < 1 | self._index > 8:
raise StopIteration
else:
ret_value = self.days[self._index]
self._index +=1
return ret_value
if(__name__ == "__main__"):
wk = Week()
iter1 = iter(wk)
iter2 = iter(wk)
print(iter1.__next__())
print(iter2.__next__())
print(next(iter1))
print(next(iter2))
+34
View File
@@ -0,0 +1,34 @@
#iterator4.py
class Week:
def __init__(self):
self.days = {1: 'Monday', 2: "Tuesday",
3: "Wednesday", 4: "Thursday",
5: "Friday", 6: "Saturday", 7: "Sunday"}
def __iter__(self):
return WeekIterator(self.days)
class WeekIterator:
def __init__(self, dayss):
self.days_ref = dayss
self._index = 1
def __iter__(self):
return self;
def __next__(self):
if self._index < 1 | self._index > 8:
raise StopIteration
else:
ret_value = self.days_ref[self._index]
self._index +=1
return ret_value
if(__name__ == "__main__"):
wk = Week()
iter1 = iter(wk)
iter2 = iter(wk)
print(iter1.__next__())
print(iter2.__next__())
print(next(iter1))
print(next(iter2))
+6
View File
@@ -0,0 +1,6 @@
#logging1.py
import logging
#logging.basicConfig(level=logging.DEBUG)
logging.debug("This is a debug message")
logging.warning("This is a warning message")
logging.info("This is an info message")
+9
View File
@@ -0,0 +1,9 @@
#logging2.py
import logging
logger1 = logging.getLogger("my_logger")
logging.basicConfig()
logger1.setLevel(logging.INFO)
logger1.warning("This is a warning message")
logger1.info("This is a info message")
logger1.debug("This is a debug messag")
logging.info("This is an info message")
+12
View File
@@ -0,0 +1,12 @@
#logging3.py
import logging
logger = logging.getLogger('my_logger')
my_handler = logging.StreamHandler()
my_formatter = logging.Formatter('%(asctime)s - '
'%(name)s - %(levelname)s - %(message)s')
my_handler.setFormatter(my_formatter)
logger.addHandler(my_handler)
logger.setLevel(logging.INFO)
logger.warning("This is a warning message")
logger.info("This is an info message")
logger.debug("This is a debug message")
+11
View File
@@ -0,0 +1,11 @@
#logging3A.py
import logging
logger = logging.getLogger('my_logger')
logging.basicConfig(handlers=[logging.StreamHandler()],
format="%(asctime)s - %(name)s - "
"%(levelname)s - %(message)s",
level=logging.INFO)
logger.warning("This is a warning message")
logger.info("This is an info message")
logger.debug("This is a debug message")
+10
View File
@@ -0,0 +1,10 @@
#logging4.py
import logging
logging.basicConfig(filename='logs/logging4.log'
,level=logging.DEBUG)
logger = logging.getLogger('my_logger')
logger.setLevel(logging.INFO)
logger.warning("This is a warning message")
logger.info("This is a info message")
logger.debug("This is a debug message")
+27
View File
@@ -0,0 +1,27 @@
#logging5.py
import logging
logger = logging.getLogger('my_logger')
logger.setLevel(logging.DEBUG)
console_handler = logging.StreamHandler()
file_handler = logging.FileHandler("logs/logging5.log")
#setting logging levels at the handler level
console_handler.setLevel(logging.DEBUG)
file_handler.setLevel(logging.INFO)
#creating separate formatter for two handlers
console_formatter = logging.Formatter(
'%(name)s - %(levelname)s - %(message)s')
file_formatter = logging.Formatter('%(asctime)s - '
'%(name)s - %(levelname)s - %(message)s')
#adding formatters to the handler
console_handler.setFormatter(console_formatter)
file_handler.setFormatter(file_formatter)
#adding handlers to the logger
logger.addHandler(console_handler)
logger.addHandler(file_handler)
logger.error("This is an error message")
logger.warning("This is a warning message")
logger.info("This is a info message")
logger.debug("This is a debug message")
+26
View File
@@ -0,0 +1,26 @@
version: 1
formatters:
console_formatter:
format: '%(name)s - %(levelname)s - %(message)s'
file_formatter:
format: '%(asctime)s - %(name)s - %(levelname)s - %(message)s'
handlers:
console_handler:
class: logging.StreamHandler
level: DEBUG
formatter: console_formatter
stream: ext://sys.stdout
file_handler:
class: logging.FileHandler
level: INFO
formatter: file_formatter
filename: logs/logging6.log
loggers:
my_logger:
level: DEBUG
handlers: [console_handler, file_handler]
propagate: no
root:
level: ERROR
handlers: [console_handler]
+15
View File
@@ -0,0 +1,15 @@
#logging6.py
import logging
import logging.config
import yaml
with open('logging6.conf.yaml', 'r') as f:
config = yaml.safe_load(f.read())
logging.config.dictConfig(config)
logger = logging.getLogger('my_logger')
logger.error("This is an error message")
logger.warning("This is a warning message")
logger.info("This is a info message")
logger.debug("This is a debug message")
+2
View File
@@ -0,0 +1,2 @@
2021-02-02 16:56:14,794 - my_logger - WARNING - This is a warning message
2021-02-02 16:56:14,794 - my_logger - INFO - This is a info message
+6
View File
@@ -0,0 +1,6 @@
WARNING:my_logger:This is a warning message
INFO:my_logger:This is a info message
WARNING:my_logger:This is a warning message
INFO:my_logger:This is a info message
WARNING:my_logger:This is a warning message
INFO:my_logger:This is a info message
+3
View File
@@ -0,0 +1,3 @@
2021-02-02 17:57:27,716 - my_logger - ERROR - This is an error message
2021-02-02 17:57:27,716 - my_logger - WARNING - This is a warning message
2021-02-02 17:57:27,716 - my_logger - INFO - This is a info message
+4
View File
@@ -0,0 +1,4 @@
2021-02-02 18:35:45,372 - my_logger - ERROR - This is an error message
2021-02-02 18:35:45,373 - my_logger - WARNING - This is a warning message
2021-02-02 18:35:45,373 - my_logger - INFO - This is a info message