在Python中删除并添加大型csv文件中的数据

时间:2013-09-12 23:17:32

标签: python csv

我想编辑以下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的数据。

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

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

1 个答案:

答案 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