Python 2 csv文件解析器,输出file1.csv中的内容,但不输出file2.csv

时间:2016-04-10 17:45:20

标签: python excel python-2.7 csv

由于是我的第一篇文章,我想打个招呼,我很高兴能够参加这个非常棒的社区活动!我想学习编程,我决定从python开始,我已经在python中已经有2个月了,所以我处于初级阶段。

我的第一个挑战是帮助一个有以下情况的朋友,我可以理解基本的python函数,但我需要的脚本对我的lvl来说有点复杂。

所以我有2个csv文件(file1.csv,file2.csv),如果该索引在file1中,我需要根据每行中file2.csv的索引[ codfiscal ]进行检查.csv在任何行中,如果它不打印file3.csv中的所有行。 为了更好地理解我的问题,我将发布一些示例示例:

输入:

file2.csv

Denumire; codfiscal ; jreg; adresaCOR; adresaNLC; judet1; localitate; tipclient; stare; nu platete la soc :; stare firma; an_jreg

“”“ACNORD”“ - P SRL”; 15444630 ; J2 / 614/2003; NR 14; NR 14; ARAD; SANMARTIN; PJ; FUNCTIUNE; ENEL; active; 2003

“”“ARBU”“ - TOY SRL”; 12766886 ; J2 / 122/2000; SOS。 CURTICI-DOROBAN?I NR F.N。; SOS。 CURTICI-DOROBAN?I NR F.N.; ARAD; CURTICI; PJ; FUNCTIUNE; ENEL; active; 2000

(IN.A.P.S)INARCH PREMO STRUCTURES SRL; 16420906 ; J2 / 844/2004; B-DUL GENERAL VASILE MILEA NR 3 ET 2 AP 11; B-DUL GENERAL VASILE MILEA NR 3 ET 2 AP 11; ARAD; ARAD; PJ; FUNCTIUNE; ENEL; active; 2004

?IRU CONSTRUCT SRL; 22802765 ; J35 / 4342/2007; STR。 TESATORILOR NR 8A ET 4 AP 10; STR。 TESATORILOR NR 8A ET 4 AP 10; TIMIS; LUGOJ; PJ; FUNCTIUNE; ENEL; active; 2007

?OLEA INTER-COM SRL; 16918200 ; J2 / 1887/2004; NR 276; NR 276; ARAD; GROSENI; PJ; FUNCTIUNE; ENEL; active; 2004

file1.csv

Denumire; codfiscal ; jreg; adresaCOR; adresaNLC; judet1; localitate; tipclient; stare; nu platete la soc :; stare firma; an_jreg

“”“ACNORD”“ - P SRL”; 15444630 ; J2 / 614/2003; NR 14; NR 14; ARAD; SANMARTIN; PJ; FUNCTIUNE; ENEL; active; 2003

“”“ARBU”“ - TOY SRL”; 12766886 ; J2 / 122/2000; SOS。 CURTICI-DOROBAN?I NR F.N。; SOS。 CURTICI-DOROBAN?I NR F.N.; ARAD; CURTICI; PJ; FUNCTIUNE; ENEL; active; 2000

(IN.A.P.S)INARCH PREMO STRUCTURES SRL; 16420906 ; J2 / 844/2004; B-DUL GENERAL VASILE MILEA NR 3 ET 2 AP 11; B-DUL GENERAL VASILE MILEA NR 3 ET 2 AP 11; ARAD; ARAD; PJ; FUNCTIUNE; ENEL; active; 2004

.A.S.A。 SERVICII ECOLOGICE SRL; 14822567 ; J2 / 648/2002; ZONA CET - SOSEAUA CENTURA NORD NR FN; ZONA CET - SOSEAUA CENTURA NORD NR FN; ARAD; ARAD; PJ; FUNCTIUNE; ENEL; active; 2002

?AIZAR CONS SRL; 23957563 ; J11 / 441/2008; B-DUL REPUBLICII NR 25 SC 3 ET 8 AP 29; B-DUL REPUBLICII NR 25 SC 3 ET 8 AP 29; CARAS-SEVERIN; RESITA; PJ; FUNCTIUNE; ENEL; active; 2008

?ICA - STRONG SRL; 15528110 ; J2 / 745/2003; STR。 OCSKO TEREZIA BL 11 SC B ET 2 AP 6; STR。 OCSKO TEREZIA BL 11 SC B ET 2 AP 6; ARAD; ARAD; PJ; FUNCTIUNE; ENEL; active; 2003

?IGHERTU CONSTRUCT SRL; 19298294 ; J2 / 2238/2006; STR。 CEZAR NR 5; STR。 CEZAR NR 5; ARAD; ARAD; PJ; FUNCTIUNE; ENEL; active; 2006

通缉输出:

file3.csv

Denumire; codfiscal ; jreg; adresaCOR; adresaNLC; judet1; localitate; tipclient; stare; nu platete la soc :; stare firma; an_jreg

?IRU CONSTRUCT SRL; 22802765 ; J35 / 4342/2007; STR。 TESATORILOR NR 8A ET 4 AP 10; STR。 TESATORILOR NR 8A ET 4 AP 10; TIMIS; LUGOJ; PJ; FUNCTIUNE; ENEL; active; 2007

?OLEA INTER-COM SRL; 16918200 ; J2 / 1887/2004; NR 276; NR 276; ARAD; GROSENI; PJ; FUNCTIUNE; ENEL; active; 2004

这是我的csv示例,对它们进行了一些编辑,以便您可以更好地看到它们(忽略空格)。

重要的是,我的真实数据就像file1.csv上的100k行和file2.csv上的50k行一样。所以脚本必须处理大数据。我有关于xcell文件的这些数据,并且我会更容易使用cvs然后转换回来!

非常感谢你的时间,所有的帮助都会非常渺茫!

2 个答案:

答案 0 :(得分:0)

使用Python集。假设该数字始终位于第二列:

#load CV2

inCv2Set=set()
with open("file2.csv",'r') as file2:
   data=file2.read().split(' ')
   numbers = map(lambda x: x.split(';')[1],data)
   inCv2Set=set(numbers)

outFile=open("file3.csv")
with open("file1.csv",'r') as file1:
   data=file1.read().split(' ')
   header=data[0]
   data=data[1:] # to remove head
   #loop over the data and insert if not in the set
   for d in data:
        if not d.split(';')[1] in inCv2Set:
             outFile.write(d+'\n')
outFile.close()

如果您不知道该位置可以进一步操纵头部

答案 1 :(得分:0)

我将如何做到这一点:

codfiscal_in_f1_set = set()
with open("file1.csv", 'r') as f1:
    for line in f1:
        line = line.strip()
        if not line:
            continue

        codfiscal_in_f1_set.add(line.split(";")[1])

with open("file2.csv", 'r') as f2, open("file3.csv", "w") as output_file:
    for line in f2:
        line = line.strip()
        if not line:
            continue

        codfiscal = line.split(";")[1]
        if codfiscal not in codfiscal_in_f1_set:
            output_file.write(line + "\n")