Citire, prelucrare și afișare: fișiere text, CSV, imagini
Fișiere text
Deschiderea fișierelor
Funcția open() deschide un fișier. Moduri de deschidere:
| Mod | Descriere |
|---|---|
"r" |
Citire (implicit) - fișierul trebuie să existe |
"w" |
Scriere - suprascrie fișierul dacă există |
"a" |
Adăugare la final - append |
"r+" |
Citire și scriere |
# Metoda recomandată - cu context manager (with)
# Fișierul se închide automat la ieșirea din bloc
with open("fisier.txt", "r") as f:
continut = f.read()
# Metoda clasică (necesită închidere manuală)
f = open("fisier.txt", "r")
continut = f.read()
f.close()
Citirea fișierelor text
# Citire întregul conținut ca string
with open("fisier.txt", "r") as f:
continut = f.read()
print(continut)
# Citire ca listă de linii
with open("fisier.txt", "r") as f:
linii = f.readlines() # listă de linii cu \n la final
for linie in linii:
print(linie.strip()) # strip() elimină \n și spațiile
# Citire linie cu linie (eficient pentru fișiere mari)
with open("fisier.txt", "r") as f:
for linie in f:
print(linie.strip())
# Citire o singură linie
with open("fisier.txt", "r") as f:
prima_linie = f.readline()
Scrierea în fișiere text
# Scriere (suprascrie fișierul existent)
with open("output.txt", "w") as f:
f.write("Prima linie\n")
f.write("A doua linie\n")
# Scriere mai multe linii
linii = ["Linia 1", "Linia 2", "Linia 3"]
with open("output.txt", "w") as f:
for linie in linii:
f.write(linie + "\n")
# sau
f.writelines([l + "\n" for l in linii])
# Adăugare la final (append)
with open("output.txt", "a") as f:
f.write("Linie nouă adăugată\n")
Encoding
Pentru caractere speciale (diacritice românești), specifici encoding-ul:
with open("fisier.txt", "r", encoding="utf-8") as f:
continut = f.read()
with open("fisier.txt", "w", encoding="utf-8") as f:
f.write("Aceasta conține diacritice: ăîșțâ")
Aplicație: Procesare fișier text
# Numără cuvintele dintr-un fișier
with open("text.txt", "r", encoding="utf-8") as f:
continut = f.read()
cuvinte = continut.split()
print(f"Număr de cuvinte: {len(cuvinte)}")
# Găsește liniile care conțin un cuvânt
cuvant_cautat = "Python"
with open("text.txt", "r", encoding="utf-8") as f:
for nr, linie in enumerate(f, 1):
if cuvant_cautat in linie:
print(f"Linia {nr}: {linie.strip()}")
Fișiere CSV
CSV (Comma-Separated Values) este un format pentru date tabulare - fiecare linie reprezintă un rând, iar valorile sunt separate prin virgulă.
Citirea cu modulul csv
import csv
# Citire ca liste
with open("date.csv", "r", encoding="utf-8") as f:
reader = csv.reader(f)
for rand in reader:
print(rand) # rand este o listă
# Citire ca dicționare (folosind header-ul ca și chei)
with open("date.csv", "r", encoding="utf-8") as f:
reader = csv.DictReader(f)
for rand in reader:
print(rand) # rand este un dicționar
Scrierea cu modulul csv
import csv
# Scriere ca liste
date = [
["Nume", "Vârstă", "Oraș"],
["Ana", 25, "București"],
["Ion", 30, "Cluj"]
]
with open("output.csv", "w", encoding="utf-8", newline="") as f:
writer = csv.writer(f)
writer.writerows(date)
# Scriere ca dicționare
date = [
{"Nume": "Ana", "Vârstă": 25, "Oraș": "București"},
{"Nume": "Ion", "Vârstă": 30, "Oraș": "Cluj"}
]
with open("output.csv", "w", encoding="utf-8", newline="") as f:
campuri = ["Nume", "Vârstă", "Oraș"]
writer = csv.DictWriter(f, fieldnames=campuri)
writer.writeheader()
writer.writerows(date)
Citirea cu pandas
Biblioteca pandas oferă funcționalități avansate pentru lucrul cu date tabulare.
import pandas as pd
# Citire CSV
df = pd.read_csv("date.csv")
# Afișare primele 5 rânduri
print(df.head())
# Informații despre dataset
print(df.info())
print(df.describe())
# Acces la coloane
print(df["Nume"])
print(df[["Nume", "Vârstă"]])
# Acces la rânduri
print(df.iloc[0]) # primul rând (după index numeric)
print(df.loc[0]) # primul rând (după etichetă)
# Filtrare
adulti = df[df["Vârstă"] >= 18]
Procesare date cu pandas
import pandas as pd
df = pd.read_csv("date.csv")
# Statistici
print(df["Vârstă"].mean()) # media
print(df["Vârstă"].max()) # maximul
print(df["Oraș"].value_counts()) # frecvența fiecărei valori
# Sortare
df_sortat = df.sort_values("Vârstă", ascending=False)
# Adăugare coloană nouă
df["Major"] = df["Vârstă"] >= 18
# Grupare
grouped = df.groupby("Oraș")["Vârstă"].mean()
# Salvare
df.to_csv("output.csv", index=False)
Aplicație: Analiză date CSV
import pandas as pd
# Citire date elevi
df = pd.read_csv("elevi.csv")
# Media notelor pe materie
medii = df.groupby("Materie")["Nota"].mean()
print(medii)
# Elevii cu note peste 9
excelenti = df[df["Nota"] >= 9]
print(excelenti)
# Export rezultate
excelenti.to_csv("elevi_excelenti.csv", index=False)
Imagini
Pentru procesarea imaginilor se folosesc bibliotecile Pillow (PIL) și OpenCV.
Pillow (PIL)
Instalare
pip install Pillow
Citirea și afișarea imaginilor
from PIL import Image
# Deschidere imagine
img = Image.open("poza.jpg")
# Informații despre imagine
print(img.format) # JPEG, PNG, etc.
print(img.size) # (lățime, înălțime)
print(img.mode) # RGB, L (grayscale), etc.
# Afișare
img.show()
Operații de bază
from PIL import Image
img = Image.open("poza.jpg")
# Redimensionare
img_mic = img.resize((200, 150))
# Rotire
img_rotit = img.rotate(90)
# Decupare (crop)
# box = (left, upper, right, lower)
img_decupat = img.crop((100, 100, 300, 300))
# Conversie la grayscale (alb-negru)
img_gray = img.convert("L")
# Salvare
img_mic.save("poza_mica.jpg")
img_gray.save("poza_gray.png")
Acces la pixeli
from PIL import Image
img = Image.open("poza.jpg")
pixels = img.load()
# Citire pixel (coordonate x, y)
r, g, b = pixels[10, 20]
# Modificare pixel
pixels[10, 20] = (255, 0, 0) # roșu
# Parcurgere toți pixelii
latime, inaltime = img.size
for y in range(inaltime):
for x in range(latime):
r, g, b = pixels[x, y]
# procesare...
OpenCV
Instalare
pip install opencv-python
Citirea și afișarea imaginilor
import cv2
# Citire imagine
img = cv2.imread("poza.jpg")
# Citire grayscale
img_gray = cv2.imread("poza.jpg", cv2.IMREAD_GRAYSCALE)
# Dimensiuni (înălțime, lățime, canale)
print(img.shape)
# Afișare
cv2.imshow("Imagine", img)
cv2.waitKey(0) # așteaptă apăsare tastă
cv2.destroyAllWindows()
Operații de bază
import cv2
img = cv2.imread("poza.jpg")
# Redimensionare
img_mic = cv2.resize(img, (200, 150))
# Rotire 90°
img_rotit = cv2.rotate(img, cv2.ROTATE_90_CLOCKWISE)
# Conversie BGR la RGB (OpenCV folosește BGR, nu RGB)
img_rgb = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
# Conversie la grayscale
img_gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
# Decupare
img_decupat = img[100:300, 100:300] # [y1:y2, x1:x2]
# Salvare
cv2.imwrite("rezultat.jpg", img_mic)
Procesare imagini
import cv2
img = cv2.imread("poza.jpg")
# Blur (estompare)
img_blur = cv2.GaussianBlur(img, (5, 5), 0)
# Detectare margini (Canny)
img_gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
margini = cv2.Canny(img_gray, 100, 200)
# Threshold (binarizare - transformare în alb și negru)
_, img_binar = cv2.threshold(img_gray, 127, 255, cv2.THRESH_BINARY)
cv2.imwrite("margini.jpg", margini)
Matplotlib pentru vizualizare
import matplotlib.pyplot as plt
from PIL import Image
# Afișare imagine cu matplotlib
img = Image.open("poza.jpg")
plt.imshow(img)
plt.axis("off")
plt.title("Imaginea mea")
plt.show()
# Afișare mai multe imagini
fig, axes = plt.subplots(1, 3, figsize=(12, 4))
axes[0].imshow(img)
axes[0].set_title("Original")
axes[1].imshow(img.convert("L"), cmap="gray")
axes[1].set_title("Grayscale")
axes[2].imshow(img.rotate(45))
axes[2].set_title("Rotită")
for ax in axes:
ax.axis("off")
plt.tight_layout()
plt.show()
Aplicație: Procesare batch imagini
from PIL import Image
import os
folder_intrare = "imagini"
folder_iesire = "thumbnails"
os.makedirs(folder_iesire, exist_ok=True)
for nume_fisier in os.listdir(folder_intrare):
if nume_fisier.endswith((".jpg", ".png")):
cale = os.path.join(folder_intrare, nume_fisier)
img = Image.open(cale)
# Creare thumbnail 100x100
img.thumbnail((100, 100))
# Salvare
cale_iesire = os.path.join(folder_iesire, nume_fisier)
img.save(cale_iesire)
print(f"Procesat: {nume_fisier}")