У меня есть папка Userss с ~ 100 отдельными файлами JSON. Каждый файл JSON содержит данные о пользователе в формате:
{"cX": 298, "cY": 492, "time": 1420209750422, "y": 492, "x": 298, "type": "mousemove", "name": "Anthony Coleman"}
{"cX": 653, "cY": 57, "time": 1420209753241, "y": 57, "x": 653, "type": "mousemove", "name": "Anthony Coleman"}
{"cX": 646, "cY": 53, "time": 1420209753244, "y": 53, "x": 646, "type": "mousemove", "name": "Anthony Coleman"}
{"cX": 640, "cY": 50, "time": 1420209753250, "y": 50, "x": 640, "type": "mousemove", "name": "Anthony Coleman"}
(все имена выдуманы)
Большинство файлов довольно большие, поэтому делать это вручную не вариант.
Я пытаюсь изменить содержимое этих отдельных файлов и записать эти обратные данные в новый «обратный файл», чтобы приведенный выше фрагмент JSON выглядел как
{"cX": 640, "cY": 50, "time": 1420209753250, "y": 50, "x": 640, "type": "mousemove", "name": "Anthony Coleman"}
{"cX": 646, "cY": 53, "time": 1420209753244, "y": 53, "x": 646, "type": "mousemove", "name": "Anthony Coleman"}
{"cX": 653, "cY": 57, "time": 1420209753241, "y": 57, "x": 653, "type": "mousemove", "name": "Anthony Coleman"}
{"cX": 298, "cY": 492, "time": 1420209750422, "y": 492, "x": 298, "type": "mousemove", "name": "Anthony Coleman"}
в новом файле, по сути, сортируя их в обратном порядке по отметке времени Unix.
Файл Userss имеет формат
имя-второе имя1.json
имя-отчество2.json
имя-отчество3.json
...
FYP — это папка, в которой сохраняется запускаемый скрипт (test.py), а Userss — это папка, в которой сохраняются пользовательские данные. Userss — это подпапка FYP.
Мой подход заключается в использовании os.walk()
в каталоге Userss и выполнении реверсивного сценария, который я придумал для каждого файла. Моя проблема на самом деле заключается в переборе каталога и чтении файлов, в первую очередь.
Следующий код - это то, что у меня есть:
test.py
import os
from operator import itemgetter, attrgetter, methodcaller
import json
rootdir = './Userss'
fileHandles = {}
count = 0
totalfilelines = 0
filenum = 0
lastName=None
handle=None
for files in os.walk(rootdir):
#print files
#print "---------"
#print len(files)
#for file in files:
filenum += 1
with open(files) as infile:
#for line in sortedpython(infile, key=itemgetter(2), reverse=True):
for line in infile:
'''
reversing script here
'''
Закомментированные строки — это то, где я только что попробовал несколько разных вещей, я решил оставить их, чтобы дать представление о моем подходе.
Выполнение этого дает мне следующую ошибку:
Трассировка (последний последний вызов): файл «test.py», строка 37, с открытым (файлы) в качестве входного файла: TypeError: принуждение к Unicode: нужна строка или буфер, кортеж найден
Насколько я понимаю, что я пытаюсь сделать, os.walk()
должен проходить через каталог Userss, и когда он «обходит» каждый пользовательский файл, я пытаюсь передать каждый из этих файлов методу with open()
, чтобы открыть его, чтобы я может немного поработать над ним.
Где я ошибаюсь?