Як відкрити файл за допомогою оператора with
The з Ключове слово в Python використовується як менеджер контексту. Як і в будь-якій мові програмування, використання таких ресурсів, як операції з файлами або підключення до бази даних, є дуже поширеним. Але пропозиції цих ресурсів обмежені. Тому основна проблема полягає в тому, щоб переконатися, що ці ресурси звільнені після використання. Якщо їх не випустити, це призведе до витоку ресурсів і може призвести до уповільнення або збою системи.
Як ми знаємо, функція open() зазвичай використовується для обробки файлів у Python. Але стандартною практикою є використання контекстних менеджерів, наприклад із ключовими словами, для обробки файлів, оскільки вони автоматично звільняють файли після завершення використання.
Python із синтаксисом open():
Синтаксис:
з відкритим (шлях до файлу, режим, кодування) як файл:
…
шлях_файлу: Це шлях до файлу, який потрібно відкрити
режим: режим роботи над файлом. напр.: читати, писати тощо (представлено r, w, r+, w+, rb, wb тощо)
кодування: прочитати файл у правильному форматі кодування.
приклад 1: Простий приклад використання оператора with
У нас уже є назва файлу geeksforgeeks.txt у нашій системі та містить такі дані:
geeksforgeeks, txt
Тепер ми відкриємо файл і прочитаємо його вміст за допомогою оператора open():
Python3
with> open> (> 'geeksforgeeks.txt'> ,> 'r'> ) as gfg_file:> > file_content> => gfg_file.read()> > print> (file_content)> |
Вихід:
GeeksForGeeks is best for DSA
Примітка: Тут ми використали режим як r для читання даних, оскільки цільовий файл містить текстові дані. Якщо ми читаємо якийсь бінарний файл, нам потрібно використовувати рб як режим.
приклад 2: Ми також можемо використовувати з оператор для додавання або запису даних у файл.
Ми додамо рядок Привіт гікам! до нашого файлу geeksforgeeks.txt.
Python3
# appending string to file> with> open> (> 'geeksforgeeks.txt'> ,> 'a'> ) as gfg_file:> > gfg_file.write(> '
Hello Geeks!'> )> > # reading the file contents> # to verify if successfully appended the data> with> open> (> 'geeksforgeeks.txt'> ,> 'r'> ) as gfg_file:> > content> => gfg_file.read()> > print> (content)> |
Вихід:
GeeksForGeeks is best for DSA Hello Geeks!
Примітка: Ось ми використали a як режим відкриття файлу, це тому, що ми хочемо додати до файлу дані. Натомість, якби ми хотіли перезаписати дані файлу, ми б використали в режим.
Приклад 3: використання вкладеного оператора open для відкриття кількох файлів
links.txt
Ми визначили a links.txt файл, що містить кілька випадкових посилань. Ми відкриємо geeksforgeeks.txt файл, згаданий вище, і додайте вміст файлу посилань у geeksforgeeks.txt файл.
Python3
# appending string to file> with> open> (> 'geeksforgeeks.txt'> ,> 'a'> ) as gfg_file:> > gfg_file.write(> '
Hello Geeks!'> )> > with> open> (> 'links.txt'> ,> 'r'> ) as links_file:> > lines> => links_file.readlines()> > gfg_file.writelines(lines)> |
geeksforgeeks.txt вміст файлу після зміни:
geeksforgeeks, txt
Тут ми бачимо, що вміст links.txt файл додано до geeksforgeeks.txt файл після запуску сценарію.
Різниця між використанням open() і open()
Хоча функція використання ВІДЧИНЕНО() і з ВІДЧИНЕНО() точно так само, але є деякі важливі відмінності:
- Використовуючи open(), ми можемо використовувати обробник файлів, якщо файл не було явно закрито за допомогою file_handler.close() , але у випадку використання з менеджером контексту open() ми не можемо використовувати обробник файлів поза блоком with. Це підніме ValueError: операція введення-виведення із закритим файлом в такому разі.
- Під час використання open() нам потрібно явно закрити відкритий екземпляр файлу, інакше інші частини коду можуть зіткнутися з помилками під час відкриття того самого файлу. У open() закриття файлу обробляється менеджером контексту.
- Використання оператора контексту with open() робить код більш охайним, оскільки ми можемо легко відокремити блок коду за різницею у відступах. У випадку open() ми можемо пропустити закриття екземпляра файлу, це може спричинити витік пам’яті та інші помилки операцій введення-виведення.