Skip to content

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}")