从关键词之间从文件中提取数据



im试图编写一个程序,该程序在两个关键单词之间从文本文件中提取数据,并将数据放入元组列表中,将日期作为字符串和数据作为字符串,将数据作为一个int。我不能仅在循环

时用于循环

开始步骤数据

2010-01-01,1000

2010-01-02,2000

结束步骤数据

需要提取到这种格式[('2001-01-01',12776),('2001-01-02',15128)]

我写了这个程序:

mylist = []
line = open(filename).read()

start = '<begin step data>'
end = '<end step data>'

startpos = line.find(start) + len(start)
endpos = line.find(end, startpos)
data = line[startpos:endpos].strip("")
mylist.append(data.split())

但这将其以错误的格式说明:[['2001-01-01-01,12776','2001-01-01-02,15128']

我认为我可能对此有错误的侵犯

您可以使用读取线,但是您最终必须模仿循环行为以遍历每条线和东西,这是您不想要的。

但是,您的问题位于其他地方:您不能简单地从碎片中剥离字符列表,并期望它可以使您获得好格式。

如果您得到了诸如[['2001-01-01,12776', '2001-01-02,15128']]之类的东西,并且由于您似乎并没有寻求完美,则可以简单地接受已经拥有的东西,

  1. 通过数组中的每个字符串迭代[0]。
  2. 将这些字符串分成两组数据。
  3. 将第二个数据投入数字。

使用for循环,然后您可以转换。

desired_format = [] # Initialize empty result array.
for element in curr_result[0]: 
    element = element.split(',') # Separate values separated by comas.
    # Finally add seeken results as tuples.
    desired_format.append(
        (
            element[0],
            int(element[1]) # Cast second element as integer. 
        )
    )

(中间括号正在使元组捕获。)

请注意,如前所述,这是当前问题的快速而肮脏的修复程序,但是有很多更好的方法可以做到这一点,您可以稍后再挖掘。

但是您不会在奖金课程中停止。^^'

尝试使用re模块使用正则表达式(此处更深入说明正则说明):

# Find the (date, data) pairs
matches = re.findall('(d{4}-d{2}-d{2}),(d+)', text)
# Convert the data to an integer
matches = map(lambda m: (m[0], int(m[1])), matches)

如果愿意,您甚至可以使用re.findall调用作为map的第二个参数将其切成一条线。

最新更新