我想编辑以下csv文件。这是我获得输入的格式,它实际上来自Google财经API的数据,该数据为特定股票提供股票报价,在这种情况下是其Adidas。 我的服务日夜抓取此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 AM和10:32 AM。有时候时间不完全适合(在给出新课程之前缺少一分钟)但这并不重要。 此外,我希望时间格式为24小时,以便将AM和PM转换为24小时 式
第二部分日期: 我希望它以上述格式提供数据,因此它增加了2013(就像在这种情况下硬编码)并且它将月份“Aug”转换为08.我今年有几个月。
第三和第四部分: 只需获取给定格式的数据
数据为24小时,因此一天包含1440行。 我也只想要从08:00到20:00的数据。
应删除所有其他数据,以便获得所需的格式。
对于任何想法,我都会非常高兴。
答案 0 :(得分: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:573.36,ADS 8月23,09:573.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