[Python] File renaming a.d.v. CSV

Pagina: 1
Acties:

Vraag


Acties:
  • 0 Henk 'm!

  • Aviv1
  • Registratie: Januari 2018
  • Laatst online: 04-02 22:08
Hallo,

Ik heb een CSV en dat ziet er zo uit:

code:
1
2
3
4
123;door
124;house
125;kitchen
126;garden


Vervolgens heb ik een een set aan .mp3 bestanden.
es_123.mp3 (=Spaanse uitspraak voor door)
es_124.mp3 (=Spaanse uitspraak voor house)
Deze mp3 bestanden moeten worden gerenamed naar
door123.mp3
house124.mp3
kitchen125.mp3
Nu probeer ik dit voor elkaar te krijgen met Python.
(het kan vast ook via Unix Command, mocht iemand dat uit zijn losse pols willen schudden. Gewoon voor de weet).

Python:
1
2
3
4
5
6
7
8
9
10
11
12
13
import pandas as pd
import shutil

df = pd.read_csv('frename.csv', delimiter=';')

Row = (df['#']) 
Eng = (df['Eng']) 

for i in Row:
    row = Row[i-1]
    eng = Eng[i-1]
    old_file = f"es_{i}.mp3"
    shutil.move(old_file, f"{eng}-{i}.mp3")


Dit werkt deels. Want een boel files worden gerenamed alleen een groot gedeelte niet en ik zie ook geen logica waarom die fout gaan en de andere niet.

Ik krijg daarnaast ook een foutmelding in PyCharm, en die luidt:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
Traceback (most recent call last):
  File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/shutil.py", line 563, in move
    os.rename(src, real_dst)
FileNotFoundError: [Errno 2] No such file or directory: 'es_931.mp3' -> 'hair-clipper-931.mp3'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/Users/gebrr/Desktop/files/es_mp3/rename.py", line 13, in <module>
    shutil.move(old_file, f"{eng}-{i}.mp3")
  File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/shutil.py", line 577, in move
    copy_function(src, real_dst)
  File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/shutil.py", line 263, in copy2
    copyfile(src, dst, follow_symlinks=follow_symlinks)
  File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/shutil.py", line 120, in copyfile
    with open(src, 'rb') as fsrc:
FileNotFoundError: [Errno 2] No such file or directory: 'es_931.mp3'

Process finished with exit code 1


Nu klopt het inderdaad, dat er niet altijd een .mp3 bestand bestaat. Maar dat geeft niet, daar hoef ik geen foutmelding over.

Weet iemand hoe ik dit beter kan oplossen, en eigenlijk het liefste zonder gebruik van pandas?

Met enkel CSV import lukte het mij niet om een line in een variable te stoppen.

Sorry maar ik ben pas 5 dagen bezig met Python programmeren :+

Let me share my screen...

Beste antwoord (via Aviv1 op 13-03-2019 02:37)


  • Puch-Maxi
  • Registratie: December 2003
  • Laatst online: 22:08
Ik zou het zelf andersom doen, eerst een lijst maken van je bestanden. Vervolgens ga je ze langs en zoek je de bijbehorende naam op in je CSV (ik zou er een dictionary van maken). Bijvoorbeeld:
Python:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
#!/usr/bin/env python3
# rename.py

import os, csv

def listdir_fullpath(d):
    return [os.path.join(d, f) for f in os.listdir(d)]

def read_csv(f):
    with open(f, newline='') as csvfile:
        return dict(filter(None, csv.reader(csvfile, delimiter=';')))

def rename_files(d, csv):
    fnames = listdir_fullpath(d)
    names = read_csv(csv)
    for f in fnames:
        nr = f[-7:-4]
        filename = '{0}\{1}{2}.mp3'.format(d, names[nr], nr)
        os.rename(f, filename)
    
def main():
    rename_files('mp3', 'names.csv')
    
if __name__ == '__main__':
    main()

Dit gaat natuurlijk fout zodra het nummer niet voorkomt in de CSV, dit moet je dan afvangen en loggen :). Bestanden die niet bestaan kun je ook niet hernoemen, maar misschien wil je wel graag weten welke dat zijn.

[ Voor 10% gewijzigd door Puch-Maxi op 11-03-2019 16:00 ]

My favorite programming language is solder.

Alle reacties


Acties:
  • 0 Henk 'm!

  • Room42
  • Registratie: September 2001
  • Niet online
Print gewoon eens wat je wilt wilt gaan doen (in Python dus). Dat geeft waarschijnlijk meer inzicht in wat er misgaat. Ik ga het zelf niet testen omdat juist jij blijkbaar dus nog hulp nodig hebt bij het debuggen van code ;)

Maar regel 4 en 17 van je Traceback code block moeten toch al boekdelen spreken? :?
Weet iemand hoe ik dit beter kan oplossen, en eigenlijk het liefste zonder gebruik van pandas?
No zo'n open deur (voor mij dan ;)): Gewoon even zoeken bij google naar 'python read csv' --> https://realpython.com/python-csv/ d:)b

edit:
Welke Python-versie gebruik je, trouwens? 2 of 3?

[ Voor 34% gewijzigd door Room42 op 10-03-2019 23:39 ]

"Technological advancements don't feel fun anymore because of the motivations behind so many of them." Bron


Acties:
  • 0 Henk 'm!

  • Aviv1
  • Registratie: Januari 2018
  • Laatst online: 04-02 22:08
Room42 schreef op zondag 10 maart 2019 @ 23:35:
Print gewoon eens wat je wilt wilt gaan doen (in Python dus). Dat geeft waarschijnlijk meer inzicht in wat er misgaat. Ik ga het zelf niet testen omdat juist jij blijkbaar dus nog hulp nodig hebt bij het debuggen van code ;)

Maar regel 4 en 17 van je Traceback code block moeten toch al boekdelen spreken? :?


[...]

No zo'n open deur (voor mij dan ;)): Gewoon even zoeken bij google naar 'python read csv' --> https://realpython.com/python-csv/ d:)b

edit:
Welke Python-versie gebruik je, trouwens? 2 of 3?
Klopt, zoals ik zei is er niet altijd een mp3. Dus die kan hij niet renamen. Geeft niet, maar daardoor lijkt hij de handdoek in de ring te gooien en de rest ook niet meer te willen renamen.

Die tutorial heb ik gelezen maar kreeg het niet voor elkaar daarmee een regel in een variabele te stoppen. Ik ga het nog een keer proberen. thnx

Let me share my screen...


Acties:
  • 0 Henk 'm!

  • g0tanks
  • Registratie: Oktober 2008
  • Laatst online: 23:15

g0tanks

Moderator CSA
Aviv1 schreef op zondag 10 maart 2019 @ 23:42:
[...]


Klopt, zoals ik zei is er niet altijd een mp3. Dus die kan hij niet renamen. Geeft niet, maar daardoor lijkt hij de handdoek in de ring te gooien en de rest ook niet meer te willen renamen.
Lijkt mij dat een simpel if-statement die kijkt of het bestand bestaat dat probleem kan verhelpen.

Ultrawide gaming setup: AMD Ryzen 7 2700X | NVIDIA GeForce RTX 2080 | Dell Alienware AW3418DW


Acties:
  • 0 Henk 'm!

  • Josk79
  • Registratie: September 2013
  • Laatst online: 21:43
If isfile of try/except/pass

Acties:
  • 0 Henk 'm!

  • PageFault
  • Registratie: April 2002
  • Laatst online: 03-10 13:28
Ik zat ook te denken:doe iets met try/catch of except hoe dat ook heet in Python.

Anders eerst checken of de file bestaat, maar dat lijkt me trager en meer programmeerwerk.

Acties:
  • +1 Henk 'm!

  • Merethil
  • Registratie: December 2008
  • Laatst online: 21:45
PageFault schreef op maandag 11 maart 2019 @ 09:36:
Ik zat ook te denken:doe iets met try/catch of except hoe dat ook heet in Python.

Anders eerst checken of de file bestaat, maar dat lijkt me trager en meer programmeerwerk.
Simpele if-else toepassen > flow laten bepalen door exceptions. Exceptions heten zo om een reden: Het is een exceptie van de normale flow.
Code moet je zo bouwen dat 'ie overweg kan met verwachte situaties, er is niet per sé slechts één happy flow in een programma.

Acties:
  • 0 Henk 'm!

  • PageFault
  • Registratie: April 2002
  • Laatst online: 03-10 13:28
Merethil schreef op maandag 11 maart 2019 @ 09:54:
[...]


Simpele if-else toepassen > flow laten bepalen door exceptions. Exceptions heten zo om een reden: Het is een exceptie van de normale flow.
Code moet je zo bouwen dat 'ie overweg kan met verwachte situaties, er is niet per sé slechts één happy flow in een programma.
Ik hoop dat je bedoelt dat de code ook overweg kan met onverwachte situaties ;)

Acties:
  • +1 Henk 'm!

  • Merethil
  • Registratie: December 2008
  • Laatst online: 21:45
PageFault schreef op maandag 11 maart 2019 @ 10:48:
[...]


Ik hoop dat je bedoelt dat de code ook overweg kan met onverwachte situaties ;)
Ik bedoel ermee dat verwachte situaties dingen kunnen zijn als "file bestaat niet", "bepaalde gegevens zijn niet gevuld" etc. Onverwachte situaties (die je dus vooraf niet hebt ingeschat) zouden dan in de exception kunnen vallen want ze zijn een exceptie op je normale (verwachte) flow.

Dus ja, ik bedoelde het allebei ;)

Edit: Punt was in ieder geval: Exceptions zijn niet een manier om je normale (verwachte) flows te dirigeren, dus ook niet bij een missende file. Die kan je prima vooraf checken, waarschijnlijk is dat nog performanter ook (want, een check op een filesystem zal vast sneller zijn dan een exception genereren om daarna de catch in te gaan en alles wat daarin zit uit te voeren).

[ Voor 26% gewijzigd door Merethil op 11-03-2019 11:01 ]


Acties:
  • Beste antwoord
  • 0 Henk 'm!

  • Puch-Maxi
  • Registratie: December 2003
  • Laatst online: 22:08
Ik zou het zelf andersom doen, eerst een lijst maken van je bestanden. Vervolgens ga je ze langs en zoek je de bijbehorende naam op in je CSV (ik zou er een dictionary van maken). Bijvoorbeeld:
Python:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
#!/usr/bin/env python3
# rename.py

import os, csv

def listdir_fullpath(d):
    return [os.path.join(d, f) for f in os.listdir(d)]

def read_csv(f):
    with open(f, newline='') as csvfile:
        return dict(filter(None, csv.reader(csvfile, delimiter=';')))

def rename_files(d, csv):
    fnames = listdir_fullpath(d)
    names = read_csv(csv)
    for f in fnames:
        nr = f[-7:-4]
        filename = '{0}\{1}{2}.mp3'.format(d, names[nr], nr)
        os.rename(f, filename)
    
def main():
    rename_files('mp3', 'names.csv')
    
if __name__ == '__main__':
    main()

Dit gaat natuurlijk fout zodra het nummer niet voorkomt in de CSV, dit moet je dan afvangen en loggen :). Bestanden die niet bestaan kun je ook niet hernoemen, maar misschien wil je wel graag weten welke dat zijn.

[ Voor 10% gewijzigd door Puch-Maxi op 11-03-2019 16:00 ]

My favorite programming language is solder.


Acties:
  • 0 Henk 'm!

  • Aviv1
  • Registratie: Januari 2018
  • Laatst online: 04-02 22:08
@Puch-Maxi

Sorry ik begrijp niet zoveel van deze code maar dat ligt aan mij (bijv regel 17). Ik blijf aan het stoeien terwijl het idee simpel is:

Ik heb een .mp3 met een nummer. Bijv 143. Bijv es_143.mp3..

nu even in mensentaal:

IF "143" exist in csv_file
THEN file hernoemen naar....

Ik prop dat nummer dus in een variabele en vervolgens moet hij daarmee door die CSV lijst spitten tot hij een match heeft en dan file hernoemen met waarden uit die rij...

Ook waarden uit die rij heb ik inmiddels al in een variable klaar staan..

En een IF statement hoeft naar mijn mening niet te piepen als iets niet voorkomt in de lijst. Dat is de hele opzet van IF, THEN..

Let me share my screen...


Acties:
  • 0 Henk 'm!

  • Puch-Maxi
  • Registratie: December 2003
  • Laatst online: 22:08
@Aviv1
Op regel 17 selecteer je het nummer uit de bestandsnaam (es_123.mp3) zodat je het eenvoudig kunt opzoeken in de dictionary :). Dus 123 matcht in dit geval met:
Python:
1
d = {'123' : 'door'}

Vervolgens hernoem je het bestand naar 'door123.mp3'. Dit is slechts één oplossing, het kan op veel verschillende manieren :).

My favorite programming language is solder.


Acties:
  • 0 Henk 'm!

  • Aviv1
  • Registratie: Januari 2018
  • Laatst online: 04-02 22:08
Puch-Maxi schreef op dinsdag 12 maart 2019 @ 21:48:
@Aviv1
Op regel 17 selecteer je het nummer uit de bestandsnaam (es_123.mp3) zodat je het eenvoudig kunt opzoeken in de dictionary :). Dus 123 matcht in dit geval met:
Python:
1
d = {'123' : 'door'}

Vervolgens hernoem je het bestand naar 'door123.mp3'. Dit is slechts één oplossing, het kan op veel verschillende manieren :).
@Puch-Maxi

Wat ik niet begrijp is de "7" en de "4" .. waar refereert dat naar?

Let me share my screen...


Acties:
  • 0 Henk 'm!

  • Puch-Maxi
  • Registratie: December 2003
  • Laatst online: 22:08
@Aviv1 Probeer het maar eens uit :)
Python:
1
2
f = 'es_123.mp3'
print(f[-7:-4])

My favorite programming language is solder.


Acties:
  • 0 Henk 'm!

  • Aviv1
  • Registratie: Januari 2018
  • Laatst online: 04-02 22:08
Puch-Maxi schreef op dinsdag 12 maart 2019 @ 22:08:
@Aviv1 Probeer het maar eens uit :)
Python:
1
2
f = 'es_123.mp3'
print(f[-7:-4])
Hij print niets. Waarom heb je alles in functies gestopt eigenlijk? Ik vind het nu lastiger lezen als beginner :P

Let me share my screen...


Acties:
  • 0 Henk 'm!

  • Puch-Maxi
  • Registratie: December 2003
  • Laatst online: 22:08
>>> f = 'es_123.mp3'
>>> print(f[-7:-4])
123
Aviv1 schreef op dinsdag 12 maart 2019 @ 22:22:
Waarom heb je alles in functies gestopt eigenlijk? Ik vind het nu lastiger lezen als beginner :P
Sorry, dat was niet de bedoeling :) anders krijg je van die spaghetticode. Functies kun je steeds opnieuw gebruiken.

My favorite programming language is solder.


Acties:
  • +1 Henk 'm!

  • Aviv1
  • Registratie: Januari 2018
  • Laatst online: 04-02 22:08
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
import os
import csv
from pathlib import Path

with open('words.csv') as csv_file:
    reader = csv.reader(csv_file, delimiter=';')

    for row in reader:
        line = (row[0])
        engl = (row[1])
        hebF = (row[2])
        hebM = (row[3])
        old_fileF = Path(f"he_{line}.mp3")
        old_fileM = Path(f"he_{line}_male.mp3")
        new_fileF = Path(f"{engl}{hebF}{line}.mp3")
        new_fileM = Path(f"{engl}{hebM}{line}_male.mp3")

        if old_fileF.is_file():
            os.rename(old_fileF, new_fileF)
        else:
            print(old_fileF, new_fileF)

        if old_fileM.is_file():
                os.rename(old_fileM, new_fileM)
        else:
            print(old_fileM, new_fileM)



Ik heb het opgelost met een isfile methode zoals @Josk79 zei

Er zijn een aantal files die niet in de CSV staan dus die houden hun originele naam. Deze wil ik enkel uitprinten in de "else" met welke dat zijn en hoe ze hadden moeten heten. Dan weet ik dat iig.

Echter krijg ik dan ook alle die goed zijn gegaan..

@Puch-Maxi: wat is nu het verschil tussen jouw oplossing en deze? Behalve de spaghetti code. Vind deze vrij overzichtelijk IMHO :+

Thanks!

F/M staat trouwens voor Femine en Masculine. Want voor bijv. werkwoorden heb je een andere uitspraak/schrijfwijze voor F/M

[ Voor 8% gewijzigd door Aviv1 op 13-03-2019 03:20 ]

Let me share my screen...


Acties:
  • +1 Henk 'm!

  • Puch-Maxi
  • Registratie: December 2003
  • Laatst online: 22:08
@Aviv1
Prima opgelost, het belangrijkste is dat jij je eigen code snapt :). In plaats van regel 9 t/m 12 kun je ook het volgende gebruiken, mits er niet meer dan vier rijen in je CSV staan.
Python:
1
line, engl, hebF, hebM = row

Waarom probeer je er overigens tuples van te maken? met de haakjes (). Het enige verschil is dat jij door de CSV loopt, terwijl mijn voorbeeld door de bestanden loopt.

My favorite programming language is solder.


Acties:
  • 0 Henk 'm!

  • Aviv1
  • Registratie: Januari 2018
  • Laatst online: 04-02 22:08
@Puch-Maxi

Bedankt. Dit is voor mij leerzaam. Ik heb gelijk jouw suggestie toegepast, scheelt onnodig rijen.
Ik heb nog wel 1 vraag: kan je mij uitleggen waarom je een IF name = main hebt toegepast? Als ik het goed begrijp is dat in dit geval altijd True omdat Python het direct uitvoert, dus Main() functie is altijd van toepassing, correct?

Let me share my screen...


Acties:
  • +1 Henk 'm!

  • Puch-Maxi
  • Registratie: December 2003
  • Laatst online: 22:08
@Aviv1 Klopt helemaal, als je hem vanuit een ander programma importeert dan zal hij main() niet uitvoeren :)

My favorite programming language is solder.


Acties:
  • 0 Henk 'm!

  • Aviv1
  • Registratie: Januari 2018
  • Laatst online: 04-02 22:08
Puch-Maxi schreef op woensdag 13 maart 2019 @ 13:39:
@Aviv1 Klopt helemaal, als je hem vanuit een ander programma importeert dan zal hij main() niet uitvoeren :)
@Puch-Maxi
Dat is dus een veiligheidsmechanisme dat hij niet bestanden gaat slopen in een andere map? Of heeft het een ander nut?

[ Voor 3% gewijzigd door Aviv1 op 13-03-2019 14:23 ]

Let me share my screen...


Acties:
  • +1 Henk 'm!

  • Puch-Maxi
  • Registratie: December 2003
  • Laatst online: 22:08
@Aviv1
Nee dat niet, als je het programma direct aanroept zal het main() uitvoeren en alle bestanden hernoemen. Als je het importeert als module voert hij het niet uit, maar kun je wel alle functies gebruiken. Zie uitleg.

My favorite programming language is solder.


Acties:
  • 0 Henk 'm!

  • Aviv1
  • Registratie: Januari 2018
  • Laatst online: 04-02 22:08
Puch-Maxi schreef op woensdag 13 maart 2019 @ 14:35:
@Aviv1
Nee dat niet, als je het programma direct aanroept zal het main() uitvoeren en alle bestanden hernoemen. Als je het importeert als module voert hij het niet uit, maar kun je wel alle functies gebruiken. Zie uitleg.
@Puch-Maxi

Enige idee waarom mijn else statement alsnog alles uitspuugt terwijl ik alleen de files wil die niet bestaan? Ik kan eventueel een Elif doen met isfile = false maar dat pikt ie niet

8)7

Let me share my screen...


Acties:
  • 0 Henk 'm!

  • Puch-Maxi
  • Registratie: December 2003
  • Laatst online: 22:08
@Aviv1 Dat kan ik niet 123 reproduceren, komen de bestandsnamen wel overeen?

My favorite programming language is solder.


Acties:
  • 0 Henk 'm!

  • Aviv1
  • Registratie: Januari 2018
  • Laatst online: 04-02 22:08
Puch-Maxi schreef op woensdag 13 maart 2019 @ 16:19:
@Aviv1 Dat kan ik niet 123 reproduceren, komen de bestandsnamen wel overeen?
Python:
1
2
3
4
        if old_fileF.exists():
            os.rename(old_fileF, new_fileF)
        else:
            print(old_fileF, new_fileF)


(Heb het aangepast naar exists(), vond ik toch wat logischer klinken)

Hij spuugt inderdaad de hele CV uit in de print.

Dus bijvoorbeeld:

[code]
he_333_male.mp3 wine-bottle_2179__male.mp3
he_334.mp3 turquoise_2180_טורקיז.mp3
he_335_male.mp3 turquoise_2180__male.mp3
he_336.mp3 bird_2181_ציפור.mp3
he_337_male.mp3 bird_2181__male.mp3
[/]

Echter, ik heb enkel de eerste 25 files in de map gezet en die print hij ook uit. Ik wil alleen dat hij print wat hij niet heeft hernoemd.


/edit: het is verklaarbaar. Voor veel bestanden bestaat geen _male versie. Bijv het woord "Ja" kent geen mannelijke of vrouwelijke vorm. Deze spuugt hij dan uit.

[ Voor 12% gewijzigd door Aviv1 op 13-03-2019 17:22 ]

Let me share my screen...


Acties:
  • 0 Henk 'm!

  • Puch-Maxi
  • Registratie: December 2003
  • Laatst online: 22:08
@Aviv1 Haha, soms kan het zo simpel zijn :). Daarom ga ik uit van de bestanden, in plaats van de CSV ;).

My favorite programming language is solder.


Acties:
  • +1 Henk 'm!

  • Aviv1
  • Registratie: Januari 2018
  • Laatst online: 04-02 22:08
Puch-Maxi schreef op woensdag 13 maart 2019 @ 17:28:
@Aviv1 Haha, soms kan het zo simpel zijn :). Daarom ga ik uit van de bestanden, in plaats van de CSV ;).
Op zich logischer... echter kreeg ik het niet werkend :+ :+

/edit:

Heb dit even in de else gezet:

Python:
1
2
3
4
5
6
7
  if old_fileF.exists():
            os.rename(old_fileF, new_fileF)
        else: print(line+";", engl+";", hebF+";"+"<--- CANNOT FIND THIS MP3 FILE")

        if old_fileM.exists():
                os.rename(old_fileM, new_fileM)
        else: print(line + ";", engl + ";", hebM + ";" + "<--- CANNOT FIND THIS MALE MP3 FILE")


Als er een Male variant bestaat, dan wordt die in een extra kolom opgenomen in de CSV. Van het woord "Jongen" en "Meisje" is maar 1 variant en die staan in kolom 3. Kolom 4 ("_male") is in beide gevallen leeg, ook al is een jongen een man.

Van het woord "Vogel" bestaan wel 2 varianten, een vrouwelijke en een mannelijke vogel. Dus Kolom 3 en 4 zijn gevuld met respectievelijk vrouwelijke en mannelijke variant.

Ik vraag mijn code toch te kijken of er bijvoorbeeld een mannelijke variant bestaat van bijv. "Ja" en dat is niet het geval. Deze spuugt hij in de Else dan uit met een lege waarde want kolom 4 voor "Ja" is niet gevuld met een mannelijke variant (=bestaat niet).

bijv:

code:
1
2
3
4
1; yes; ;<--- CANNOT FIND THIS MALE MP3 FILE
2; no; ;<--- CANNOT FIND THIS MALE MP3 FILE
3; ok; ;<--- CANNOT FIND THIS MALE MP3 FILE
4; hi; ;<--- CANNOT FIND THIS MALE MP3 FILE


Echter, als ik die output in Excel donder, kan ik gemakkelijk alle lege cellen weg filteren, zodat ik de _male varianten heb die daadwerkelijk niet bestaan.

bijv:

code:
1
2114; one; אחד;<--- CANNOT FIND THIS MALE MP3 FILE


Samen met de niet-male versies weet ik dan precies welke geen audio bestand hebben. In totaal heb ik ongeveer 4.000 woorden per taal :)

Straks zal ik dit ook allemaal naar een platform brengen, mocht je Hebreews willen leren. Nu de code werkt, ga ik dit ook voor andere talen doen.

Mochten jullie een bepaalde taal willen leren, dan kan ik die misschien voorrang geven.

Hier al een deel dat ik heb gedaan
https://www.memrise.com/c...9/hebrew-vocabulary-2019/

@Puch-Maxi Als ik het andersom had gedaan, op jouw manier, dan kom je er dus niet achter welke .mp3 files niet bestaan, denk ik? Omdat het een weinig op veel verhouding is.

[ Voor 84% gewijzigd door Aviv1 op 13-03-2019 18:48 ]

Let me share my screen...


Acties:
  • +1 Henk 'm!

  • Puch-Maxi
  • Registratie: December 2003
  • Laatst online: 22:08
Aviv1 schreef op woensdag 13 maart 2019 @ 17:29:
[...]
@Puch-Maxi Als ik het andersom had gedaan, op jouw manier, dan kom je er dus niet achter welke .mp3 files niet bestaan, denk ik? Omdat het een weinig op veel verhouding is.
Correct.

My favorite programming language is solder.

Pagina: 1