2 Textdateien vergelichen und ersetzen

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Benutzeravatar
delicius
User
Beiträge: 4
Registriert: Freitag 20. Januar 2017, 21:30

Guten Abend alle zusammen,

Nun als blutiger Anfäger fällt mir das alles nicht leicht. Ich lerne Python 3.
Ich habe 2 Textdateien.
Ich möchte das Texdatei 1 geöffnet wird.
Die erste Zeile von txt1, in der 2 Textdatei gesucht wird, diese dann ersetzt wird.
Ich gebe ein kleines beispiel, beide Textdateien haben die selbe Überschrift.
Nur die 2. Zeile ist nicht die gleiche so wie beide Textdateien von den Zeilen nicht 1 zu 1 gleich sind.
Textdatei hat 2541 Zeilen Textdatei 2 hat 2207 Zeilen

Textdatei 1.
" %s ±ºÁÖ Èĺ¸¿¡¼­ »èÁ¦ÇÏ¿´½À´Ï´Ù";
"%s Savas arasindan çikartildi ";

Texdatei2.
" %s ±ºÁÖ Èĺ¸¿¡¼­ »èÁ¦ÇÏ¿´½À´Ï´Ù";
"%s ist als Kaiserkanidat geloscht. ";

Ich überlege wie ich jetzt ein Programm schreiben kann,
das Text 1 mit Text 2 vergleichen kann und wenn vorhanden ist, diese dann mit der Deutschen bedeutung ersetzt.

Welche Module wären jetzt wichtig bzw passend.
Wie kann ich das als eine Schleife aufbauen, falls jemand eine andere bzw bessere Idee haben sollte bitte erwähnen.
Ich danke allen die mir behilflich sein wollen.
BlackJack

@delicius: Ich habe das Problem noch nicht verstanden. Du willst die erste Zeile von Text 1 in Text 2 suchen und ersetzen, sagst aber die erste Zeile von beiden Dateien ist gleich und Du sagst nicht wodurch Du überhaupt ersetzen möchtest‽ Kannst Du Eingaben, Vorgehen, und vor allem auch die Ausgabe noch mal genauer beschreiben? Wie soll denn bei den beiden gezeigten Eingabedateien die Ausgabedatei aussehen?
Benutzeravatar
delicius
User
Beiträge: 4
Registriert: Freitag 20. Januar 2017, 21:30

Entschuldige bitte wenn ich mein vorhaben nicht ausreichend beschreiben konnte.
Ich lege vom Text eine Kopie bei.

Liste 1

Code: Alles auswählen

" %s ±ºÁÖ Èĺ¸¿¡¼­ »èÁ¦ÇÏ¿´½À´Ï´Ù";
"%s Savas arasindan çikartildi ";

" %s ±ºÁÖ·Î ÀÔ¸í Çß½À´Ï´Ù.";
"%s Ýmparator adayý olarak gösterildi. ";

" %s ±ºÁÖ¸£ Á¦°Å ÇÏ¿´½À´Ï´Ù..";
"%s Ýmparatorluk görevini býraktý. ";

" %s ±ºÁÖ¸¦ Á¦°Å ÇÒ¼ö ¾ø½À´Ï´Ù.";
"%s Ýmparatoru görevi býrakamaz. ";

" %s ´Â ±ºÁÖ È帰¡ ¾Æ´Õ´Ï´Ù.";
"%s Ýmparator olmak için bir aday deðil. ";

" %s ´Â ±ºÁÖ·Î ÀÔ¸íÇÒ¼ö ¾ø½À´Ï´Ù .";
"%s Ýmparatorluða aday olamaz. ";

" (¸¸·áÀÏ : %d³â %d¿ù %dÀÏ)";
"(Prosedür: %d y- %d m - %d d) ";

"%d ³ÉÀ» ÅõÀÚÇϼ̽À´Ï´Ù.";
"%d Yang yatýrdýn. ";

"%d ³ÉÀ» ȹµæÇϼ̽À´Ï´Ù.";
"%d Yang Kazandýn. ";

"%d ·¹º§ÀÌ µÇ¾î¾ß ´Ù½Ã ¿°»öÇÏ½Ç ¼ö ÀÖ½À´Ï´Ù.";
"Saçýný tekrar boyabilmek için %d Seviyeye ulaþman gerekli. ";

"%d Á¾·ù %d ¸¶¸® ³¬À½";
"%d nýn %d Yakaladýn. ";

"%d ÃÊ ÈÄ¿¡ ±ºÁÖÀÇ ÃູÀ» »ç¿ëÇÒ ¼ö ÀÖ½À´Ï´Ù";
"%d saniye sonra Ýmparator Kutsamasýný kullanabilirsin. ";

"%d ÃÊ°£ ÄðŸÀÓÀÌ Àû¿ëÁßÀÔ´Ï´Ù.";
"Serbest süre yaklaþýk %d saniye. ";

"%d ÃÊÈÄ ¸ñÀûÁö·Î À̵¿µË´Ï´Ù.";
"Yaptýktan sonra %d saniye içinde hedefte olacaksýn. ";

"%d%% È®·ü·Î °üÅë °ø°Ý";
"Mýzrak Saldýrýsý þansý %d%% ";

"%d%% È®·ü·Î ÀûÅðÄ¡½Ã °æÇèÄ¡ Ãß°¡ »ó½Â";
"Eðer kazanýrsan tecrübe %d%% artacak. ";

"%d%% È®·ü·Î ÀûÅðÄ¡½Ã µ· 2¹è µå·Ó";
"Eðer kazanýrsan Yang %d%% artacak. ";

"%d%% È®·ü·Î ÀûÅðÄ¡½Ã »ý¸í·Â ȸº¹";
"Kazandýktan sonra enerji puanýn %d%% oranýnda artacak. ";

"%d%% È®·ü·Î ÀûÅðÄ¡½Ã ¾ÆÀÌÅÛ 2¹è µå·Ó";
"Eðer kazanýrsan ele geçirilen nesne %d%% artacak. ";

"%d%% È®·ü·Î ÀûÅðÄ¡½Ã Á¤½Å·Â ȸº¹";
"Eðer kazanýrsan mana  %d%% artacak.";

"%d%% È®·ü·Î Ä¡¸íŸ °ø°Ý";
"Kritik saldýrý þansý %d%% ";

"%d%% È®·ü·Î Ÿ°Ý½Ã »ó´ë Àü½Å·Â ¼Ò¸ð";
"%d%% oranýnda mana düþmandan alýnacak. ";

"%d%% È®·ü·Î ÇÇÇؽà Á¤½Å·Â ȸº¹";
"Oranýnda mana emiliyor %d%% ";

"%dºÐÀÇ °áÁ¦½Ã°£ÀÌ Ãß°¡ µÇ¾ú½À´Ï´Ù. (°áÁ¦¹øÈ£ %d)";
"%d oyun süresi hesabýnýza eklendi. (Ödeme Numarasý %d)  ";

"%dÀÇ °æÇèÄ¡¸¦ ȹµæÇß½À´Ï´Ù.";
"%d Tecrübe Puaný Kazandýn. ";

"%dÃÊ ³²¾Ò½À´Ï´Ù.";
"%d saniye sonra oyun kapanacak.";

"%dÃÊ ÈÄ °ÔÀÓÀÌ ¼Ë´Ù¿î µË´Ï´Ù.";
"Oyun %d saniye sonra kapanacak. ";

"%s : %d ¸¶¸®";
"%s: %d ";

"%s Olu sayisi %d mob sayisi oldurmek %d boss sayisi oldurmek %d ¼ºÁö ÁøÀÔ¼ö %d";
"%s Olu sayisi %d mob sayisi oldurmek %d boss sayisi oldurmek %d ¶i¤J¸t¦a¤H¼Æ %d ";

"%s SP¼Ò¸ð: %d";
"%s SP Kullanýmý: %d ";

"%s ±æµå°¡ %s ±æµå¿ÍÀÇ ÀüÀï¿¡¼­ ½Â¸® Çß½À´Ï´Ù.";
"Lonca savaþýnda %s, %s loncasýna karþý kazandý. ";

"%s ±æµå°¡ %s ±æµåÀÇ ±ê¹ßÀ» »©¾Ñ¾Ò½À´Ï´Ù!";
"%s, %s loncasýnýn bayraðýný ele geçirdi! ";

"%s ±æµå¿Í %s ±æµå »çÀÌÀÇ ÀüÀïÀÌ ¹«½ÂºÎ·Î ³¡³µ½À´Ï´Ù.";
"%s ile %s arasýndaki savaþ beraberlikle sonuçlandý. ";

"%s ±æµå¿Í %s ±æµå »çÀÌÀÇ ÀüÀïÀÌ Ãë¼ÒµÇ¾ú½À´Ï´Ù.";
"%s loncasý ve %s loncasý arasýndaki savaþ iptal oldu! ";

"%s ±æµå¿Í %s ±æµå°¡ Àá½Ã ÈÄ ÀüÀïÀ» ½ÃÀÛÇÕ´Ï´Ù!";
"%s ile %s arasýndaki lonca savaþý bir kaç dakika içinde baþlayacak! ";

"%s ±æµå¿Í %s ±æµå°¡ ÀüÀïÀ» ½ÃÀÛÇÏ¿´½À´Ï´Ù!";
"%s ile %s arasýnda lonca savaþý baþladý! ";

"%s ±æµåÀÇ %sÀÌ %d%% Áõ°¡Çß½À´Ï´Ù!";
"%s loncasýna özel düþen nesne oraný %d%% artýrýldý. ";

"%s ±æµåÀÇ %sÀÌ Á¤»óÀ¸·Î µ¹¾Æ¿Ô½À´Ï´Ù.";
"%s loncasýna özel düþen nesne oraný %s artýrýldý. ";

"%s ±æµåÀÇ ±ê¹ßÀ» %s ´ÔÀÌ È¹µæÇÏ¿´½À´Ï´Ù.";
"Lonca %s , %s tarafýndan ele geçirildi. ";

"%s ´Ô°úÀÇ ±³È¯ÀÌ ¼º»ç µÇ¾ú½À´Ï´Ù.";
"%s ile olan ticaret baþarýyla gerçekleþti. ";

Liste 2

Code: Alles auswählen

" %s ±ºÁÖ Èĺ¸¿¡¼­ »èÁ¦ÇÏ¿´½À´Ï´Ù";
"%s ist als Kaiserkanidat geloscht. ";

" %s ´Â ±ºÁÖ È帰¡ ¾Æ´Õ´Ï´Ù.";
"%s ist kein Kanidat als Kaiser. ";

" %s ±ºÁÖ·Î ÀÔ¸í Çß½À´Ï´Ù.";
"%s ist als Kaiser nominiert. ";

" %s ´Â ±ºÁÖ·Î ÀÔ¸íÇÒ¼ö ¾ø½À´Ï´Ù .";
"%s kann nicht als Kaiser nominiert werden. ";

" %s ±ºÁÖ¸£ Á¦°Å ÇÏ¿´½À´Ï´Ù..";
"Der %s Kaiser wird entfernt. ";

" %s ±ºÁÖ¸¦ Á¦°Å ÇÒ¼ö ¾ø½À´Ï´Ù.";
"Der %s Kaiser kann nicht entfernt werden. ";

"½Å¼ö±¹";
"Shinsoo Reich ";

"õÁ¶±¹";
"Chunjo Reich ";

"Áø³ë±¹";
"Jinno Reich ";

"³¬½Ã´ëÀÇ ¼ö·Ãµµ°¡ Áõ°¡ÇÏ¿´½À´Ï´Ù! (%d/%d)";
"Deine Angelpunkte sind gestiegen! (%d/%d) ";

"³¬½Ã´ë°¡ ÃÖ´ë ¼ö·Ãµµ¿¡ µµ´ÞÇÏ¿´½À´Ï´Ù.";
"Du kannst Deine Angel nicht weiter verbessern. ";

"¾îºÎ¸¦ ÅëÇØ ´ÙÀ½ ·¹º§ÀÇ ³¬½Ã´ë·Î ¾÷±×·¹À̵å ÇÒ ¼ö ÀÖ½À´Ï´Ù.";
"Verbessere Deine Angel beim Fischer. ";

"°í±â°¡ ¹Ì³¢¸¸ »©¸Ô°í Àì½Î°Ô µµ¸ÁĨ´Ï´Ù.";
"Du hast Deinen Koder an den Fisch verloren. ";

"°í±â°¡ ÀâÇû½À´Ï´Ù! (%s)";
"Du hast einen Fisch gefangen! (%s) ";

"À̹ø¿¡ ÀâÀº ¹°°í±âÀÇ ±æÀÌ´Â %.2fcm";
"Die Lange des gefangenen Fisches betragt %.2cm. ";

"³¬½ÃÀ̺¥Æ®¿ùôºØ¾î";
"Angelveranstaltung 'Beste Fischer' ";

"³¬½ÃÀ̺¥Æ®À×¾î";
"Angelveranstaltung 'In Ruhe liegt die Kraft'";

"%s : %d ¸¶¸®";
"%s: %d ";

"%d Á¾·ù %d ¸¶¸® ³¬À½";
"Du hast %d von %d gefangen. ";

"°í±â°¡ ÈçÀûµµ ¾øÀÌ »ç¶óÁý´Ï´Ù.";
"Der Fisch ist in den Tiefen des Wassers verschwunden. ";

"¹è ¼Ó¿¡¼­ Á¶°³°¡ ³ª¿Ô½À´Ï´Ù.";
"Im Fisch ist eine Muschel. ";

"¹è ¼Ó¿¡¼­ Áö··ÀÌ°¡ ³ª¿Ô½À´Ï´Ù.";
"Im Fisch ist ein Wurm. ";

"%s¸¦ ±¸¿ü½À´Ï´Ù.";
"Du hast %s in der Mangel. ";

"20¾ï ³ÉÀ» ÃÊ°úÇÏ¿© »óÁ¡À» ¿­¼ö°¡ ¾ø½À´Ï´Ù";
"Du hast mehr als 2 Millionen Yang bei Dir, deshalb kannst du nicht handeln. ";

"ºñ¼Ó¾î³ª Àº¾î°¡ Æ÷ÇÔµÈ »óÁ¡ À̸§À¸·Î »óÁ¡À» ¿­ ¼ö ¾ø½À´Ï´Ù.";
"Du kannst Deinem Laden keinen ungultigen Namen geben. ";

"À¯·áÈ­ ¾ÆÀÌÅÛÀº °³ÀλóÁ¡¿¡¼­ ÆǸÅÇÒ ¼ö ¾ø½À´Ï´Ù.";
"Du kannst keinen Item-Shop Gegenstand in einem privaten Laden verkaufen. ";

"䱤À» Áß´ÜÇÏ¿´½À´Ï´Ù.";
"Abbauen beendet. ";

"°î±ªÀ̸¦ ÀåÂøÇϼ¼¿ä.";
"Bitte ruste Dich mit einer Hacke aus. ";

"³¬½Ã´ë¸¦ ÀåÂø Çϼ¼¿ä.";
"Bitte Wahle eine Angel aus. ";

"¹Ì³¢¸¦ ³¢°í ´øÁ® ÁÖ¼¼¿ä.";
"Befestige zuerst den Koder am Haken. ";

"³¬½Ã´ë°¡ ¾Æ´Ñ ¹°°ÇÀ¸·Î ³¬½Ã¸¦ ÇÒ ¼ö ¾ø½À´Ï´Ù!";
"Du kannst nicht ohne Angel fischen! ";

"ÆÄƼÀåÀÌ Á¢¼Ó »óÅ°¡ ¾Æ´Ï¶ó¼­ ¿äûÀ» ÇÒ ¼ö ¾ø½À´Ï´Ù.";
"<Gruppe> Du kannst keine Anfrage stellen, da der Gruppenanfuhrer nicht online ist. ";

"<ÆÄƼ> ´Ù¸¥ Á¦±¹°ú ÆÄƼ¸¦ ÀÌ·ê ¼ö ¾ø½À´Ï´Ù.";
"<Gruppe> Mit Spielern eines anderen Reichs kannst Du keine Gruppe bilden. ";

"<ÆÄƼ> ´øÀü ¾È¿¡¼­´Â ÆÄƼ Ãʴ븦 ÇÒ ¼ö ¾ø½À´Ï´Ù.";
"<Gruppe> Du kannst in einem Dungeon keine Einladung aussprechen. ";

"<ÆÄƼ> °üÀü ¸ðµå¿¡¼± ÆÄƼ Ãʴ븦 ÇÒ ¼ö ¾ø½À´Ï´Ù.";
"<Gruppe> Du kannst im Zuschauer-Modus keine Einladung aussprechen. ";

"<ÆÄƼ> -30 ~ +30 ·¹º§ À̳»ÀÇ »ó´ë¹æ¸¸ ÃÊ´ëÇÒ ¼ö ÀÖ½À´Ï´Ù.";
"<Gruppe> Es konnen nur Spieler im Levelunterschied von -30 bis +30 eingeladen werden ";

"<ÆÄƼ> ÆÄƼ³» ÃÖ°í ·¹º§ º¸´Ù 30·¹º§ÀÌ ³·¾Æ ÃÊ´ëÇÒ ¼ö ¾ø½À´Ï´Ù.";
"<Gruppe> Du kannst den Spieler nicht einladen, da sein Level zu klein ist. ";

"<ÆÄƼ> ÆÄƼ³» ÃÖÀú ·¹º§ º¸´Ù 30·¹º§ÀÌ ³ô¾Æ ÃÊ´ëÇÒ ¼ö ¾ø½À´Ï´Ù.";
"<Gruppe> Du kannst den Spieler nicht einladen, da sein Level zu hoch ist.  ";

"<ÆÄƼ> ´õ ÀÌ»ó ÆÄƼ¿øÀ» ÃÊ´ëÇÒ ¼ö ¾ø½À´Ï´Ù.";
"<Gruppe> Du kannst keine weiteren Spieler in Deine Gruppe einladen. ";

"%s ´Ô¿¡°Ô ÆÄƼ°¡ÀÔ ½ÅûÀ» Çß½À´Ï´Ù.";
"Du mochtest der Gruppe von %s beitretten. ";

"»ó´ë¹æÀÌ ÆÄƼ¿¡ ¼ÓÇØÀÖÁö ¾Ê½À´Ï´Ù.";
"Der Spieler befindet sich nicht in der Gruppe. ";

"<ÆÄƼ> ÆÄƼÀÇ ÀοøÁ¦ÇÑÀÌ ÃÊ°úÇÏ¿© ÆÄƼ¿¡ Âü°¡ÇÒ ¼ö ¾ø½À´Ï´Ù.";
"<Gruppe> Du kannst nicht in die Gruppe eintreten, da sie bereits voll ist. ";

"<ÆÄƼ> ÆÄƼ¿øÀ» ÃÊ´ëÇÒ ¼ö ÀÖ´Â ±ÇÇÑÀÌ ¾ø½À´Ï´Ù.";
"<Gruppe> Du hast nicht das Recht, eine Einladung auszusprechen. ";

"<ÆÄƼ> %s ´ÔÀÌ ÆÄƼ °ÅºÎ »óÅÂÀÔ´Ï´Ù.";
"<Gruppe> %s lehnt die Einladung in Deiner Gruppe ab. ";

"<ÆÄƼ> ÀÌ¹Ì %s´ÔÀº ÆÄƼ¿¡ ¼ÓÇØ ÀÖ½À´Ï´Ù.";
"<Gruppe> %s ist bereits in der Gruppe. ";

"<ÆÄƼ> ´øÀü ¾È¿¡¼­´Â ÆÄƼ ÃÊ´ë¿¡ ÀÀÇÒ ¼ö ¾ø½À´Ï´Ù.";
"<Gruppe> Du kannst in einem Dungeon keine Einladung annehmen. ";

"<ÆÄƼ> ÆÄƼ ÃÊ´ë¿¡ ÀÀÇÒ ¼ö ¾ø½À´Ï´Ù.";
"<Gruppe> Du bist nicht in der Lage, die Einladung anzunehmen. ";

"<ÆÄƼ> %s´ÔÀÌ ÆÄƼ Ãʴ븦 °ÅÀýÇϼ̽À´Ï´Ù.";
"<Gruppe> Deine Einladung wurde abgelehnt. ";

"<ÆÄƼ> %s´ÔÀÌ ÆÄƼ¿¡ Âü°¡Çϼ̽À´Ï´Ù.";
"<Gruppe> %s ist Deiner Gruppe beigetreten. ";

"<ÆÄƼ> %s´ÔÀÇ ÆÄƼ¿¡ Âü°¡Çϼ̽À´Ï´Ù.";
"<Gruppe> %s ist Deiner Gruppe beigetreten. ";

Wie man sieht, haben beide 1 zu 1 die gleichen Überschriften.
2. Zeile jeder Überschrift hat eine andere Bedeutung Text 1 ist Türkisch und Text 2 ist Deutsch.

Ich möchte das ein Script Text 1 mit Text 2 vergleicht.
Also alle Text von Text1 soll mit Text2 verglichen werden und automatisch übersetzt werden.
Das wäre so wie, wenn ich text1 Überschrift kopiere , text 2 öffne den selben Text suche, und dann mit der Hand die Deutsch übersetzung kopieren und ersetze es mit text1.
Benutzeravatar
pyHoax
User
Beiträge: 84
Registriert: Donnerstag 15. Dezember 2016, 19:17

Woran kann ich erkennen was Text und was Überschrift ist ?

Sind die Leerzeilen zuverlässig ?


Ich vermute du möchte die Kopie einer i18n Datei in Türkisch (oder so) nach Deutsch übersetzen ?
Die erste Zeile ist ein Key (Überschrift) der zweite der Dialog/ die Phrase.

Du möchte nun die passenden deutschen Phrasen aus Datei2 in Datei1 ersetzen.. da die Übersetzung in Deutsch unvollständig ist oder die Keys versehentlich verändert wurden.
Die Anwendung erwartet verständlicherweise eine Sprachdatei mit allen notwendigen Keys, egal ob die Übersetzung vollständig ist. (weshalb Datei2 nicht verwendet werden kann)
Zuletzt geändert von pyHoax am Freitag 20. Januar 2017, 22:35, insgesamt 1-mal geändert.
nezzcarth
User
Beiträge: 1646
Registriert: Samstag 16. April 2011, 12:47

pyHoax hat geschrieben:Woran kann ich erkennen was Text und was Überschrift ist ?

Sind die Leerzeilen zuverlässig ?
Es handelt sich soweit ich das verstehe um Lokalisierungsdateien eines Computerspiels. Die erste Zeile ist immer der koreanische (?) Originaltext (in kaputtem Encoding), die zweite die jeweilige Übersetzung, die dritte ein Trenner.

Was mir nicht klar ist: Die Dateien haben nur 8 gemeinsame "Überschriften"(=Origninaltexte). Was ist mit den 42 bzw. 32 Textpaaren, die jeweils individuell sind? Sollen die deutschsprachigen in die Türkische gemerged werden (bzw. umgekehrt), oder was genau ist das Ziel?
Benutzeravatar
pyHoax
User
Beiträge: 84
Registriert: Donnerstag 15. Dezember 2016, 19:17

Aye,
Chinesisches oder Japanisches Rollenspiel mit türkischer Übersetzung soll nach Deutsch übersetzt werden.
Benutzeravatar
delicius
User
Beiträge: 4
Registriert: Freitag 20. Januar 2017, 21:30

Ja soweit wurde ich verstanden. Ich habe die Koreanischen "hieroglyphen" als Überschrift befasst. Weil sie in beider txt datein identisch sind.

Sind die Leerzeilen zuverlässig ? (ja)


Ich vermute du möchte die Kopie einer i18n Datei in Türkisch (oder so) nach Deutsch übersetzen ?
Die erste Zeile ist ein Key (Überschrift) der zweite der Dialog/ die Phrase.

Ganz genau!!!!!!!!!!!

Die Anwendung erwartet verständlicherweise eine Sprachdatei mit allen notwendigen Keys, egal ob die Übersetzung vollständig ist. (weshalb Datei2 nicht verwendet werden kann)

Ganz genau!!!!!!!

Ich habe beide Textdateien upgeloaded.
http://www.file-upload.net/download-122 ... t.rar.html
Die Phrasen von deutschen sollen übernommen werden und in turkisch.txt eingetragen werden.
Benutzeravatar
delicius
User
Beiträge: 4
Registriert: Freitag 20. Januar 2017, 21:30

Zeile 1 2 und leere Zeile könnte ich mit:

Code: Alles auswählen

try:
    d = open("turkisch.txt")
except:
    print("Zugriff nicht möglich")
    sys.exit(0)

z1 = d.readline()
z2 = d.readline()
zleer = d.readline()
print(z1, z2, zleer)
d.close()
####################################
lesen. Wie kann ich z1 in der zweiten txt suchen und beide Zeilen kopieren?
Zuletzt geändert von Anonymous am Dienstag 24. Januar 2017, 10:19, insgesamt 1-mal geändert.
Grund: Quelltext in Python-Codebox-Tags gesetzt.
BlackJack

@delicius: Lern am besten erst einmal die Grundlagen von Python und dann teile das Problem in Teilprobleme auf und die Teilprobleme wieder in kleinere Teilprobleme, solange bis die einzelnen Teilprobleme jeweils mit einer Funktion mit wenigen Zeilen Code lösbar sind. Die setzt Du dann um und testest sie. Erst wenn eine Teillösung getestet ist und funktioniert, mit der nächsten weiter machen. Einige Teillösungen können dann bereits vorhandene Teillösungen verwenden, und irgendwann hat man aus den Teillösungen eine Gesamtlösung zusammen gesetzt.

Eine übliche Aufteilung ist Eingabe, Verarbeitung, Ausgabe. Also zum Beispiel Funktionen um die beiden Eingabedateien in passende Datenstrukturen einzulesen. Dann eine Funktion um aus den beiden Eingaben eine Datenstruktur mit den Daten für die Ausgabedatei zu erzeugen. Und eine Funktion um diese Daten dann in eine Ausgabedatei zu schreiben.

Die Ladefunktion kann beispielsweise eine Datei in eine Liste mit Tupeln einlesen die jeweils aus den beiden Zeilen mit den Daten besteht, und dabei auch gleich prüfen ob die Zeilen dazwischen tatsächlich Leerzeilen sind.

Die Speicherfunktion könnte genau so eine Liste mit Leerzeilen dazwischen in eine Datei schreiben.

Edit: Ob eine Liste mit Tupeln, oder gleich ein Wörterbuch hängt davon ab ob in der Ausgabedatei die Reihenfolge der Einträge gleich bleiben muss.
BlackJack

Einfachste Variante wenn die Reihenfolge keine Rolle spielt in Hy:
[codebox=clojure file=Unbenannt.txt]#!/usr/bin/env hy


(defn parse-lines [lines]
(setv lines (chain lines ["" ""]))
(for [[key value blank-line] (zip lines lines lines)]
(unless (empty? (.strip blank-line))
(raise
(ValueError (.format "expected empty line, got {0!r}" blank-line))))
(yield [key value])))


(defn load [filename]
(with [lines (open filename "r")]
(dict (parse-lines lines))))


(defn save [mapping filename]
(with [out-file (open filename "w")]
(for [[key value] (.iteritems mapping)]
(.writelines out-file [key value "\n"]))))


(defn updated [language-a language-b]
(let [result (dict language-b)]
(.update result language-a)
result))


(defmain [&rest args]
(let [language-a (load "test1.txt")
language-b (load "test2.txt")]
(save (updated language-a language-b) "test3.txt")))[/code]
BlackJack

Da ich gerade Node.js aktualisiert habe das ganze in JavaScript. :-)
[codebox=javascript file=Unbenannt.txt]'use strict';
const fs = require('fs');
const readline = require('readline');


const readLanguageFile = function (path, callback) {
const lineReader = readline.createInterface({
input: fs.createReadStream(path)
});
const mapping = {};
var i = 0;
var key = null;
lineReader.on('line', function (line) {
switch (i % 3) {
case 0:
key = line;
break;
case 1:
mapping[key] = line;
break;
case 2:
if (line.trim() !== '') {
throw 'expected empty line, got ' + JSON.stringify(line);
}
break;
}
i++;
});
lineReader.on('close', function () { callback(mapping); });
}


const mergeLanguages = function (languageA, languageB) {
return Object.assign({}, languageA, languageB);
}


const saveLanguage = function (path, language) {
const resultFile = fs.createWriteStream(path);
const keys = Object.keys(language);
for (var i = 0; i < keys.length; i++) {
var key = keys;
resultFile.write(key + '\n' + language[key] + '\n\n');
};
resultFile.end();
}


const main = function () {
readLanguageFile('test1.txt', function (languageA) {
readLanguageFile('test2.txt', function (languageB) {
saveLanguage('test3.txt', mergeLanguages(languageA, languageB));
});
});
};


if (require.main === module) {
main();
}[/code]
Antworten