Fájlban szereplő sorok kiíratása egy másik fájban szereplő minták alapján

Sziasztok! Segítséget kérnék az alábbi feladat megoldásában.

Van egy párszáz soros "A" és "B" csv fájlom az alábbi tartalommal:

"A" fájl

sorszám; név1; név2;
012;nagyon nagy kutya;munka;
019;nagyon kicsi macska;házi
023;nagy pisztoly;sport
stb.

"B" fájl:

sorszám;
017
023
042
stb.

Az "A" fájlban szereplő sorok közül ki kellene egy "C" fájba iratnom azokat a sorokat, amelyekre a "B" fájlban egyezés található. Vagyis ha található az "A"-ban olyan sorszám amely a "B"-ben szerepel akkor azt a sort írja ki.

A példa alapján most a "C" fájlba a "023; nagy pisztoly; sport" sor kerülne.

Köszi!

Hozzászólások

`join`? amennyiben sorba vannak rendezve sorszam szerint a file-ok ugy kb ennyi:


$ cat a.txt
sorszám; név1; név2;
012;nagyon nagy kutya;munka;
019;nagyon kicsi macska;házi
023;nagy pisztoly;sport
$ cat b.txt
sorszám;
017
023
042
$ join -t ';' -j 1 a.txt b.txt
sorszám; név1; név2;;
023;nagy pisztoly;sport
$ 

ha nincsenek sorbarendezve akkor elobb sorbarendezed majd ugy join :)


#!/usr/bin/env python3
#-*- coding:utf-8 -*-

data=[]
with open("Afile.csv") as finp:

    for line in finp:
        line=line.strip()
        if line and line[0].isdigit():
            data.append(line.split(";"))

with open("Bfile.csv") as findex, open("Cfile.cvs","w") as fout:

    for line in findex:
        line=line.strip()
        if line.isdigit():
            for l in data:
                if l[0]==line:
                    fout.write(";".join(l)+"\n")

--
eutlantis

Valószínűleg az a probléma, hogy a B fájlban a sorszám után is van ';'.
Ha így van, akkor az rstrip()-pet be kell ide tenni:


for line in findex:
        line=line.strip().rstrip(";")

Szerk.:
Ez a változat elhagyja a split()-et és a joint()-ot:


data=[]
with open("Afile.csv") as finp:

    for line in finp:
        line=line.strip()
        if line.partition(";")[0].rstrip().isdigit():
            data.append(line)

with open("Bfile.csv") as findex, open("Cfile.cvs","w") as fout:

    for line in findex:
        sorsz=line.replace(";","").strip()
        if sorsz.isdigit():
            for s in data:
                if s.startswith(sorsz):
                    fout.write(s+"\n") 

--
eutlantis

Hol adnak ilyen házit a szünetre...?

Ugyan a fenti 2 zseniálisan egyszerű megoldáshoz képest ágyúval verébre, de hasonló feladatokra apache drill. A bemenet csv-ket db táblaként kezeli és műk az sql lekérdezés.