PROGRAMOWANIE I ALGORYTMY

Obsługa plików tekstowych w Pythonie


powrót

Zasada obsługi plików tekstowych jest bardzo prosta. Na samym początku warto upewnić się, że podajemy poprawną ścieżkę do pliku, na którym chcemy pracować.

import os
if os.path.exists("plik.txt"): # sprawdź, czy istnieje plik plik.txt
    print("Plik \"plik.txt\" istnieje i jest gotowy do pracy")
else:
    print("Plik pod wskazaną ścieżką nie istnieje")

os.path.exists("względna ścieżka do pliku tektowego") — jeśli plik znajduje się w tym samym miejscu co plik z kodem źródłowym, to wystarczy wpisać tylko nazwę pliku tekstowego wraz z jego rozszerzeniem.

Plik możemy otworzyć w jednym z trzech trybów:

  1. tryb "r" — tryb do czytania pliku (read)
  2. tryb "w" — tryb do zapisywania danych do pliku (write)
  3. tryb "a" — tryb do dopisywania zawartości na koniec pliku (append)
Otwieranie pliku tekstowego
plik = open("dane.txt", "r") # otwieramy plik w trybie do odczytu (r - read)
print(plik.read()) # wypisanie zawartości pliku
plik.close() # zamknięcie pliku

Funkcja open() otwiera plik dane.txt w trybie do czytania. Obiekt plik zostaje skojarzony z plikiem dane.txt i od tego momentu możemy użyć metody read() aby pobrać zawartość pliku i np. wyświetlić ją na ekranie monitora.

Pamiętaj, że po skończonej pracy na pliku należy go zamknąć metodą close(), w przeciwnym razie może to prowadzić do problemów związanych z zasobami i niewłaściwym zwalnianiem pamięci.

Drugi sposób otwierania pliku w wybranym trybie
with open("dane.txt", "r") as plik:
    print(plik.read())

W powyższym przykładzie używamy bloku with, który automatycznie zarządza zamknięciem pliku po zakończeniu bloku. Nie musimy wywoływać metody close(). Blok with jest często używany do obsługi plików w Pythonie, ponieważ gwarantuje właściwe zarządzanie zasobami.

Czytanie pliku wierszami
with open("dane.txt", "r") as plik:
    for linia in plik:
        print(linia)
Zapisywanie danych do pliku
with open("out.txt", "w") as plik:
    plik.write("Ala ma kota")

with open("out.txt", "r") as plik:
    print(plik.read()) # Ala ma kota

Jeśli plik nie istnieje, to zostanie on utworzony, w przeciwnym razie dane z istniejącego pliku zostaną nadpisane. Do wpisania danych do pliku użyjemy metody write(dane do zapisu)

Dopisywanie danych do pliku
with open("out.txt", "w") as plik: # otwarcie pliku w trybie do zapisu
    plik.write("Ala ma kota") # utworzenie pliku i zapisanie w nim tekstu "Ala ma kota"

with open("out.txt", "a") as plik: # otwarcie pliku w trybie do dopisania
    plik.write("\nkot ma ale")

with open("out.txt", "r") as plik:
    print(plik.read())  # Ala ma kota
                        # kot ma ale
Zadanie

W pliku dane.txt znajduje się 1000 par liczb naturalnych dodatnich nie większych niż 1050. Napisz program w języku Python, który wypisze wszystkie pary liczb względnie pierwszych oraz poda ilość tych liczb.

Rozwiązanie
import math
cnt = 0
with open("dane.txt", "r") as plik: # otwarcie pliku w trybie do zapisu
    for i in range(1000):
        a, b = plik.readline().split()
        if math.gcd(int(a), int(b)) == 1: # jeśli największy wspólny dzielnik jest równy 1
            print(a, b)
            cnt += 1 # zliczamy wystąpienia par liczb względnie pierwszych
print(cnt)