由于是我的第一篇文章,我想打个招呼,我很高兴能够参加这个非常棒的社区活动!我想学习编程,我决定从python开始,我已经在python中已经有2个月了,所以我处于初级阶段。
我的第一个挑战是帮助一个有以下情况的朋友,我可以理解基本的python函数,但我需要的脚本对我的lvl来说有点复杂。
所以我有2个csv文件(file1.csv,file2.csv),如果该索引在file1中,我需要根据每行中file2.csv的索引[ codfiscal ]进行检查.csv在任何行中,如果它不打印file3.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
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
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然后转换回来!
非常感谢你的时间,所有的帮助都会非常渺茫!
答案 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")