all_txt_files_list.txt:
all||slovíčka 1. cyklu.txt
|_|/media/filmy/Videa - Kytara/Lekce kytary/1) SLOVÍČKA NEZAHRNUTÁ DO EXTRAHOVANÝCH VAZEB.txt|1) VAZBY PODMĚTU PŘÍSUDKU S ADVERBEM.txt|/media/filmy/Videa - Kytara/Lekce kytary/srt-korektura/1) PŘIPRAVENO (KRÁTKÝ TEXT VÝŇATEK)
*|2|/media/filmy/Videa - Kytara/Lekce kytary/2) SLOVÍČKA NEZAHRNUTÁ DO EXTRAHOVANÝCH VAZEB.txt|2) VAZBY PODMĚTU PŘÍSUDKU S ADVERBEM.txt|/media/filmy/Videa - Kytara/Lekce kytary/srt-korektura/2) PŘIPRAVENO (KRÁTKÝ TEXT VÝŇATEK)
+|3|/media/filmy/Videa - Kytara/Lekce kytary/3) SLOVÍČKA NEZAHRNUTÁ DO EXTRAHOVANÝCH VAZEB.txt|3) VAZBY PODMĚTU PŘÍSUDKU S ADVERBEM.txt|/media/filmy/Videa - Kytara/Lekce kytary/srt-korektura/3) PŘIPRAVENO (KRÁTKÝ TEXT VÝŇATEK)
^|4|/media/filmy/Videa - Kytara/Lekce kytary/4) SLOVÍČKA NEZAHRNUTÁ DO EXTRAHOVANÝCH VAZEB.txt|4) VAZBY PODMĚTU PŘÍSUDKU S ADVERBEM.txt|/media/filmy/Videa - Kytara/Lekce kytary/srt-korektura/4) PŘIPRAVENO (KRÁTKÝ TEXT VÝŇATEK)
&|5|/media/filmy/Videa - Kytara/Lekce kytary/5) SLOVÍČKA NEZAHRNUTÁ DO EXTRAHOVANÝCH VAZEB.txt|5) VAZBY PODMĚTU PŘÍSUDKU S ADVERBEM.txt|/media/filmy/Videa - Kytara/Lekce kytary/srt-korektura/5) PŘIPRAVENO (KRÁTKÝ TEXT VÝŇATEK)
$|6a,6b|/media/filmy/Videa - Kytara/Lekce kytary/6) SLOVÍČKA NEZAHRNUTÁ DO EXTRAHOVANÝCH VAZEB.txt|6) VAZBY PODMĚTU PŘÍSUDKU S ADVERBEM.txt|/media/filmy/Videa - Kytara/Lekce kytary/srt-korektura/6) PŘIPRAVENO (KRÁTKÝ TEXT VÝŇATEK - ROMANZA)
%|7|/media/filmy/Videa - Kytara/Lekce kytary/7) SLOVÍČKA NEZAHRNUTÁ DO EXTRAHOVANÝCH VAZEB.txt|7) VAZBY PODMĚTU PŘÍSUDKU S ADVERBEM.txt|/media/filmy/Videa - Kytara/Lekce kytary/srt-korektura/7) PŘIPRAVENO (KRÁTKÝ TEXT VÝŇATEK - LIGAR tocando)
@|8|/media/filmy/Videa - Kytara/Tipy-Tutorialy ke kytaře/1) SLOVÍČKA NEZAHRNUTÁ DO EXTRAHOVANÝCH VAZEB.txt|1) VAZBY PODNĚTU PŘÍSUDKU S ADVERBEM.txt|/media/filmy/Videa - Kytara/Tipy-Tutorialy ke kytaře/srt-korektura/1) PŘIPRAVENO (KRÁTKÝ TEXT - VÝŇATEK - 5 cosas que NO debes) .srt
#|9|/media/filmy/Videa - Kytara/Tipy-Tutorialy ke kytaře/2) SLOVÍČKA NEZAHRNUTÁ DO EXTRAHOVANÝCH VAZEB.txt|2) VAZBY PODNĚTU PŘÍSUDKU S ADVERBEM.txt|/media/filmy/Videa - Kytara/Tipy-Tutorialy ke kytaře/srt-korektura/2) PŘIPRAVENO (KRÁTKÝ TEXT - VÝŇATEK - 5 RASGUOS para TODO) .srt
*|0|/media/filmy/Videa - Kytara/Tipy-Tutorialy ke kytaře/3) SLOVÍČKA NEZAHRNUTÁ DO EXTRAHOVANÝCH VAZEB.txt|3) VAZBY PODNĚTU PŘÍSUDKU S ADVERBEM.txt|/media/filmy/Videa - Kytara/Tipy-Tutorialy ke kytaře/srt-korektura/3) PŘIPRAVENO (KRÁTKÝ TEXT - VÝŇATEK - 5 Técnicas PRO) .srt
°||/media/filmy/Videa - Kytara/Tipy-Tutorialy ke kytaře/4) SLOVÍČKA NEZAHRNUTÁ DO EXTRAHOVANÝCH VAZEB.txt|4) VAZBY PODNĚTU PŘÍSUDKU S ADVERBEM.txt|/media/filmy/Videa - Kytara/Tipy-Tutorialy ke kytaře/srt-korektura/4) PŘIPRAVENO (KRÁTKÝ TEXT - VÝŇATEK - CEJILLA - BARRÉ) .srt
||/media/filmy/Videa - Kytara/Tipy-Tutorialy ke kytaře/5) SLOVÍČKA NEZAHRNUTÁ DO VAZEB AI.txt||
!||/media/filmy/Videa - Kytara/Těžší vyučování bez praxe/SLOVÍČKA NEZAHRNUTÁ DO EXTRAHOVANÝCH VAZEB.txt|VAZBY PODNĚTU PŘÍSUDKU S ADVERBEM - La armonia en el Flamenco.txt|/media/filmy/Videa - Kytara/Těžší vyučování bez praxe/srt-korektura/PŘIPRAVENO (KRÁTKÝ TEXT - VÝŇATEK - HARMONIE FLAMENKA).txt
Skript:
import re
import os
import time
# Cíl adresářové struktury
target_directory = "/media/filmy/výuka-španělštiny"
log_file = "report.log"
specChars = "_!@#$%^&*°<>/0123456789" # Speciální znak, které se mohou objevit na začátku řádku se slovní zásobou
# Čtení souboru all_txt_files.list.txt
with open("all_txt_files.list.txt", "r") as file:
lines = file.readlines()
def get_prefix(line):
# Regulární výraz pro nalezení prefixu s písmenem
match = re.match(r'^([_!@#$%^&*°<>/0123456789]*[\p{L}])', line, re.UNICODE)
if match:
prefix = match.group(0)
# Zjistit, zda za písmenem následují dva nebo více nespeciálních znaků
pos = len(prefix)
if pos < len(line):
# Kontrola, zda následují dva nebo více nespeciálních znaků nebo konec řádku
following_text = line[pos:]
if len(following_text) > 1 and not any(c in specChars for c in following_text[:2]):
return prefix
if pos == len(line) or (len(following_text) > 0 and following_text[0] not in specChars):
return prefix
return ''
def log_message(current_file, message="", content=""):
"""Zapisuje zprávu do logu a zároveň ji vypisuje na obrazovku."""
with open(log_file, "a") as log:
if not content:
log.write(f"{current_file}: {message}\n")
else:
log.write(f"{current_file}: {message}, content: \n{content}\n")
if not current_file:
print(f"{message}\n")
else:
print(f"{current_file}: {message}\n")
# Vrací tři proměnné z prvního řádku
def get_first_line(lines):
first_line = lines[0].strip().split('|')
if len(first_line) >= 3:
var1 = first_line[0].strip() # První hodnota
var2 = first_line[1].strip() # Druhá hodnota
var3 = first_line[2].strip() # Třetí hodnota
return var1, var2, var3
else:
print("Chyba: První řádek nemá očekávaný formát.")
exit(1)
def process_files_from_arrays(vazby_excluded_path_list, vazby_path_list, original_shorted_path_list):
i = 0
for path in vazby_excluded_path_list:
process_file_content(path)
if not vazby_path_list[i]:
print(f"No file vazby_path='' when processing file {path}")
else:
process_file_content(vazby_path_list[i])
if not original_shorted_path_list[i]:
print(f"No file original_shorted_path='' when processing file {path}")
else:
process_file_content(original_shorted_path_list[i])
i += 1
# Funkce pro ověření a přípravu polí
def verify_and_prepare_arrays(lines):
prefix_compared_prev = []
prefix_compared_cycle_1 = []
vazby_path_list = []
vazby_excluded_path_list = []
original_shorted_path_list = []
base_path = "/media/filmy/Videa - Kytara&Suno/"
for index, line in enumerate(lines):
columns = line.strip().split('|')
print(f"LINE: {line}")
# Zkontrolovat, zda je správný počet sloupců (mělo by být 5 sloupců)
if len(columns) != 5:
print(f"Chyba: nesprávný počet sloupců na řádku {index + 1}")
exit(1)
# Uložit hodnoty prvního sloupce do pole, pokud existují
if columns[0]:
prefix_compared_prev.append(columns[0].strip())
# Uložit hodnoty druhého sloupce do pole, pokud existují
if columns[1]:
prefix_compared_cycle_1.append(columns[1].strip())
# Ověřit existenci souboru ve třetím sloupci a uložit do pole
vazby_excluded_path = columns[2].strip()
expected_dir = os.path.dirname(vazby_excluded_path)
if not os.path.isfile(vazby_excluded_path):
print(f"Chyba: soubor neexistuje (třetí sloupec) {vazby_excluded_path} na řádku {index + 1}")
exit(1)
vazby_excluded_path_list.append(vazby_excluded_path)
# Ověřit existenci souboru ve čtvrtém sloupci a uložit do pole
vazby_path = columns[3].strip()
if vazby_path:
dir_name = os.path.dirname(vazby_path)
# if dir_name is empty add base path
if not dir_name: # from 3rd column
vazby_path = os.path.join(expected_dir, vazby_path)
if not os.path.isfile(vazby_path):
print(f"Chyba: soubor neexistuje (čtvrtý sloupec) dir_name: {dir_name}, {vazby_path} na řádku {index + 1}")
exit(1)
vazby_path_list.append(vazby_path)
# Pokud cesta existuje, ověřit existenci souboru v pátém sloupci a uložit do pole
original_shorted_text_path = columns[4].strip()
if original_shorted_text_path:
if not os.path.isfile(original_shorted_text_path):
print(f"Chyba: soubor neexistuje (pátý sloupec) {original_shorted_text_path} na řádku {index + 1}")
exit(1)
original_shorted_path_list.append(original_shorted_text_path)
return (prefix_compared_prev, prefix_compared_cycle_1, vazby_path_list,
vazby_excluded_path_list, original_shorted_path_list)
def process_file_content(file_path):
# 14. Zpracovat soubor, filtrovat řádky, které obsahují dva velké znaky
with open(file_path, "r") as f:
content = f.readlines()
is_line_comment = False
is_vocabulary_header = False
is_line_vocabulary = False
starts_with_specChar = False
prefix = False
for line in content:
# Identifikovat komentáře ve stylu KOMENTÁŘ
if not (any(c.isupper() for c in line[:2]) and line[:2].isupper()):
is_line_comment = True
else:
is_line_comment = False
# 15. Zjistit, zda řádek obsahuje pipeline "|"
if "|" in line:
is_line_vocabulary = True
first_word = line.split("|")[0].strip()
else
is_line_vocabulary = False
first_word = ""
# 16. Zjistit, zda řádek obsahuje závorky, pokud ano, zkrátit řádek
stripped_line = line
if not is_line_comment:
if line:
if line[0] in specChars:
prefix ...
if line.strip().endswith(":"):
is_vocabulary_header = True
else
is_vocabulary_header = False
if "(" in line:
stripped_line = line.split("(")[0].strip()
# 17. Zjistit, zda řádek obsahuje blok "///"
block_is_found = False
block_message = [] # Sběr textu bloku
for line in filtered_content:
if "///" in line:
log_message(file_path, "Nový blok nalezen")
block_message.append(line)
block_is_found = True
continue
if block_is_found and any(c.isupper() for c in line[:2]) and line[:2].isupper():
continue
if block_is_found and not line.strip():
log_message("", "Konec bloku nalezen", ''.join(block_message))
block_is_found = False
# 18. Zjistit a zpracovat text "NEZAHRNUT"
if "NEZAHRNUT" in file_path:
explanation_block = []
in_explanation = False
for line in filtered_content:
if "Vysvětlení:" in line:
in_explanation = True
if in_explanation:
explanation_block.append(line)
if "opakuj" in line:
log_message(file_path, "Nalezen blok vysvětlení")
elif not line.strip(): # Konec bloku vysvětlení
log_message(file_path, "Konec bloku vysvětlení", ''.join(explanation_block))
explanation_block = []
in_explanation = False
# Získání proměnných z prvního řádku
flag_cycle, var2, words_cycle_1_path = get_first_line(lines)
if not os.path.isfile(words_cycle_1_path):
print(f"Chyba: soubor neexistuje {words_cycle_1_path}")
exit(1)
# Odstraní první řádek poté co jsem ho zpracoval
lines = lines[1:]
# Příprava polí pomocí nové funkce
(prefix_compared_prev, prefix_compared_cycle_1, vazby_path_list,
vazby_excluded_path_list, original_shorted_path_list) = verify_and_prepare_arrays(lines)
process_files_from_arrays(vazby_excluded_path_list, vazby_path_list, original_shorted_path_list)
# Ukončení zpracování
print("Všechny soubory byly zpracovány.")
Žádné komentáře:
Okomentovat