匹配两个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
的名字和从csvB
到csvC
的分数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