Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/313.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何根据范围内的两列查找csv文件之间的匹配项_Python_Loops_Csv_Match_Matching - Fatal编程技术网

Python 如何根据范围内的两列查找csv文件之间的匹配项

Python 如何根据范围内的两列查找csv文件之间的匹配项,python,loops,csv,match,matching,Python,Loops,Csv,Match,Matching,我目前正在努力拼凑一些代码,以便在一个范围内的两个csv文件中找到两个不同列中的值的匹配。我尝试过使用下面的代码,但它没有输出我要完成的任务。基本上,我希望输出一个新文件,其中包含第二个文件中与第一个文件中相同列匹配的所有行,而不是将它们合并在一起。我在代码下面添加了更详细的说明。我觉得到目前为止我所做的可能是完全错误的。为了让我的代码产生我想要的结果,我需要修改什么 import csv with open('F435W.csv') as csvF435: readCSV1 = cs

我目前正在努力拼凑一些代码,以便在一个范围内的两个csv文件中找到两个不同列中的值的匹配。我尝试过使用下面的代码,但它没有输出我要完成的任务。基本上,我希望输出一个新文件,其中包含第二个文件中与第一个文件中相同列匹配的所有行,而不是将它们合并在一起。我在代码下面添加了更详细的说明。我觉得到目前为止我所做的可能是完全错误的。为了让我的代码产生我想要的结果,我需要修改什么

import csv

with open('F435W.csv') as csvF435:
    readCSV1 = csv.reader(csvF435, delimiter=',')
    with open("F550Mnew.csv", "w") as new_F550M:
        pass
    with open("F550Mnew.csv", "a") as new_F550M:
        for header in readCSV1:
            new_F550M.write(','.join(header)+'\n')
            break
        for l435 in readCSV1:
            with open('F550M.csv') as csvF550:
                readCSV2 = csv.reader(csvF550, delimiter=',')
                for l550 in readCSV2:
                    if isfloat(l435[12]) and isfloat(l550[12]) and abs(float(l435[12])-float(l550[12])) < 0.002778:
                        if isfloat(l435[13]) and isfloat(l550[13]) and abs(float(l435[13])-float(l550[13])) < 0.002778:
                            new_F550M.write(','.join(l550)+'\n')
F550M.csv文件2

2,1921.566,0.01258874,-8.2091,0,37128.06,0.2618096,-11.4243,0,0.01455503,4617.5225,554.576,49.9887896,41.5264699,6.09E+01,8.09E+02,1.78E+01,28.459,7.779,88.63,0.00054,0.00036,77.04
3,1.055918,0.01256313,-0.0591,0.0129,9.834856,0.1109255,-2.4819,0.0122,-0.002955142,3936.4946,85.3255,49.9949149,41.5370016,3.98E+01,1.23E+01,1.54E+01,6.83,2.336,24.13,0.06362,0.01965,23.98
4,151.2355,0.01260153,-5.4491,0.0001,184.0693,0.03634057,-5.6625,0.0002,-0.002626019,3409.2642,76.9891,49.9931935,41.5442109,4.02E+00,4.35E+00,-1.47E-03,2.086,2.005,-89.75,0.00227,0.00198,66.61
5,0.3506025,0.01258874,1.138,0.039,0.3466277,0.01300407,1.1503,0.0407,-0.002441164,3351.9893,8.9147,49.9942299,41.5451727,4.97E-01,5.07E-01,7.21E-03,0.715,0.702,62.75,0.02,0.01989,82.88
6,1.166133,0.01257594,-0.1669,0.0117,0.005819145,0.009692424,5.5879,1.8089,-0.003201006,3476.9932,10,49.9946543,41.5434658,5.88E-01,8.33E-02,0.00E+00,0.767,0.289,0,0.01497,0.00499,0
7,0.1372164,0.0125503,2.1565,0.0993,0.1238123,0.02608246,2.2681,0.2288,-0.003556473,3535.5281,13.4586,49.9947993,41.5426587,2.49E-01,2.48E-01,-7.69E-03,0.506,0.491,-43.27,0.05264,0.05237,-55.87
8,0.6174777,0.01260153,0.5234,0.0222,0.6206718,0.01300407,0.5178,0.0228,-0.002441164,3357.0044,20.0487,49.9940449,41.5450748,5.10E-01,5.22E-01,-6.28E-03,0.724,0.712,-66.7,0.01194,0.01192,84.82
9,1.46848,0.01260153,-0.4172,0.0093,0.001897994,0.009688255,6.8043,5.5435,-0.003612399,3584.0171,16,49.9949252,41.5419909,5.87E-01,8.33E-02,0.00E+00,0.766,0.289,0,0.01175,0.00392,0
10,1.452348,0.01258874,-0.4052,0.0094,3.124427,0.04807406,-1.2369,0.0167,-0.003148756,3805.6069,39.5791,49.9952831,41.5389075,2.25E+00,3.87E+00,-6.77E-01,2.03,1.416,-70.08,0.0302,0.01891,-67.61
11,0.1548658,0.01260153,2.0251,0.0884,0.1777253,0.01630147,1.8756,0.0996,-0.002919044,3459.7681,25.6248,49.9943085,41.5436591,4.64E-01,2.34E-01,8.40E-02,0.701,0.455,18.09,0.05739,0.03321,18.33
12,0.5046132,0.01253746,0.7426,0.027,0.7798272,0.04462456,0.27,0.0621,-0.00261193,3418.9119,65.5326,49.9934365,41.5441099,6.87E-01,2.77E+00,-2.92E-01,1.678,0.804,-82.19,0.05363,0.02182,-83.28
13,0.380733,0.01260153,1.0484,0.0359,0.4313257,0.01605258,0.913,0.0404,-0.003497544,3548.8484,34.5602,49.9944623,41.542421,8.27E-01,8.51E-01,8.92E-02,0.964,0.865,48.75,0.03776,0.03252,30.61
14,0.1643925,0.01258874,1.9603,0.0832,0.2181225,0.01839054,1.6532,0.0916,-0.003121084,3710.6785,33.3215,49.9950598,41.5402182,2.18E-01,2.18E-01,1.03E-01,0.567,0.339,45,0.0757,0.04376,45
15,0.3959635,0.01260153,1.0059,0.0346,0.9984215,0.0763398,0.0017,0.083,-0.003106286,3805.9988,48.3363,49.995125,41.5388789,1.87E+00,3.12E+00,4.86E-01,1.813,1.304,71.09,0.0559,0.04105,67.61
16,0.1625628,0.01260153,1.9724,0.0842,0.3490304,0.02234424,1.1428,0.0695,-0.002472953,3410.77,38.0388,49.9939083,41.544294,1.77E-01,4.75E-01,8.92E-03,0.689,0.421,88.29,0.0769,0.04707,89.86
17,0.1725209,0.01260153,1.9079,0.0793,0.2965718,0.02357189,1.3197,0.0863,-0.003454017,3629.0247,40.9706,49.9946304,41.541311,3.73E-01,7.91E-01,-3.73E-01,1.004,0.393,-59.65,0.09781,0.03734,-58.27
18,0.3034717,0.01260153,1.2947,0.0451,0.5031242,0.02774418,0.7458,0.0599,-0.003073985,4079.0825,42,49.9962105,41.5351731,6.68E-01,8.33E-02,0.00E+00,0.818,0.289,0,0.06348,0.02106,0
19,1.593927,0.01260153,-0.5062,0.0086,1.860803,0.0219809,-0.6743,0.0128,-0.003038161,4065.9434,58.3703,49.9958657,41.5353087,1.75E+00,1.41E+00,-7.15E-03,1.323,1.188,-1.21,0.01697,0.01464,-0.43
20,0.5464995,0.01258874,0.656,0.025,0.5661472,0.0144696,0.6177,0.0278,-0.003053429,4045.0474,54.439,49.9958631,41.535604,5.43E-01,8.46E-01,-1.22E-03,0.92,0.737,-89.77,0.02257,0.01649,-89.72
21,1.303251,0.01253746,-0.2876,0.0104,1.296672,0.01418861,-0.2821,0.0119,-0.00259741,4240.1406,55.2714,49.9965409,41.5329423,6.05E-01,6.81E-01,7.89E-03,0.826,0.777,84.15,0.00892,0.00852,69.62
22,0.5174786,0.01260153,0.7153,0.0264,0.5260691,0.01390194,0.6974,0.0287,-0.003019847,3828.95,55.19,49.9950817,41.5385478,5.18E-01,7.56E-01,-6.34E-02,0.879,0.709,-75.96,0.0236,0.01643,-75.02
23,0.1551826,0.01260153,2.0229,0.0882,0.166565,0.01726119,1.946,0.1125,-0.003271136,3504.7439,52.7386,49.9939745,41.5429739,1.91E-01,6.86E-01,1.89E-01,0.866,0.356,71.33,0.10376,0.04235,71.56
24,0.2214222,0.01260153,1.6369,0.0618,0.2389908,0.01360924,1.554,0.0618,-0.00285033,3750.3167,54.0027,49.994824,41.5396229,4.32E-01,5.51E-01,1.68E-03,0.742,0.657,89.18,0.04862,0.04505,89.94
25,0.1336059,0.01253746,2.1854,0.1019,0.1320868,0.009830156,2.1979,0.0808,-0.002921393,3459.6851,51.7091,49.9938331,41.5435908,2.16E-01,2.06E-01,-9.16E-02,0.55,0.345,-43.52,0.06231,0.03626,-45.19
26,0.1703959,0.01260153,1.9214,0.0803,0.1577456,0.0152816,2.0051,0.1052,-0.002779523,3446.95,49,49.9938372,41.5437717,7.29E-01,8.33E-02,0.00E+00,0.854,0.289,0,0.11183,0.03721,0
27,1.896325,0.01258874,-0.6948,0.0072,1.941203,0.0152816,-0.7202,0.0085,-0.00306097,3809.6836,57.8143,49.9949655,41.5388035,7.38E-01,6.80E-01,7.46E-03,0.86,0.824,7.18,0.00713,0.00678,59.71
28,0.6522877,0.01260153,0.4639,0.021,0.1713469,0.01312423,1.9153,0.0832,-0.002447558,4271.9614,52,49.9967135,41.5325172,5.92E-01,8.33E-02,0.00E+00,0.77,0.289,0,0.0274,0.00913,0
29,0.1370073,0.0125503,2.1581,0.0995,0.101415,0.02614047,2.4847,0.2799,-0.002207851,4324.667,55.3374,49.99684,41.5317898,2.22E-01,2.24E-01,1.12E-01,0.579,0.332,45.18,0.07753,0.04476,45
30,0.2240251,0.01253746,1.6243,0.0608,0.2254432,0.01360924,1.6174,0.0656,-0.003037372,3960.3042,58.9024,49.9954807,41.5367473,4.18E-01,4.81E-01,-1.07E-02,0.695,0.645,-80.65,0.03802,0.03492,-88.86

通过嵌套所有循环和条件,您正在使程序复杂化。把它分解成简单的步骤

执行以下操作。 1.读取两个csv文件并将其转换为二维列表。 2.根据给定的索引比较循环中列表的列/值,将第二个列表中的行添加到新的输出列表中。 3.将输出列表写入csv文件

def read_file(filepath):
    with open(filepath,'r') as f:
        x = csv.reader(f)
        l = list(x)  
    return l  

l435 = read_file('F435W.csv')
l550 = read_file('F550M.csv')
new_F550M = []
r = 0.002778

for i in l550:
    for j in l435:
       # I did't exactly get your if condition, so I am putting it down based on what I understood, so if it is wrong, modify it accordingly.
       if isfloat(i[12]) and isfloat(j[12]) and abs(float(i[12]) float(j[12])) < r:
            if isfloat(i[13]) and isfloat(j[13]) and abs(float(i[13]) float(j[13])) < r:
                new_F550M.append(i)

with open('new_F550M.csv','w') as f:
    out = csv.writer(f)
    out.writerows(new_F550M)

代码中有很多循环。编写一个函数,将csv文件中的数据读取到列表中,使用此函数将所有需要的csv文件打开到列表中,处理数据,将最终数据放入列表中,然后将其写入新的csv文件。谢谢。我再试一次。我想那可能是我最初的方法,但我从来没能让它起作用。我理解。非常感谢。我的if语句一定有问题。我试图使用它们来查找F435W.csv中的第13列值和第14列值与F550M.csv中的第13列值和第14列值相差0.0002778的行,但这可能不是正确的方法。我甚至不确定if语句是否应该用于此目的。我似乎得到了匹配的行,但有些行在输出文件中重复了几次,有些行没有重复,只出现了一次。
def read_file(filepath):
    with open(filepath,'r') as f:
        x = csv.reader(f)
        l = list(x)  
    return l  

l435 = read_file('F435W.csv')
l550 = read_file('F550M.csv')
new_F550M = []
r = 0.002778

for i in l550:
    for j in l435:
       # I did't exactly get your if condition, so I am putting it down based on what I understood, so if it is wrong, modify it accordingly.
       if isfloat(i[12]) and isfloat(j[12]) and abs(float(i[12]) float(j[12])) < r:
            if isfloat(i[13]) and isfloat(j[13]) and abs(float(i[13]) float(j[13])) < r:
                new_F550M.append(i)

with open('new_F550M.csv','w') as f:
    out = csv.writer(f)
    out.writerows(new_F550M)