with ಸ್ಟೇಟ್ಮೆಂಟ್ (ಕಾಂಟೆಕ್ಸ್ಟ್ ಮ್ಯಾನೇಜರ್)
ಪೈಥಾನ್ನಲ್ಲಿ, with ಸ್ಟೇಟ್ಮೆಂಟ್ ಅನ್ನು ಕಾಂಟೆಕ್ಸ್ಟ್ ಮ್ಯಾನೇಜರ್ಗಳೊಂದಿಗೆ (Context Managers) ಬಳಸಲಾಗುತ್ತದೆ. ಫೈಲ್ ಹ್ಯಾಂಡ್ಲಿಂಗ್ನಲ್ಲಿ, ಇದು ಸಂಪನ್ಮೂಲಗಳನ್ನು (resources) ಸುರಕ್ಷಿತವಾಗಿ ಮತ್ತು ಪರಿಣಾಮಕಾರಿಯಾಗಿ ನಿರ್ವಹಿಸಲು ಸಹಾಯ ಮಾಡುತ್ತದೆ.
with ಸ್ಟೇಟ್ಮೆಂಟ್ನ ಪ್ರಮುಖ ಪ್ರಯೋಜನವೆಂದರೆ, ಅದು ಬಳಸಿದ ಸಂಪನ್ಮೂಲವನ್ನು (ಉದಾ: ಫೈಲ್) ಸ್ವಯಂಚಾಲಿತವಾಗಿ ಬಿಡುಗಡೆ ಮಾಡುತ್ತದೆ (ಉದಾ: ಫೈಲ್ ಅನ್ನು ಮುಚ್ಚುತ್ತದೆ), with ಬ್ಲಾಕ್ನ ಕಾರ್ಯಗತಗೊಳಿಸುವಿಕೆ ಮುಗಿದ ತಕ್ಷಣ. ದೋಷ (exception) ಸಂಭವಿಸಿದರೂ ಸಹ ಇದು ಖಚಿತವಾಗಿ ನಡೆಯುತ್ತದೆ.
with ಸ್ಟೇಟ್ಮೆಂಟ್ ಏಕೆ ಉತ್ತಮ?
open() ಮತ್ತು close() ಅನ್ನು ಹಸ್ತಚಾಲಿತವಾಗಿ ಬಳಸುವಾಗ ಇರುವ ಸಮಸ್ಯೆಗಳನ್ನು ಪರಿಗಣಿಸಿ:
f = open('my_file.txt', 'w')
# ಈ ಕೆಳಗಿನ ಸಾಲಿನಲ್ಲಿ ದೋಷ ಸಂಭವಿಸಿದರೆ...
result = 10 / 0 # ZeroDivisionError
f.write("Hello")
# ...f.close() ಎಂದಿಗೂ ಕರೆಯಲ್ಪಡುವುದಿಲ್ಲ.
f.close()
with ಸ್ಟೇಟ್ಮೆಂಟ್ ಈ ಸಮಸ್ಯೆಯನ್ನು ಪರಿಹರಿಸುತ್ತದೆ.
with ಸ್ಟೇಟ್ಮೆಂಟ್ ಸಿಂಟ್ಯಾಕ್ಸ್
with open('file_name.txt', 'mode') as file_variable:
# file_variable ಬಳಸಿ ಫೈಲ್ನೊಂದಿಗೆ ಕೆಲಸ ಮಾಡಿ
# ...
# ಈ ಬ್ಲಾಕ್ನಿಂದ ಹೊರಬಂದ ತಕ್ಷಣ, ಫೈಲ್ ಸ್ವಯಂಚಾಲಿತವಾಗಿ ಮುಚ್ಚಲ್ಪಡುತ್ತದೆ.
ಉದಾಹರಣೆ 1: ಫೈಲ್ಗೆ ಬರೆಯುವುದು
lines_to_write = ["ಮೊದಲ ಸಾಲು\n", "ಎರಡನೇ ಸಾಲು\n"]
with open('example.txt', 'w', encoding='utf-8') as f:
f.writelines(lines_to_write)
print("ಫೈಲ್ಗೆ ಬರೆಯಲಾಗುತ್ತಿದೆ...")
# ಇಲ್ಲಿ ಫೈಲ್ ಮುಚ್ಚಲ್ಪಟ್ಟಿದೆ.
print("`with` ಬ್ಲಾಕ್ನ ಹೊರಗೆ, ಫೈಲ್ ಮುಚ್ಚಲ್ಪಟ್ಟಿದೆಯೇ?", f.closed) # Output: True
ಉದಾಹರಣೆ 2: ಫೈಲ್ನಿಂದ ಓದುವುದು
try:
with open('example.txt', 'r', encoding='utf-8') as f:
content = f.read()
print("ಫೈಲ್ನ ವಿಷಯ:")
print(content)
except FileNotFoundError:
print("ದೋಷ: ಫೈಲ್ ಕಂಡುಬಂದಿಲ್ಲ.")
ಅನೇಕ ಫೈಲ್ಗಳನ್ನು ಒಂದೇ with ಸ್ಟೇಟ್ಮೆಂಟ್ನಲ್ಲಿ ತೆರೆಯುವುದು
ಪೈಥಾನ್ 3.1+ (ಮತ್ತು 2.7+) ನಿಂದ, ನೀವು ಒಂದೇ with ಸ್ಟೇಟ್ಮೆಂಟ್ನಲ್ಲಿ ಅನೇಕ ಫೈಲ್ಗಳನ್ನು ತೆರೆಯಬಹುದು.
# ಒಂದು ಫೈಲ್ನಿಂದ ಓದಿ, ಮತ್ತೊಂದು ಫೈಲ್ಗೆ ಬರೆಯುವುದು
with open('source.txt', 'r') as source_file, open('destination.txt', 'w') as dest_file:
content = source_file.read()
dest_file.write(content)
with ಸ್ಟೇಟ್ಮೆಂಟ್ಗಳಿಗಿಂತ ಹೆಚ್ಚು ಸ್ವಚ್ಛವಾಗಿದೆ.
ಸಾರಾಂಶ
- ಸ್ವಯಂಚಾಲಿತ ಕ್ಲೀನಪ್:
withಸ್ಟೇಟ್ಮೆಂಟ್, ಫೈಲ್ಗಳನ್ನು ಸ್ವಯಂಚಾಲಿತವಾಗಿ ಮುಚ್ಚುತ್ತದೆ. - ಸುರಕ್ಷತೆ: ದೋಷಗಳು ಸಂಭವಿಸಿದರೂ ಸಹ ಕ್ಲೀನಪ್ ಖಚಿತವಾಗಿರುತ್ತದೆ.
- ಸ್ವಚ್ಛ ಕೋಡ್:
try...finallyಬ್ಲಾಕ್ಗಳನ್ನು ಬರೆಯುವ ಅಗತ್ಯವನ್ನು ತಪ್ಪಿಸುತ್ತದೆ, ಇದು ಕೋಡ್ ಅನ್ನು ಹೆಚ್ಚು ಓದಬಲ್ಲಂತೆ ಮಾಡುತ್ತದೆ.
ಫೈಲ್ಗಳು, ನೆಟ್ವರ್ಕ್ ಸಂಪರ್ಕಗಳು, ಅಥವಾ ಡೇಟಾಬೇಸ್ ಸಂಪರ್ಕಗಳಂತಹ ಸಂಪನ್ಮೂಲಗಳೊಂದಿಗೆ ಕೆಲಸ ಮಾಡುವಾಗ, with ಸ್ಟೇಟ್ಮೆಂಟ್ ಅನ್ನು ಬಳಸುವುದು ಪೈಥಾನ್ನಲ್ಲಿ ಅತ್ಯುತ್ತಮ ಮತ್ತು ಶಿಫಾರಸು ಮಾಡಲಾದ ಅಭ್ಯಾಸವಾಗಿದೆ.