我正在处理超过6毫米行的股票代码数据。我想抓取一个符号的所有数据,做我需要的处理,并输出结果。在
我写过代码,告诉我每一个股票代码从哪一行开始(见下面的代码)。我在想,如果我知道一个新符号从什么位置开始(而不是行号),这样我就可以使用seek(#)轻松地跳转到股票代码的起始位置。我也很好奇如何扩展这个逻辑来读取股票行情器的整个数据块(起始位置到结束位置)。在
import csv
data_line = 0 # holds the file line number for the symbol
ticker_start = 0
ticker_end = 0
cur_sec_ticker = ""
ticker_dl = [] # array for holding the line number in the source file for the start of each ticker
reader = csv.reader(open('C:\\temp\sample_data.csv', 'rb'), delimiter=',')
for row in reader:
if cur_sec_ticker != row[1]: # only process a new ticker
ticker_fr = str(data_line) + ',' + row[1] # prep line for inserting into array
# desired line for inserting into array, ticker_end would be the last
# of the current ticker data block, which is the start of the next ticker
# block (ticker_start - 1)
#ticker_fr = str(ticker_start) + str(ticker_end) + str(data_line) + ',' + row[1]
print ticker_fr
ticker_dl.append(ticker_fr)
cur_sec_ticker = row[1]
data_line += 1
print ticker_dl
下面我放了一个小样本来说明数据文件:
^{pr2}$
通常,您可以使用}方法在后台做了一些缓存以隐藏这一点)。在
tell
方法获取文件对象的当前位置。但是,如果当前代码将文件读取委托给csv
模块,则可能很难使用该代码。逐行读取时甚至很难做到这一点,因为底层的file对象可能会被读入比一行更大的块中(方法readline
和{如果你需要的话,你可以把整个文件都放在你自己读的时候。^{cd1>可能不是必要的。在
类似这样的方法可以读取数据块,然后将其拆分为行和值,同时跟踪到目前为止读取了多少字节:
如果文件的结尾不是
\n
,那么这可能需要稍作调整,但应该不会太难。在相关问题 更多 >
编程相关推荐