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)