匹配两个csv文件的部分以返回某些元素

时间:2015-07-11 04:27:38

标签: python excel csv lookup-tables

您好我正在寻找一些帮助来做excel中的索引匹配我是python的新手但是我的数据集现在远远超过excel

我会尽可能地愚蠢地解决我的问题,因为数据中包含很多与此问题无关的信息

CSV A(有3个基本列)

Name, Date, Value

CSV B(有2列)

Value, Score

CSV C(我想用python创建; 2列)

Name, Score

我想要做的就是输入一个日期并让它查找CSV A中与“日期”匹配的所有行,然后在CSV中查找与CSV中该行的“值”相关联的“得分” B并将其与人员姓名一起以CSV C格式返回。冲洗并重复每一行

任何帮助都非常感谢我似乎没有走得太远

2 个答案:

答案 0 :(得分:0)

如果您使用的是unix,可以通过下面的shell脚本执行此操作 另外我假设您要在file_C中附加搜索输出,并且两个源文件中都没有重复

虽然如此

回声"输入日期..."

阅读日期

value_one = grep $date file_A | cut -d',' -f1

TMP1 = grep $date' file_A | cut -d',' -f3

value_two = grep $tmp1 file_B | cut -d',' -f2

echo" $ {value_one},$ {value_two}" >> FILE_C

echo"想要搜索更多日期...按y | Y,按任意其他键退出"

读取ch

如果[" $ ch" =" y" ] || [" $ ch" =" y" ]

然后

继续

否则

退出

网络连接

完成

答案 1 :(得分:0)

以下是使用Python's csv module的工作脚本:

它提示用户输入日期(格式为m-d-yy),然后逐行读取csvA以检查每行中的日期是否与输入的日期匹配。

如果是,它会检查与当前A行的日期对应的值是否与csvB中的任何行匹配。

如果有匹配项,则会将csvA的名称和csvB的分数写为csvC

import csv
date = input('Enter date: ').strip()

A = csv.reader( open('csvA.csv', newline=''), delimiter=',')
matches = 0

# reads each row of csvA
for row_of_A in A:

    # removes whitespace before and after of each string in each row of csvA
    row_of_A = [string.strip() for string in row_of_A]

    # if date of row in csvA has equal value to the inputted date
    if row_of_A[1] == date:
        B = csv.reader( open('csvB.csv', newline=''), delimiter=',')

        # reads each row of csvB
        for row_of_B in B:

            # removes whitespace before and after of each string in each row of csvB
            row_of_B = [string.strip() for string in row_of_B]

            # if value of row in csvA is equal to the value of row in csvB
            if row_of_A[2] == row_of_B[0]:

                # if csvC.csv does not exist
                try:
                    open('csvC.csv', 'r')
                except:
                    C = open('csvC.csv', 'a')
                    print('Name,', 'Score', file=C)

                C = open('csvC.csv', 'a')

                # writes name from csvA and value from csvB to csvC
                print(row_of_A[0] + ', ' + row_of_B[1], file=C)

m = 'matches' if matches > 1 else 'match'
print('Found', matches, m)

示例csv文件:

csvA.csv

Name, Date, Value
John, 2-6-15, 10
Ray, 3-5-14, 25
Khay, 4-4-12, 30
Jake, 2-6-15, 100

csvB.csv

Value, Score
10, 500
25, 200
30, 300
100, 250

示例运行:

>>> Enter date: 2-6-15
Found 2 matches

csvC.csv (由脚本生成)

Name, Score
John, 500
Jake, 250