Під час читання або запису у файл режим доступу визначає тип операцій, можливих у відкритому файлі. Це стосується того, як файл буде використовуватися після його відкриття. Ці режими також визначають розташування дескриптора файлу у файлі. Визначення цих режимів доступу таке:
- Лише додавання («a»): відкрити файл для запису. Додати та прочитати («a+»): відкрити файл для читання та запису.
Коли файл відкривається в режимі додавання в Python, маркер розташовується в кінці файлу. Дані, що записуються, будуть вставлені в кінці, після наявних даних.
Приклад 1: Програма на Python для ілюстрації режиму додавання та запису.
Python3
file1>=> open>(>'myfile.txt'>,>'w'>)> L>=> [>'This is Delhi
'>,>'This is Paris
'>,>'This is London'>]> file1.writelines(L)> file1.close()> # Append-adds at last> file1>=> open>(>'myfile.txt'>,>'a'>)># append mode> file1.write(>'Today
'>)> file1.close()> file1>=> open>(>'myfile.txt'>,>'r'>)> print>(>'Output of Readlines after appending'>)> print>(file1.read())> print>()> file1.close()> # Write-Overwrites> file1>=> open>(>'myfile.txt'>,>'w'>)># write mode> file1.write(>'Tomorrow
'>)> file1.close()> file1>=> open>(>'myfile.txt'>,>'r'>)> print>(>'Output of Readlines after writing'>)> print>(file1.read())> print>()> file1.close()> |
>
>
Вихід:
Output of Readlines after appending This is Delhi This is Paris This is LondonToday Output of Readlines after writing Tomorrow>
приклад 2: Додати дані з нового рядка
У наведеному вище прикладі обробка файлів , можна побачити, що дані не додаються з нового рядка. Це можна зробити, написавши у файл символ нового рядка « ».
Python3
# Python program to illustrate> # append from new line> file1>=> open>(>'myfile.txt'>,>'w'>)> L>=> [>'This is Delhi
'>,>'This is Paris
'>,>'This is London'>]> file1.writelines(L)> file1.close()> # Append-adds at last> # append mode> file1>=> open>(>'myfile.txt'>,>'a'>)> # writing newline character> file1.write(>'
'>)> file1.write(>'Today'>)> # without newline character> file1.write(>'Tomorrow'>)> file1>=> open>(>'myfile.txt'>,>'r'>)> print>(>'Output of Readlines after appending'>)> print>(file1.read())> print>()> file1.close()> |
>
>
Вихід:
Output of Readlines after appending This is Delhi This is Paris This is London TodayTomorrow>
Примітка: ‘ ’ розглядається як спеціальний двобайтовий символ.
приклад 3: Використання оператора With у Python
із заявою використовується в обробці винятків, щоб зробити код чистішим і більш читабельним. Це спрощує керування загальними ресурсами, такими як файлові потоки. На відміну від наведених вище реалізацій, немає необхідності викликати file.close() під час використання оператора with. Сам оператор with забезпечує належне отримання та вивільнення ресурсів.
Python3
# Program to show various ways to> # append data to a file using> # with statement> L>=> [>'This is Delhi
'>,>'This is Paris
'>,>'This is London
'>]> # Writing to file> with>open>(>'myfile.txt'>,>'w'>) as file1:> ># Writing data to a file> >file1.write(>'Hello
'>)> >file1.writelines(L)> # Appending to file> with>open>(>'myfile.txt'>,>'a'>) as file1:> >file1.write(>'Today'>)> # Reading from file> with>open>(>'myfile.txt'>,>'r+'>) as file1:> ># Reading form a file> >print>(file1.read())> |
>
>
Вихід:
Hello This is Delhi This is Paris This is London Today>
Примітка: Щоб дізнатися більше про заяву натисніть тут .
Використання модуля shutil:
Цей підхід використовує метод shutil.copyfileobj() для додавання вмісту іншого файлу (source_file) до «file.txt». Це може бути корисним, якщо ви хочете додати вміст одного файлу до іншого без необхідності попереднього читання вмісту в пам’ять.
Підхід:
Код використовує функцію shutil.copyfileobj() для копіювання вмісту об’єкта source_file у новий файл під назвою file.txt. Оператор with використовується для відкриття та автоматичного закриття файлу за допомогою файлового об’єкта f.
Часова складність:
Часова складність функції shutil.copyfileobj() пропорційна розміру файлу, який копіюється, оскільки їй потрібно читати та записувати кожен байт файлу. Таким чином, часова складність коду дорівнює O(n), де n – розмір файлу source_file.
Космічна складність:
Складність простору коду дорівнює O(1), оскільки він не виділяє жодної додаткової пам’яті, крім того, що потрібно для файлових об’єктів source_file та f. Функція shutil.copyfileobj() копіює вміст файлу частинами, тому їй не потрібно завантажувати весь файл у пам’ять одразу.
Загалом, код має лінійну часову складність і постійну просторову складність, де часова складність пропорційна розміру файлу, що копіюється.
Python3
import> shutil> with>open>(>'file.txt'>,>'a'>) as f:> >shutil.copyfileobj(source_file, f)> |
>
>
лисиця проти вовка