Hogyan tudok duplikátumot eltávolítani Python-al?
egy txt fileban lenne ez a tartalom:
123|alma
123|narancs
234|narancs
234|narancs
123|alma
345|citrom
el kellene távolítani azokat a sorokat amikben a sorszám duplikátum
ez lenne az eredmény:
345|citrom
ezt kellene kiírnia txt-be
Ez a pandas-os megoldás nem jó, pont véletlen jó megoldást ad erre az inputra, de különben nem jó.
Pl ha ez lenne az input:
123|alma
123|narancs
234|narancs
341|citrom2
234|narancs
123|alma
345|citrom
Már nem jó a kimenet.
@10:35
"powershell script, ami windowsban alapból benne van." Ez nem igaz, nincs benne alapból.
Ha már a kérdező ilyen (régebbi) 2-es python-t használ akkor így:
Bár annyira amúgy se muszáj spórolni a sorokkal.
Még se jó ez régebbire (de rég volt már, évekkel ezelőtt), ennyire "esetlen" ez a régi python:
Kipróbáltam 2.7-essel, így lefut:
#11
Mi lenne a helyes output? Jelenleg a citrom2 és a citrom sorok maradnak meg a pandas-os megoldásban, kipróbáltam. A többi sor SORSZÁMA többször is szerepel (123,234), a két citromé egyedi. #13-as kódot is kipróbáltam a különbség annyi hogy a #13 megoldása végén nincs üres sor a kimenetben, szokás üres sorral zárni egy filet, de ez nem ‘hiba’.
"Mi lenne a helyes output?"
Nem akarom túlmagyarázni, a képen látszik, egy képernyőre ráfért az egész. Amit módosítottam egyik hozzászóló kódját amit az visszaadott az a jó, természetesen amit az hozzászóló írt is ugyanúgy helyes megoldást adott, csak kompatibilitás miatt átírtam hogy 2-es python-ba is működjön.
"13# köszi az átírást, én már lusta voltam hozzá :D"
Szívesen.
@23:09
Bocsi, most nézem hogy mellékhatása van a te pandas-os megoldásodnak, append-et csinál, jó eredményt ad ha minden futtatás előtt törlöm az alma2.txt fájlt ha létezik. Azt hittem már tegnapról én emlékeztem rosszul hogy kevesebb sorból állt az alma2.txt.
Ezzel jól lefuttatta a winautomation is a parancsot és szépen kiírta az eredményt temp2.txt-be
-------------------------------------------------------------------------------
unique = {}
with open('c:/Temp/temp.txt', 'rt') as file:
for line in file.readlines():
id_ = line.split('|')[0]
unique[id_] = id_ in unique or line
with open('c:/Temp/temp2.txt', 'wt') as new_file:
new_file.writelines(filter(lambda x : not x is True, unique.values()))
-------------------------------------------------------------------------------
Köszönöm a segítséget!
most lefuttattam úgy, hogy ez van a txt-ben
123|alma
123|narancs
234|narancs
341|citrom2
234|narancs
123|alma
345|citrom
és ezzel ezt az outputot adja
345|citrom341|citrom2
A sortörésekkel lesz szerintem a gond.
A "for line in file.readlines()" ciklusba a line-be benne kell lennie a sortörésnek is. Ez windows-ban carriage return, line feed azaz kocsi vissza, soremelés. A régi mechanikus írógépek mintájára. A hexa kódja 0d és 0a. Linuxos rendszereken a 0a szokott lenni. Nem tudom a mostani windows-okba a notepad az tudja e kezelni a különböző fajta sorvégjeleket, évtizedekig nem oldották meg. Nem használok windows-t. A fejlesztők kis százaléka használ windows-t. A notepad++ -ot használtam notepad helyett még amikor használtam win-t.
Ezt kéne megnézni hogy milyen kimenetet ad, ha hexa string-be konvertáljuk:
Nálam az alma txt első sorát beolvasva és konvertálva : 31:32:33:7c:61:6c:6d:61:0a .
Az unique_fruits.txt fájlt egészében olvastam be text módba, nem soronként, ekkor meg : 33:34:31:7c:63:69:74:72:6f:6d:32:0a:33:34:35:7c:63:69:74:72:6f:6d:0a
ott van közte a 0a az a sorvégjelet jelenti a text fájlba.
A kód : [link]
A kép : [link]
Kapcsolódó kérdések:
Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!