-2

我想编辑以下 csv 文件。这是我获得输入的格式,它实际上来自 Google Finance API 的数据,这些数据为某只股票提供股票报价,在这种情况下是阿迪达斯。我的服务日夜爬取这个 API 并将其存储在一个 csv 文件中。这是文件的外观:

(u'c', u'-1.29');(u'ccol', u'chr');(u'e', u'FRA');(u'ltt', u'9:57AM GMT+2');(u'l', u'83.36');(u's', u'0');(u'lt', u'Aug 23, 9:57AM GMT+2');(u't', u'ADS');(u'cp', u'-1.52');(u'id', u'7901819');(u'l_cur', u'\u20ac83.36')
(u'c', u'-1.29');(u'ccol', u'chr');(u'e', u'FRA');(u'ltt', u'9:57AM GMT+2');(u'l', u'83.36');(u's', u'0');(u'lt', u'Aug 23, 9:57AM GMT+2');(u't', u'ADS');(u'cp', u'-1.52');(u'id', u'7901819');(u'l_cur', u'\u20ac83.36')
(u'c', u'-1.29');(u'ccol', u'chr');(u'e', u'FRA');(u'ltt', u'10:11AM GMT+2');(u'l', u'83.35');(u's', u'0');(u'lt', u'Aug 23, 10:11AM GMT+2');(u't', u'ADS');(u'cp', u'-1.53');(u'id', u'7901819');(u'l_cur', u'\u20ac83.35')
(u'c', u'-1.29');(u'ccol', u'chr');(u'e', u'FRA');(u'ltt', u'10:11AM GMT+2');(u'l', u'83.35');(u's', u'0');(u'lt', u'Aug 23, 10:11AM GMT+2');(u't', u'ADS');(u'cp', u'-1.53');(u'id', u'7901819');(u'l_cur', u'\u20ac83.35')
(u'c', u'-1.29');(u'ccol', u'chr');(u'e', u'FRA');(u'ltt', u'10:11AM GMT+2');(u'l', u'83.35');(u's', u'0');(u'lt', u'Aug 23, 10:11AM GMT+2');(u't', u'ADS');(u'cp', u'-1.53');(u'id', u'7901819');(u'l_cur', u'\u20ac83.35')
(u'c', u'-1.29');(u'ccol', u'chr');(u'e', u'FRA');(u'ltt', u'10:11AM GMT+2');(u'l', u'83.35');(u's', u'0');(u'lt', u'Aug 23, 10:11AM GMT+2');(u't', u'ADS');(u'cp', u'-1.53');(u'id', u'7901819');(u'l_cur', u'\u20ac83.35')
(u'c', u'-1.29');(u'ccol', u'chr');(u'e', u'FRA');(u'ltt', u'10:11AM GMT+2');(u'l', u'83.35');(u's', u'0');(u'lt', u'Aug 23, 10:11AM GMT+2');(u't', u'ADS');(u'cp', u'-1.53');(u'id', u'7901819');(u'l_cur', u'\u20ac83.35')
(u'c', u'-1.29');(u'ccol', u'chr');(u'e', u'FRA');(u'ltt', u'10:11AM GMT+2');(u'l', u'83.35');(u's', u'0');(u'lt', u'Aug 23, 10:11AM GMT+2');(u't', u'ADS');(u'cp', u'-1.53');(u'id', u'7901819');(u'l_cur', u'\u20ac83.35')
(u'c', u'-1.29');(u'ccol', u'chr');(u'e', u'FRA');(u'ltt', u'10:11AM GMT+2');(u'l', u'83.35');(u's', u'0');(u'lt', u'Aug 23, 10:11AM GMT+2');(u't', u'ADS');(u'cp', u'-1.53');(u'id', u'7901819');(u'l_cur', u'\u20ac83.35')
(u'c', u'-1.29');(u'ccol', u'chr');(u'e', u'FRA');(u'ltt', u'10:11AM GMT+2');(u'l', u'83.35');(u's', u'0');(u'lt', u'Aug 23, 10:11AM GMT+2');(u't', u'ADS');(u'cp', u'-1.53');(u'id', u'7901819');(u'l_cur', u'\u20ac83.35')
(u'c', u'-1.29');(u'ccol', u'chr');(u'e', u'FRA');(u'ltt', u'10:11AM GMT+2');(u'l', u'83.35');(u's', u'0');(u'lt', u'Aug 23, 10:11AM GMT+2');(u't', u'ADS');(u'cp', u'-1.53');(u'id', u'7901819');(u'l_cur', u'\u20ac83.35')
(u'c', u'-1.29');(u'ccol', u'chr');(u'e', u'FRA');(u'ltt', u'10:11AM GMT+2');(u'l', u'83.35');(u's', u'0');(u'lt', u'Aug 23, 10:11AM GMT+2');(u't', u'ADS');(u'cp', u'-1.53');(u'id', u'7901819');(u'l_cur', u'\u20ac83.35')
(u'c', u'-1.29');(u'ccol', u'chr');(u'e', u'FRA');(u'ltt', u'10:11AM GMT+2');(u'l', u'83.35');(u's', u'0');(u'lt', u'Aug 23, 10:11AM GMT+2');(u't', u'ADS');(u'cp', u'-1.53');(u'id', u'7901819');(u'l_cur', u'\u20ac83.35')
(u'c', u'-1.29');(u'ccol', u'chr');(u'e', u'FRA');(u'ltt', u'10:11AM GMT+2');(u'l', u'83.35');(u's', u'0');(u'lt', u'Aug 23, 10:11AM GMT+2');(u't', u'ADS');(u'cp', u'-1.53');(u'id', u'7901819');(u'l_cur', u'\u20ac83.35')
(u'c', u'-1.29');(u'ccol', u'chr');(u'e', u'FRA');(u'ltt', u'10:11AM GMT+2');(u'l', u'83.35');(u's', u'0');(u'lt', u'Aug 23, 10:11AM GMT+2');(u't', u'ADS');(u'cp', u'-1.53');(u'id', u'7901819');(u'l_cur', u'\u20ac83.35')
(u'c', u'-1.29');(u'ccol', u'chr');(u'e', u'FRA');(u'ltt', u'10:11AM GMT+2');(u'l', u'83.35');(u's', u'0');(u'lt', u'Aug 23, 10:11AM GMT+2');(u't', u'ADS');(u'cp', u'-1.53');(u'id', u'7901819');(u'l_cur', u'\u20ac83.35')
(u'c', u'-1.29');(u'ccol', u'chr');(u'e', u'FRA');(u'ltt', u'10:11AM GMT+2');(u'l', u'83.35');(u's', u'0');(u'lt', u'Aug 23, 10:11AM GMT+2');(u't', u'ADS');(u'cp', u'-1.53');(u'id', u'7901819');(u'l_cur', u'\u20ac83.35')
(u'c', u'-1.29');(u'ccol', u'chr');(u'e', u'FRA');(u'ltt', u'10:11AM GMT+2');(u'l', u'83.35');(u's', u'0');(u'lt', u'Aug 23, 10:11AM GMT+2');(u't', u'ADS');(u'cp', u'-1.53');(u'id', u'7901819');(u'l_cur', u'\u20ac83.35')
(u'c', u'-1.29');(u'ccol', u'chr');(u'e', u'FRA');(u'ltt', u'10:11AM GMT+2');(u'l', u'83.35');(u's', u'0');(u'lt', u'Aug 23, 10:11AM GMT+2');(u't', u'ADS');(u'cp', u'-1.53');(u'id', u'7901819');(u'l_cur', u'\u20ac83.35')
(u'c', u'-1.29');(u'ccol', u'chr');(u'e', u'FRA');(u'ltt', u'10:11AM GMT+2');(u'l', u'83.35');(u's', u'0');(u'lt', u'Aug 23, 10:11AM GMT+2');(u't', u'ADS');(u'cp', u'-1.53');(u'id', u'7901819');(u'l_cur', u'\u20ac83.35')
(u'c', u'-1.29');(u'ccol', u'chr');(u'e', u'FRA');(u'ltt', u'10:11AM GMT+2');(u'l', u'83.35');(u's', u'0');(u'lt', u'Aug 23, 10:11AM GMT+2');(u't', u'ADS');(u'cp', u'-1.53');(u'id', u'7901819');(u'l_cur', u'\u20ac83.35')
(u'c', u'-1.29');(u'ccol', u'chr');(u'e', u'FRA');(u'ltt', u'10:11AM GMT+2');(u'l', u'83.35');(u's', u'0');(u'lt', u'Aug 23, 10:11AM GMT+2');(u't', u'ADS');(u'cp', u'-1.53');(u'id', u'7901819');(u'l_cur', u'\u20ac83.35')
(u'c', u'-1.29');(u'ccol', u'chr');(u'e', u'FRA');(u'ltt', u'10:11AM GMT+2');(u'l', u'83.35');(u's', u'0');(u'lt', u'Aug 23, 10:11AM GMT+2');(u't', u'ADS');(u'cp', u'-1.53');(u'id', u'7901819');(u'l_cur', u'\u20ac83.35')
(u'c', u'-1.29');(u'ccol', u'chr');(u'e', u'FRA');(u'ltt', u'10:11AM GMT+2');(u'l', u'83.35');(u's', u'0');(u'lt', u'Aug 23, 10:11AM GMT+2');(u't', u'ADS');(u'cp', u'-1.53');(u'id', u'7901819');(u'l_cur', u'\u20ac83.35')
(u'c', u'-1.01');(u'ccol', u'chr');(u'e', u'FRA');(u'ltt', u'10:32AM GMT+2');(u'l', u'83.63');(u's', u'0');(u'lt', u'Aug 23, 10:32AM GMT+2');(u't', u'ADS');(u'cp', u'-1.19');(u'id', u'7901819');(u'l_cur', u'\u20ac83.63')
(u'c', u'-1.01');(u'ccol', u'chr');(u'e', u'FRA');(u'ltt', u'10:32AM GMT+2');(u'l', u'83.63');(u's', u'0');(u'lt', u'Aug 23, 10:32AM GMT+2');(u't', u'ADS');(u'cp', u'-1.19');(u'id', u'7901819');(u'l_cur', u'\u20ac83.63')

现在我想以这种格式编辑每个数据行(这是第 23 和 24 行的数据):

10:31;2013-08-23;83.35;ADS
10:32;2013-08-23;83.35;ADS

第一部分时间

我希望它增加时间,因为每行都是一分钟。如您所见,原始数据中的第 23 行和第 24 行与之前(上午 10:11)的行相同,这是因为股票价格没有变化。但实际上它们是上午 10:31 和上午 10:32。有时时间并不完全合适(在给出新课程之前缺少一分钟),但这并不重要。此外,我希望时间格式为 24 小时,以便将我的上午和下午转换为 24 小时样式

第二部分日期:我希望它以上述格式为我提供数据,以便添加 2013 年(如本例中的硬编码)并将月份“Aug”转换为 08。我有几个月的时间年。

第三和第四部分:只需获取给定格式的数据

数据是 24 小时的,因此一天包含 1440 行。我也只想要 08:00 到 20:00 的数据。

应删除所有其他数据,以便获得所需的格式。

对于任何想法,我都会非常高兴。

4

1 回答 1

0

用作;分隔不同括号的分隔符

#! /usr/bin/python

import csv, sys, re, time

stock_file = open(sys.argv[1])
parsed = csv.reader(stock_file, delimiter=';')
writer = csv.writer(sys.stdout) #change sys.stdout to you preferred file name

info_list = []

for item in parsed:
    d = re.search('\w+.\d+', item[6])
    date = d.group(0)

    t = re.search('\d+.\d+\w+', item[6])
    time_12h = t.group(0)
    time_24h = time.strftime('%H:%M',time.strptime(time_12h, '%I:%M%p'))

    a = re.search('\d+.\d+', item[4])
    amount = a.group(0)

    c = re.search('[A-Z]+', item[7])
    currency = c.group(0)

   info_list.append((date,time,amount,currency))

for a,b,c,d in info_list:
    writer.writerow([a,b,c,d])

这是您在上面提供的数据的示例输出

8 月 23,09:57,83.36,ADS 8 月 23,09:57,83.36,ADS 8 月 23,10:11,83.35,ADS 8 月 23,10:11,83.35,ADS 8 月 23,10:11,83.35,ADS 8 月 23,10:11,83.35,ADS 8 月 23,10:11,83.35,ADS 8 月 23,10:11,83.35,ADS 8 月 23,10:11,83.35,ADS 8 月 23,10:11,83.35,ADS 8 月 23,10:11,83.35,ADS 8 月 23,10:11,83.35,ADS 8 月 23,10:11,83.35,ADS 8 月 23,10:11,83.35,ADS 8 月 23,10:11,83.35,ADS 8 月 23,10:11,83.35,ADS 8 月 23,10:11,83.35,ADS 8 月 23,10:11,83.35,ADS 8 月 23,10:11,83.35,ADS 8 月 23,10:11,83.35,ADS 8 月 23,10:11,83.35,ADS 8 月 23,10:11,83.35,ADS 8 月 23,10:11,83.35,ADS 8 月 23,10:11,83.35,ADS 8 月 23,10:32,83.63,ADS 8月23日10:32,83.63,ADS

于 2013-09-13T00:12:12.303 回答