Како руковати датотекама у Питхон-у

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

До краја овог водича моћи ћете да:

  • отварајте и читајте датотеке у Питхон-у,
  • читати редове из текстуалне датотеке,
  • писати и додавати фајловима, и
  • користите менаџере контекста за рад са датотекама у Питхон-у.

Како читати датотеку у Питхон-у

Да бисте отворили датотеку у Питхон-у, можете користити општу синтаксу: опен(‘филе_наме’,’моде’).

  • Овде је име_датотеке име датотеке.

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

  • Режим параметара одређује режим у којем желите да отворите датотеку.

Подразумевани режим за отварање датотеке је читање—означено словом ‘р’. Међутим, препоручена је пракса да експлицитно наведете режим.

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

📁 Преузмите текстуалну датотеку и код који се користи у овом водичу са овај ГитХуб репо.

Исечак кода у наставку показује како можете да отворите текстуалну датотеку ‘либ.ткт’ у Питхон-у користећи функцију опен() и прочитате њен садржај.

file = open('lib.txt','r')
contents = file.read()
print(contents)
file.close()


# Output
Hello, there!
Here are a few helpful Python libraries:
1) NumPy
2) pandas
3) matplotlib
4) seaborn
5) scikit-learn
6) BeautifulSoup
7) Scrapy
8) nltk
9) Bokeh
10) statsmodels

У горњем примеру,

  • Функција опен() враћа објекат датотеке, а ми бирамо да га назовемо датотеком.
  • Затим позивамо метод реад() у датотеци.
  • Садржај променљиве сада садржи садржај датотеке. И ми га штампамо.
  • На крају затварамо датотеку.
  Топ 8 алата за инфраструктуру као код (ИаЦ) за 2023

Међутим, ако заборавите да затворите датотеку, може доћи до губитка ресурса. Ако радите са великим бројем таквих датотека, може доћи до значајног коришћења меморије. То је зато што сте отворили неколико датотека, али нисте затворили ниједну.

Сада, хајде да научимо бољи начин за отварање датотека помоћу менаџери контекста. Исечак кода у наставку показује како можете да их користите.

with open('lib.txt','r') as f:
  contents = f.read()
  print(contents)

Када користите менаџере контаката за рад са датотекама, не морате да користите метод цлосе(). Датотеке се аутоматски затварају након завршетка И/О операције.

Како читати линије из датотеке у Питхон-у

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

Међутим, када треба да читате велике датотеке, коришћење методе реад(), као што је приказано изнад, можда неће бити веома ефикасно.

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

Коришћење Питхон-овог реадлине() метода за читање редова из датотеке

Метод реадлине() чита један по ред из датотеке.

Покрените следећи исечак кода.

with open('lib.txt','r') as f:
  line = f.readline()
  print(line)
  line = f.readline()
  print(line)


# Output
Hello, there!

Here are a few helpful Python libraries:

Можете видети да се након првог позива методе реадлине() исписује први ред у датотеци. А други позив методе реадлине() враћа други ред у датотеци.

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

У Питхон-у можете користити методу телл() да бисте добили тренутну локацију показивача датотеке. А да бисте померили показивач датотеке на одређену локацију, можете користити методу сеек().

У доњем исечку кода користимо ф.сеек(0) након првог позива методе. Ово помера показивач датотеке на почетак текстуалне датотеке. Због тога се оба пута исписује први ред у датотеци.

with open('lib.txt','r') as f:
  line = f.readline()
  print(line)
  f.seek(0)
  line = f.readline()
  print(line)


# Output
Hello, there!

Hello, there!

Коришћење Питхон-овог реадлинес() метода за читање редова из датотеке

Постоји још један блиско повезан метод који се зове реадлинес().

  7 алата (бесплатно + плаћено) за надгледање здравља активног именика

Када покренете следећи исечак кода, видећете да метода реадлинес() враћа листу свих линија у датотеци.

with open('lib.txt','r') as f:
  lines = f.readlines()
  print(lines)


# Output
['Hello, there!n', 'Here are a few helpful Python libraries:n', 
'1) NumPyn', '2) pandasn', '3) matplotlibn', 
'4) seabornn', '5) scikit-learnn', '6) BeautifulSoupn', 
'7) Scrapyn', '8) nltkn', '9) Bokehn', '10) statsmodelsn', 'n']

Коришћење Питхон-ове фор петље за читање линија из датотеке

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

Једном када имате објекат датотеке, можете да користите петљу фор да бисте итерирали кроз садржај датотеке – један по ред и одштампали их, као што је приказано испод. Обратите пажњу на то како приступамо само једном реду у исто време и не читамо цео садржај датотеке.

with open('lib.txt','r') as f:
  for line in f:
    print(line, end='')

Напомена: Када користите Питхон-ову функцију принт(), подразумевани сепаратор је знак за нови ред—н. Али у оригиналном фајлу, немамо ове нове линије. Зато поставите аргумент сепаратора на празан стринг: енд = ” да бисте одштампали садржај датотеке онакав какав јесте.

Како читати делове садржаја из датотеке у Питхон-у

У Питхон-у такође можете изабрати да читате садржај датотеке у смислу малих комада.

Прочитајте код у наставку:

  • Овде постављамо цхунк_сизе на 50. То значи да ће првих 50 знакова у датотеци бити прочитано, а ми их такође штампамо.
  • Сада позовите метод телл() на објекту датотеке ф. Можете видети да је показивач датотеке сада на позицији 51— што је очекивано.
chunk_size = 50
with open('lib.txt','r') as f:
  chunk = f.read(chunk_size)
  print(chunk)
  current = f.tell()
  print(f"Current position of file pointer: {current}")

# Output
Hello, there!
Here are a few helpful Python librar
Current position of file pointer: 51

Такође можете користити ову технику за читање целе датотеке у смислу малих комада.

  11 најбоље оцењених апликација за фотографије за пасош за иПхоне да бисте рекли сир и путовали лако

Следећи исечак кода показује како то можете да урадите.

chunk_size = 50
with open('lib.txt','r') as f:
  chunk = f.read(chunk_size)
  print(chunk,end='')

  while(len(chunk)>0):
    chunk = f.read(chunk_size)
    print(chunk,end='')

# Output
Hello, there!
Here are a few helpful Python libraries:
1) NumPy
2) pandas
3) matplotlib
4) seaborn
5) scikit-learn
6) BeautifulSoup
7) Scrapy
8) nltk
9) Bokeh
10) statsmodels

Овде користимо вхиле петљу за читање садржаја датотеке. Читамо садржај датотеке у комаду величине 50 док не дођемо до краја датотеке. ✅

Како писати у датотеку у Питхон-у

Да бисте писали у текстуалну датотеку у Питхон-у, требало би да је отворите у режиму писања—наводећи ‘в’.

Исечак кода испод показује како се то ради.

with open('new_file.txt','w') as f:
  f.write('Hello, Python!')

Видећете да је ‘нев_филе.ткт’ креиран у вашем радном директоријуму.

Сада покрените горњу ћелију кода још једном.

У свом терминалу покрените следећу команду:

cat new_file.txt

# Output: Hello, Python!

У идеалном случају, писали смо у датотеку два пута. Дакле, здраво, Питхон! требало је да се штампа два пута, зар не?

Али видећете да је штампан само једном. Па, то је зато што када отворите датотеку у режиму писања (в), ви у основи преписујете садржај датотеке новим садржајем.

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

Како додати датотеку у Питхон-у

Ако желите да додате садржај у датотеку — без преписивања, отворите је у режиму додавања.

Да бисте то урадили, користите `’а’—а за додавање—и експлицитно наведите режим.

Затим двапут покрените следећу ћелију кода.

with open('new_file.txt','a') as f:
  f.write('Hello, Python!')

Обратите пажњу на то како се текст штампа двапут сада, као што смо додали датотеци.

cat new_file.txt

# Output: Hello, Python!Hello, Python!

Закључак

Хајде да брзо сумирамо оно што смо прошли у овом водичу.

  • Научили сте уобичајене И/О операције датотека као што су читање, писање и додавање у датотеку.
  • Поред тога, такође сте научили како да користите метод сеек() да померите показивач датотеке на одређену позицију, и
  • како користити методу телл() за преузимање тренутне позиције показивача датотеке.

Надам се да вам је овај водич био користан. Сада када сте научили како да радите са текстуалним датотекама у Питхон-у, научите како да радите са ЈСОН датотекама у Питхон-у.

Повезан:

Проверите дужину листе у Питхон-у у 3 корака.