Улаз / излаз датотеке Питхон: Читање и писање датотека у Питхону

У овом упутству ћете научити о операцијама Питхон датотека. Тачније, отварање датотеке, читање из ње, писање у њу, затварање и разне методе датотека којих бисте требали бити свесни.

Видео: Читање и писање датотека на Питхону

Фајлови

Датотеке су именоване локације на диску ради складиштења сродних информација. Користе се за трајно чување података у трајној меморији (нпр. Чврсти диск).

Будући да је меморија са случајним приступом (РАМ) променљива (која губи податке када се рачунар искључи), датотеке користимо за будућу употребу података трајним складиштењем.

Када желимо да читамо из датотеке или пишемо у њу, прво је морамо отворити. Када завршимо, потребно га је затворити како би се ослободили ресурси који су повезани са датотеком.

Стога се у Питхону операција датотеке одвија следећим редоследом:

  1. Отворите датотеку
  2. Читање или писање (извођење операције)
  3. Затворите датотеку

Отварање датотека у Питхону

Питхон има уграђену open()функцију за отварање датотеке. Ова функција враћа објект датотеке, који се назива и ручицом, јер се користи за читање или модификовање датотеке у складу с тим.

 >>> f = open("test.txt") # open file in current directory >>> f = open("C:/Python38/README.txt") # specifying full path

Начин можемо одредити током отварања датотеке. У режиму одређујемо да ли желимо да читамо r, пишемо wили додајемо aдатотеку. Такође можемо одредити желимо ли датотеку отворити у текстуалном или бинарном режиму.

Подразумевано је читање у текстуалном режиму. У овом режиму добијамо низове приликом читања из датотеке.

С друге стране, бинарни режим враћа бајтове и то је начин који се користи када се ради са нетекстуалним датотекама попут слика или извршних датотека.

Моде Опис
r Отвара датотеку за читање. (Уобичајено)
w Отвара датотеку за писање. Ствара нову датотеку ако не постоји или је скраћује ако постоји.
x Отвара датотеку за ексклузивно стварање. Ако датотека већ постоји, операција не успева.
a Отвара датотеку за додавање на крај датотеке без да је скраћује. Креира нову датотеку ако она не постоји.
t Отвара се у текстуалном режиму. (Уобичајено)
b Отвара се у бинарном режиму.
+ Отвара датотеку за ажурирање (читање и писање)
 f = open("test.txt") # equivalent to 'r' or 'rt' f = open("test.txt",'w') # write in text mode f = open("img.bmp.webp",'r+b') # read and write in binary mode

За разлику од других језика, знак aне подразумева број 97 док није кодиран помоћу ASCII(или других еквивалентних кодирања).

Штавише, подразумевано кодирање зависи од платформе. У Виндовсима је, cp1252али utf-8у Линуку.

Дакле, не смемо се такође ослањати на подразумевано кодирање, јер ће се иначе наш код другачије понашати на различитим платформама.

Стога, када радите са датотекама у текстуалном режиму, топло се препоручује да наведете врсту кодирања.

 f = open("test.txt", mode='r', encoding='utf-8')

Затварање датотека у Питхону

Када завршимо са обављањем операција над датотеком, морамо правилно да затворимо датотеку.

Затварањем датотеке ослободиће се ресурси повезани са датотеком. То се ради помоћу close()методе доступне у Питхону.

Питхон има сакупљач смећа за чишћење необележених објеката, али не смемо се ослањати на њега да би затворио датотеку.

 f = open("test.txt", encoding = 'utf-8') # perform file operations f.close()

Овај метод није у потпуности сигуран. Ако се изузетак догоди када изводимо неку операцију са датотеком, код излази без затварања датотеке.

Сигурнији начин је употреба покушаја … коначно блокирања.

 try: f = open("test.txt", encoding = 'utf-8') # perform file operations finally: f.close()

На овај начин гарантујемо да је датотека правилно затворена, чак и ако се покрене изузетак који зауставља ток програма.

Најбољи начин да затворите датотеку је коришћењем withизјаве. Ово осигурава затварање датотеке када withсе изађе из блока унутар израза.

Не треба изричито позивати close()метод. То се врши интерно.

 with open("test.txt", encoding = 'utf-8') as f: # perform file operations

Писање у датотеке на Питхону

Да бисмо писали у датотеку на Питхону, морамо је отворити у режиму писања w, додавања aили ексклузивног креирања x.

Морамо бити опрезни са wрежимом, јер ће се он преписати у датотеку ако већ постоји. Због тога се бришу сви претходни подаци.

Писање низа или низа бајтова (за бинарне датотеке) врши се помоћу write()методе. Ова метода враћа број знакова записаних у датотеку.

 with open("test.txt",'w',encoding = 'utf-8') as f: f.write("my first file") f.write("This file") f.write("contains three lines")

Овај програм ће створити нову датотеку именовану test.txtу тренутном директоријуму ако она не постоји. Ако постоји, преписује се.

Морамо сами укључити знакове новог реда да бисмо разликовали различите редове.

Читање датотека у Питхону

Да бисмо прочитали датотеку на Питхону, морамо је отворити у rрежиму читања .

У ту сврху постоје разне методе. Методу можемо користити read(size)за читање података о величини података. Ако параметар сизе није наведен, он чита и враћа се до краја датотеке.

text.txtДатотеку коју смо написали у горњем одељку можемо прочитати на следећи начин:

 >>> f = open("test.txt",'r',encoding = 'utf-8') >>> f.read(4) # read the first 4 data 'This' >>> f.read(4) # read the next 4 data ' is ' >>> f.read() # read in the rest till end of file 'my first fileThis filecontains three lines' >>> f.read() # further reading returns empty sting ''

Видимо да read()метода враћа нови ред као ''. Када се дође до краја датотеке, добијамо празан низ за даље читање.

Помоћу seek()методе можемо променити тренутни курсор датотеке (положај) . Слично томе, tell()метода враћа нашу тренутну позицију (у броју бајтова).

 >>> f.tell() # get the current file position 56 >>> f.seek(0) # bring file cursor to initial position 0 >>> print(f.read()) # read the entire file This is my first file This file contains three lines

Датотеку можемо читати ред по ред помоћу петље фор. Ово је и ефикасно и брзо.

 >>> for line in f:… print(line, end = '')… This is my first file This file contains three lines

У овом програму, редови у самој датотеци садрже знак новог реда . Дакле, користимо крајњи параметар print()функције како бисмо избегли две нове линије приликом штампања.

Алтернативно, readline()методу можемо користити за читање појединачних редова датотеке. Ова метода чита датотеку до нове линије, укључујући знак нове линије.

 >>> f.readline() 'This is my first file' >>> f.readline() 'This file' >>> f.readline() 'contains three lines' >>> f.readline() ''

Lastly, the readlines() method returns a list of remaining lines of the entire file. All these reading methods return empty values when the end of file (EOF) is reached.

 >>> f.readlines() ('This is my first file', 'This file', 'contains three lines')

Python File Methods

There are various methods available with the file object. Some of them have been used in the above examples.

Here is the complete list of methods in text mode with a brief description:

Method Description
close() Closes an opened file. It has no effect if the file is already closed.
detach() Separates the underlying binary buffer from the TextIOBase and returns it.
fileno() Returns an integer number (file descriptor) of the file.
flush() Flushes the write buffer of the file stream.
isatty() Returns True if the file stream is interactive.
read(n) Reads at most n characters from the file. Reads till end of file if it is negative or None.
readable() Returns True if the file stream can be read from.
readline(n=-1) Reads and returns one line from the file. Reads in at most n bytes if specified.
readlines(n=-1) Reads and returns a list of lines from the file. Reads in at most n bytes/characters if specified.
seek(offset,from=SEEK_SET) Changes the file position to offset bytes, in reference to from (start, current, end).
seekable() Returns True if the file stream supports random access.
tell() Returns the current file location.
truncate(size=None) Resizes the file stream to size bytes. If size is not specified, resizes to current location.
writable() Returns True if the file stream can be written to.
write(s) Записује низ с у датотеку и враћа број написаних знакова.
линије за писање (линије) Записује листу редова у датотеку.

Занимљиви Чланци...