将两个 csv 文件的部分匹配到 return 某些元素

Matching parts of two csv files to return certain elements

你好,我正在寻找一些帮助来做 excel 中的索引匹配我是 python 的新手,但我的数据集对于 excel 现在来说太大了

我会尽可能地简化我的问题,因为数据包含很多与这个问题无关的信息

CSV A(有 3 个基本列)

Name, Date, Value

CSV B(有 2 列)

Value, Score

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

Name, Score

我想做的就是输入一个日期并让它在 CSV A 中查找与 "date" 匹配的所有行,然后查找与 "value" 关联的 "score"从 CSV A 中的那一行到 CSV B,然后将其与人名一起返回到 CSV C 中。冲洗并重复每一行

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

如果你使用的是 unix,你可以通过下面的 shell 脚本来做到这一点 我还假设您在 file_C 中附加搜索输出并且两个源文件中都没有重复


为真

回声"enter date ..."

阅读日期

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

回声"want to search more dates ... press y|Y, press any other key to exit"

阅读频道

if [ "$ch" = "y" ] || [ "$ch" = "y" ]

然后

继续

其他

退出

fi

完成

这是一个使用 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