11. Python – pliki


Operacje na plikach wymagają znajomości lokalizacji pliku. Poniżej przedstawiam sposób na ustalenie ścieżki relatywnej i absolutnej

import os

sciezka_relatywna = os.getcwd()

print(f"Ścieżka do bieżącego katalogu(relatywna): {sciezka_relatywna}")

sciezka_absolutna = "C:/xampp/htdocs/zajecia/Python/"

print(f"Ścieżka do wskazanego katalogu(absolutna): {sciezka_absolutna}")

Pobranie listy pliku we wskazanym katalogu

katalogi_i_pliki_biezacy = os.listdir(sciezka_relatywna) #tak też można: katalogi_i_pliki = os.listdir()

print(f"lista plików we wskazanym katalogu: {katalogi_i_pliki_biezacy}")

katalogi_i_pliki_nadrzedne = os.listdir('..')

print(f"lista plików w nadrzędnym katalogu: {katalogi_i_pliki_nadrzedne}")

katalog_domowy = os.path.expanduser('~')

print(f"Katalog domowy: {katalog_domowy}")

file = "plik.txt"

Prawa do odczytu/zapisu

Podczas tworzenia uchwytu pierwszym argumentem jest ścieżka do pliku, która może być względna lub bezwzględna. Drugi argument to prawa dostępu:

  • „w” – otwieranie tylko do zapisu;
  • „r” – otwieranie tylko do odczytu;
  • „x” – tworzy nowy plik i otwiera go do zapisu;
  • „a” – otwiera tylko do zapisu ustawiając miejsce zapisu na koniec pliku, tryb ten działa poprawnie jedynie gdy plik istnieje;
  • „b” – tryb zapisu / odczytu binarnego;
  • „t” – tryb zapisu / odczytu tekstowego (domyślny);
  • „+” – otwiera plik do odczytu i zapisu.

Odczytujemy cały plik

with open(file, 'r') as odczyt:

  print(f"Odczyt całego pliku: {odczyt.read()}")

Zapisujemy dane do pliku

#jeżeli plik nie istnieje zostaje stworzony (nadpisuje zawartość)

with open("new_file.txt", 'w') as zapis:

    zapis.write("Nowo zapisane dane.\n")

with open("new_file.txt", 'r') as odczyt_w:

  print(f"Odczyt nowego pliku: {odczyt_w.read()}")

Odczytujemy dane z pliku

import datetime

#dodajemy do pliku aktualny czas

with open("plik.txt", 'a') as dodaj:

    dodaj.write(f"Nowo dodane dane ({datetime.datetime.now()})\n")

   

with open("plik.txt", 'r') as odczyt_a:

    dane = odczyt_a.read() #możemy wyciąć kawałek: odczyt_a.read(100)

    print(f"Odczyt nowego pliku: {dane}")

    print(dane[:18]) #możemy ograniczać odczyt

    nowe_dane = odczyt_a.read()

  print("Nowe dane:", nowe_dane) #nic się nie wyświetli, bo raz odczytany plik nie może zostać w tym samym otwarciu odczytany

Odczyt linijka po linijce

with open("plik.txt", 'r') as lines:

    linie = lines.readlines()

    print(type(linie)) #zobaczymy, że mamy listę

    for line in linie:

        print(line.rstrip()) #obcinamy enter na końcu

        if "11:56:33" in line: print("tadammm")

Odczytujemy kilka plików na raz

with open('plik.txt', 'r') as reader, open('new_file.txt', 'w') as writer:

    text = reader.read()

    writer.write(text)