2

我需要解析一个键值逗号分隔的文件。请查看附件中的示例日志文件格式。

event_1,log_time:2013-11-05T08:33:37:293+00,user_id:2535285332077170,profile_id:8,nickname:2535285332077170,rank_id:7,shop_tr_status:OK,
event_2,log_time:2013-11-05T08:33:37:344+00,rule_id:18372990742769963554,user_id:2535285332077170,profile_id:8,
event_3,log_time:2013-11-05T08:33:37:401+00,user_id:2535285332077170,profile_id:8,nickname:2535285332077170

我的要求是如果是事件 1,那么我需要 log_time 和昵称

如果是 event_2 那么我需要 userid 和 profileid

如果是 event_3 那么我需要用户 ID 和昵称

谁能建议进行此操作的最佳方法是什么

4

3 回答 3

3

忘记 csv.reader。您应该将tablib与动态列一起使用:

ds = tablib.Dataset()
ds.csv = open(csvfile).read()

然后你可以添加列:

def event_data(row):
    if row[0] == 'event_1':
        return [row[1], row[4]]
    # .. and so forth

ds.append_col(event_data, header='Event data')

根据第一列,获取该列应该会为您提供所需的数据。

于 2013-11-06T15:48:49.020 回答
0

使用for row incsv.reader(),然后在 for 循环中放置一个 if 和一些 elif。

于 2013-11-06T15:26:31.907 回答
0

如果您有标题并想提取特定的列数据,请尝试

import csv
with open('csv_file.csv', 'rU') as csv_file:
        csvreader = csv.DictReader(csv_file)
        for row in csvreader:
            print("Rows: " + str(row))
            if row['header1'] == '1':
                print('Data: ' + row['header2'])

CSV 文件内容:

header1,header2,header3
1,2,3
4,5,6

输出:

Rows: {'header2': '2', 'header3': '3', 'header1': '1'}
Data: 2
Rows: {'header2': '5', 'header3': '6', 'header1': '4'}

如果您有大量数据,添加标题可以让您的生活更轻松,或者您将不得不使用 csv.reader() 并根据需要解析内容并拆分。

于 2013-11-06T15:31:34.877 回答