当前位置: 首页 > 面试题库 >

循环浏览一个csv文件的行以在另一个csv文件中查找对应的数据

浦德明
2023-03-14
问题内容

我遇到一个有趣的问题:

file1.csv有几百行,例如:

Code,DTime
1,2010-12-26 17:01
2,2010-12-26 17:07
2,2010-12-26 17:15

file2.csv大约有1100万行,例如:

id,D,Sym,DateTime,Bid,Ask
1375022797,D,USD,2010-12-26 17:00:15,1.311400,1.311700
1375022965,D,USD,2010-12-26 17:00:56,1.311200,1.311500
1375022984,D,USD,2010-12-26 17:00:56,1.311300,1.311600
1375023013,D,USD,2010-12-26 17:01:01,1.311200,1.311500
1375023039,D,USD,2010-12-26 17:01:02,1.311100,1.311400
1375023055,D,USD,2010-12-26 17:01:03,1.311200,1.311500
1375023063,D,USD,2010-12-26 17:01:03,1.311300,1.311600

我想做的是编写一个脚本,该脚本接受file1.csv中的每个DTime值,并在file2.csv的DateTime列中找到部分匹配的第一个实例,并输出DateTime,Bid,Ask询问该行。部分匹配位于前16个字符上。

这两个文件都是按照从最早到最新的顺序排序的,因此,如果file1.csv中的“ 2010-12-26
17:01”与file2.csv中的4个条目匹配,我只需要提取第一个文件:“ 2010-12-26 17: 01:01“

不知道如何进行..我尝试了字典,但是值的顺序很重要,所以我不确定是否可以使用。也许将file1的DTime列放入列表中,并为该列表中的每个条目搜索file2中的DateTime?

多谢你们


问题答案:

如果没有重复的DTime值,这应该可以工作:

import csv

file1reader = csv.reader(open("file1.csv"), delimiter=",")
file2reader = csv.reader(open("file2.csv"), delimiter=",")

header1 = file1reader.next() #header
header2 = file2reader.next() #header

for Code, DTime in file1reader:
    for id_, D, Sym, DateTime, Bid, Ask in file2reader:
        if DateTime.startswith(DTime): # found it
            print DateTime, Bid, Ask   # output data
            break                      # break and continue where we left next time

编辑

import csv
from datetime import datetime

file1reader = csv.reader(open("file1.csv"), delimiter=",")
file2reader = csv.reader(open("file2.csv"), delimiter=",")

header1 = file1reader.next() #header
header2 = file2reader.next() #header

for Code, DTime in file1reader:
    DTime = datetime.strptime(DTime, "%Y-%m-%d %H:%M")
    for id_, D, Sym, DateTime, Bid, Ask in file2reader:
        DateTime = datetime.strptime(DateTime, "%Y-%m-%d %H:%M:%S")
        if DateTime>=DTime: # found it
            print DateTime, Bid, Ask   # output data
            break                      # break and continue where we left next time


 类似资料:
  • 如何在JMeter中将一个csv文件循环到另一个csv文件,其中第一个csv文件包含所有登录数据,另一个csv文件包含交易数据。我应该运行1个出纳员应该处理30笔交易的地方。

  • null 因此,我希望有条件地映射CSV文件的所有行,并将结果导出到另一个CSV文件中,每行的条件如下: > 如果第4列的值不为null,那么该行第4、5、6和7列的值应存储为名为LastValueSof4to7的数组。(在数据集中,如果第4列中的元素不为null,则第1、2和3列为null,可以忽略) 如果第3列的值不为null,那么第1、2和3列的值以及上述lastValuesOf4to7数组

  • 问题内容: 我正在使用以下外壳程序脚本将一个文件的内容查找到另一个文件中: 我正在执行脚本,但未显示CSV文件中的内容。我的contents.txt文件还包含CSV文件中的数字,例如或。我的工作有什么问题吗? 问题答案: 本身能够做到。只需使用标志: 是每行包含一个模式的文件;并且是要在其中进行搜索的东西文件。 请注意,即使每行的内容看起来像一个正则表达式,也要强制将每行视为一个模式,您应该使用f

  • 我在on文件夹的几个zip文件中有几个csv文件,例如: null zip中的一个csv是这样工作的: 你知道如何优化这个循环吗?

  • 问题内容: 我将多个csv文件保存在一个具有相同列布局的文件夹中,并希望将其作为pandas中的数据框加载到python中。 我正在使用以下代码: 是否有其他软件包更好的解决方案? 这需要很多时间。 谢谢 问题答案: 我建议使用列表理解:

  • 我正在尝试使用OpenCSV从一个CSV文件中读取。然后我想从输入csv中复制所有数据并将其输出到另一个csv文件,同时添加一个包含信息的新列。 我正在尝试的另一种方法是这样的(改变while循环,所有其他代码保持不变): 这确实正确地打印了所有的行,但是它只是复制。我想添加额外的“JSON”列及其数据。