将两个 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
你好,我正在寻找一些帮助来做 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