如何减少从csv文件读取数据时的延迟?

2024-10-01 09:30:04 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个excel,其中有2000行,每行包含1个数据,如

a.xls公司

RowNum    Item 
1          'A'
2          'B'
3          'C'
.
.
.
2000      'xyz'

我还有另一个文件b.xls,其中包含大约6300万行数据。在这个文件中a.xls中出现了一些数据。我需要从文件b.xls中选取与a.xls中的项对应的所有数据,并将它们存储在名为A.csvB.csv等的单独文件中

我是用多线程来实现的,但是执行起来要花很多时间。有人能帮我减少延迟吗?你知道吗

这是我用过的代码。以下函数在线程中启动

def parseFromFile(pTickerList):
    global gSearchList

    lSearchList = gSearchList

    for lTickerName in pTickerList:
        c = csv.writer( open("op-new/"+ lTickerName + ".csv", "wb"))
        c.writerow(["Ticker Name", "Time Stamp","Price", "Size"])

        for line in lSearchList:
            lSplittedLine = line.split(",")
            lTickerNameFromSearchFile = lSplittedLine[0].strip()

            if lTickerNameFromSearchFile[0] == "#":
                continue

            if ord(lTickerName[0]) < ord(lTickerNameFromSearchFile[0]):
                break
            elif ord(lTickerName[0]) > ord(lTickerNameFromSearchFile[0]):
                continue

            if lTickerNameFromSearchFile == lTickerName:
                lTimeStamp = Decimal(float(lSplittedLine[1]))
                lPrice = lSplittedLine[2]
                lSize = lSplittedLine[4]


                    if str(lTimeStamp)[len(str(lTimeStamp))-2:] == "60":
                        lTimeStamp = str(lTimeStamp)[:len(str(lTimeStamp))-2] + "59.9"

                    if str(lTimeStamp).find(".") >= 0:
                        lTimeStamp = float(str(lTimeStamp).split(".")[0] + "." + str(lTimeStamp).split(".")[1][0])
                        lTimeStamp1 = "%.1f" %float(lTimeStamp)
                        lHumanReadableTimeStamp = datetime.strptime(str(lTimeStamp1), "%Y%m%d%H%M%S.%f")
                    else:
                        lHumanReadableTimeStamp = datetime.strptime(str(lTimeStamp), "%Y%m%d%H%M%S")

                except Exception, e:
                    exc_type, exc_obj, exc_tb = sys.exc_info()
                    fname = os.path.split(exc_tb.tb_frame.f_code.co_filename)[1]      
                    print(exc_type, fname, exc_tb.tb_lineno)
                    print line
                    print lTimeStamp
                    raw_input()

                c.writerow([lTickerNameFromSearchFile, lHumanReadableTimeStamp,lPrice, lSize])

Tags: 文件csv数据iflinexlstbsplit
1条回答
网友
1楼 · 发布于 2024-10-01 09:30:04

很难浏览代码并完全理解它,因为它引用的变量与您的解释不同,但我相信这种方法会对您有所帮助。你知道吗

首先,将所有的a.csv读入一个set中,其中包含您想要查找的特征。sets在Python中有非常快的查找时间。这也会对您有所帮助,因为在上面的代码的内部循环中,您似乎需要进行大量的重复计算。你知道吗

然后开始阅读b.csv,使用前面的a.csv set进行检查。无论何时找到匹配项,都要写入A.csvB.csv。你知道吗

对当前设置可以做的最大的加速就是去掉内部循环中的重复计算,以及对线程的需求。因为a.csv只有2000行,所以读起来会非常快。你知道吗

如果你想让我进一步了解这件事,请告诉我。你知道吗

相关问题 更多 >