-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathpsiturkParser.py
More file actions
63 lines (51 loc) · 1.91 KB
/
Copy pathpsiturkParser.py
File metadata and controls
63 lines (51 loc) · 1.91 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
#! /usr/bin/env python
import os, sys, argparse
import csv, json
class Parser:
def __init__(self, filename=None, newfile=None, overwrite=False):
if filename is None:
self.filename = 'trialdata.csv'
else:
self.filename = filename
if newfile is None:
newfile = 'fixedtrialdata.csv'
if not overwrite:
i = 1
while os.path.isfile(newfile):
newfile = 'fixedtrialdata(%i).csv' % i
i += 1
self.newfile = newfile
else:
self.newfile = newfile
self.fieldnames = []
self.data = []
def _append_fieldnames(self, keys):
for new_key in set(keys).difference(self.fieldnames):
self.fieldnames.append(new_key)
def _get_data(self):
with open(self.filename, 'r') as f:
reader = csv.reader(f, delimiter=',')
for row in reader:
trial = json.loads(row[3])
trial['UID'], trial['trial_number'], trial['datetime'] = row[:3]
self._append_fieldnames(trial.keys())
self.data.append(trial)
def _write_data(self):
with open(self.newfile, 'w') as f:
writer = csv.DictWriter(f, self.fieldnames)
writer.writeheader()
writer.writerows(self.data)
def run(self):
self._get_data()
self._write_data()
if __name__ == '__main__':
ap = argparse.ArgumentParser()
ap.add_argument('-f', '--filename',
help='The filepath or filename of the file you want to parse')
ap.add_argument('-n', '--newfile',
help='The filepath or filename of the file you want to create')
ap.add_argument('-o', '--overwrite',
help='Files will be overwritten', action='store_true')
args = ap.parse_args()
p = Parser(**vars(args))
p.run()