Как да обработваме файлове в Python

Във всеки език за програмиране обработката на файлове е важен аспект. Освен това Python поддържа работа с файлове в различни режими – като четене и писане на файлове и др.

До края на този урок ще можете да:

  • отваряне и четене на файлове в Python,
  • чете редове от текстов файл,
  • запис и добавяне към файлове, и
  • използвайте контекстни мениджъри за работа с файлове в Python.

Как да четем файл в Python

За да отворите файл в Python, можете да използвате общия синтаксис: open(‘file_name’,’mode’).

  • Тук file_name е името на файла.

Забележка: Ако файлът, който искате да отворите, е в текущата работна директория, можете да споменете само името на файла. Ако е в друга папка във вашата работна среда, трябва да включите пътя до файла.

  • Режимът на параметъра указва режима, в който искате да отворите файла.

Режимът по подразбиране за отваряне на файл е четене—означено с буквата ‘r’. Въпреки това е препоръчителна практика да посочите изрично режима.

Преди да започнем, нека да разгледаме файла lib.txt, който ще използваме в този пример.

📁 Изтеглете текстовия файл и кода, използвани в този урок от това репо на GitHub.

Кодовият фрагмент по-долу показва как можете да отворите текстов файл „lib.txt“ в Python с помощта на функцията open() и да прочетете съдържанието му.

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

В горния пример,

  • Функцията open() връща файлов обект и ние избираме да го наричаме файл.
  • След това извикваме метода read() във файла.
  • Променливата contents вече съдържа съдържанието на файла. И го отпечатваме.
  • Накрая затваряме файла.
  Къде е Touch ID на iPhone X?

Въпреки това, ако забравите да затворите файла, ще има възможна загуба на ресурси. Ако работите с голям брой такива файлове, може да има значително използване на паметта. Това е така, защото сте отворили няколко файла, но не сте затворили нито един от тях.

Сега нека научим по-добър начин за отваряне на файлове с помощта на контекстни мениджъри. Кодовият фрагмент по-долу показва как можете да ги използвате.

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

Когато използвате мениджъри на контакти за работа с файлове, не е необходимо да използвате метода close(). Файловете се затварят автоматично след приключване на I/O операцията.

Как да четем редове от файл в Python

В нашия примерен текстов файл имахме само няколко реда. Така че четенето на цялото съдържание на файла наведнъж не беше проблем.

Въпреки това, когато трябва да четете големи файлове, използването на метода read(), както е показано по-горе, може да не е много ефективно.

Всъщност, ако текстовият файл е с много голям размер, скоро може да ви свърши паметта. Ето защо може да искате да четете редове само за четене от текстов файл и ще научите как да направите това в този раздел.

Използване на метода readline() на Python за четене на редове от файл

Методът readline() чете ред по ред от файла.

Изпълнете следния кодов фрагмент.

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:

Можете да видите, че след първото извикване на метода readline(), първият ред във файла се отпечатва. И второто извикване на метода readline() връща втория ред във файла.

Това е така, защото след първото извикване на метода указателят на файла е в началото на втория ред.

В Python можете да използвате метода tell(), за да получите текущото местоположение на указателя на файла. И за да преместите указателя на файла на определено място, можете да използвате метода seek().

В кодовия фрагмент по-долу използваме f.seek(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!

Използване на метода readlines() на Python за четене на редове от файл

Има друг тясно свързан метод, наречен readlines().

  Как да визуализирате цвят от неговия шестнадесетичен код

Когато стартирате следния кодов фрагмент, ще видите, че методът readlines() връща списък с всички редове във файла.

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']

Използване на Python for Loop за четене на редове от файл

За да прочетете редовете от текстов файл, можете също да използвате цикъла for.

След като имате файлов обект, можете да използвате for цикъл, за да обикаляте съдържанието на файла – ред по ред и да ги отпечатвате, както е показано по-долу. Забележете как имаме достъп само до един ред наведнъж и не четем цялото съдържание на файла.

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

Забележка: Когато използвате функцията print() на Python, разделителят по подразбиране е знак за нов ред — ‘n’. Но в оригиналния файл нямаме тези нови редове. Затова задайте аргумента за разделител на празен низ: end = ”, за да отпечатате съдържанието на файла такова, каквото е.

Как да четете части от съдържание от файл в Python

В Python можете също да изберете да четете съдържанието на файла по отношение на малки парчета.

Прочетете кода по-долу:

  • Тук задаваме chunk_size на 50. Това означава, че първите 50 знака във файла ще бъдат прочетени и ние също ги отпечатваме.
  • Сега извикайте метода tell() на файловия обект f. Можете да видите, че указателят на файла вече е на позиция 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

Можете също да използвате тази техника, за да прочетете целия файл по отношение на малки части.

  Което е най-доброто [Comparison]

Следният кодов фрагмент показва как можете да направите това.

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

Тук използваме цикъл while, за да прочетем съдържанието на файла. Ние четем съдържанието на файла в парче с размер 50, докато стигнем до края на файла. ✅

Как да пишете във файл в Python

За да пишете в текстов файл в Python, трябва да го отворите в режим на запис – като посочите ‘w’.

Кодовият фрагмент по-долу показва как да го направите.

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

Ще видите, че „new_file.txt“ е създаден във вашата работна директория.

Сега изпълнете горната кодова клетка отново.

Във вашия терминал изпълнете следната команда:

cat new_file.txt

# Output: Hello, Python!

В идеалния случай сме писали във файла два пъти. И така, здравей, Python! трябваше да се отпечата два пъти, нали?

Но ще видите, че е отпечатано само веднъж. Е, това е така, защото когато отворите файл в режим на запис (w), вие основно презаписвате съдържанието на файла с ново съдържание.

Ако искате да добавите към края на файла, без да презаписвате съществуващо съдържание, трябва да отворите файла в режим на добавяне. И ще видите как да направите това в следващия раздел.

Как да добавите към файл в Python

Ако искате да добавите съдържание към файл—без презаписване, отворете го в режим на добавяне.

За да направите това, използвайте `’a’—a за добавяне—и посочете изрично режима.

След това изпълнете следната кодова клетка два пъти.

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

Забележете как сега текстът се отпечатва два пъти, когато добавихме към файла.

cat new_file.txt

# Output: Hello, Python!Hello, Python!

Заключение

Нека набързо да обобщим какво разгледахме в този урок.

  • Научихте общите файлови I/O операции като четене, писане и добавяне към файл.
  • Освен това научихте как да използвате метода seek(), за да преместите указателя на файла до определена позиция и
  • как да използвате метода tell() за извличане на текущата позиция на указателя на файла.

Надявам се, че сте намерили този урок за полезен. Сега, след като научихте как да работите с текстови файлове в Python, научете как да работите с JSON файлове в Python.

Свързани:

Проверете дължината на списък в Python в 3 стъпки.