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

你好,我正在寻找一些帮助,像在Excel中的索引匹配,我是非常新的Python,但我的数据集远远大于Excel现在

我会尽可能地把我的问题贬低,导致数据中包含大量不相关的信息给这个问题

CSV A(有3个基本栏)

Name, Date, Value 

CSV B(有2列)

 Value, Score 

CSV C(我想用python创build这个; 2列)

 Name, Score 

我所要做的就是input一个date,然后在CSV A中查找与“date”匹配的所有行,然后在CSV B的CSV A中查找与该行中“value”关联的“score”,并返回它在CSV C连同人的名字。 冲洗并重复每一行

任何帮助非常感谢,我似乎并没有太多

这是一个使用Python的csv模块的工作脚本:

它提示用户input一个date(格式为md-yy ),然后逐行读取csvA来检查每行中的date是否与input的date匹配。

如果是,则检查与当前A行的date相对应的值是否与csvB中的任何行相匹配。

如果有匹配的话,它会把csvA的名字和从csvBcsvC的分数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 

如果你使用的是Unix,你可以通过下面的shell脚本来做到这一点,我假设你在file_C中追加search输出,并且在源文件中没有重复


而真的

回声“inputdate…”

读取date

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

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

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

echo“$ {value_one},$ {value_two}”>> file_c

回声“要search更多的date…按y | y,按任何其他键退出”

阅读

if [“$ ch”=“y”] || [“$ ch”=“y”]

然后

继续

其他

出口

科幻

DONE