我有一个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.csv
、B.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])
很难浏览代码并完全理解它,因为它引用的变量与您的解释不同,但我相信这种方法会对您有所帮助。你知道吗
首先,将所有的
a.csv
读入一个set
中,其中包含您想要查找的特征。sets
在Python中有非常快的查找时间。这也会对您有所帮助,因为在上面的代码的内部循环中,您似乎需要进行大量的重复计算。你知道吗然后开始阅读
b.csv
,使用前面的a.csv set
进行检查。无论何时找到匹配项,都要写入A.csv
和B.csv
。你知道吗对当前设置可以做的最大的加速就是去掉内部循环中的重复计算,以及对线程的需求。因为
a.csv
只有2000行,所以读起来会非常快。你知道吗如果你想让我进一步了解这件事,请告诉我。你知道吗
相关问题 更多 >
编程相关推荐