Преобразование TXT / CSV в JSON в Python 3 - PullRequest
1 голос
/ 03 августа 2020

Мне нужна помощь в преобразовании всех строк из простого файла .txt в JSON. Я пытаюсь преобразовать .txt в .csv, а затем .csv в JSON с помощью библиотеки pandas. Однако я не могу захватить все строки из исходного файла .txt на выходе JSON.

Вот файл (data.txt), перечисленный по строкам:

Images
Median of 100 points per image
Dataset
76 out of 77 images calibrated (98%), all images enabled
Camera Optimization
0.60% difference in initial and optimized camera parameters
Matches
Median of 1000 matches per image
Georeferencing
Yes, 3D GCP

Вот код, который я пытаюсь использовать для преобразования .txt в .csv:

import csv

with open('C:\\Users\\mdl518\\Desktop\\image_metadata.txt', 'r') as in_file:
    stripped = (line.strip() for line in in_file)
    lines = (line.split(",") for line in stripped if line)
    with open('C:\\Users\\mdl518\\Desktop\\image_metadata.csv', 'w') as out_file:
        writer = csv.writer(out_file)
        writer.writerows(lines) 

Я должен отметить, что строки, в которых текст разделен запятой (,), перечислены в двух отдельных ячейках внутри .csv, но когда я пытаюсь записать CSV в JSON, эти определенные c строки опускаются из файла JSON. Вот код, который я использую для попытки преобразования из .csv в JSON.

import pandas as pd

df=pd.read_csv("C:\\Users\\mdl518\\Desktop\\image_metadata.csv", header=None, error_bad_lines=False, encoding='utf-8')
df.to_json("C:\\Users\\mdl518\\Desktop\\image_metadata.json", orient="table")

Для вывода JSON меня не слишком беспокоят имена индексов (даже n0, n1, et c .. допустимы теги) - Мне просто нужно иметь возможность захватывать строки .txt / .csv с запятыми, разделяющими текст в выводе JSON, любая помощь приветствуется!

1 Ответ

0 голосов
/ 23 августа 2020

Я написал сценарий, адаптированный к вашей структуре входного файла, сохраняю содержимое в словаре и записываю словарь в файл JSON:

with open('untitled.txt') as file_handle:
    file_content = file_handle.read()

my_dict = {}
for line in file_content.split('\n'):
    if line.startswith('Median') and ("points per image" in line):
        print('median points per image:',line.split(' ')[2])
        my_dict['median points per image:'] = line.split(' ')[2]
    elif "images calibrated" in line:
        print('lower:',line.split(' ')[0]) 
        my_dict['lower:'] = line.split(' ')[0]
        print('total:',line.split(' ')[3])
        my_dict['total:'] = line.split(' ')[3]
        print('percentage:',line.split(' ')[6].replace('(','').replace('%)',''))
        my_dict['percentage:'] = line.split(' ')[6].replace('(','').replace('%)','')
    elif "difference in" in line:
        print('difference:',line.split(' ')[0])
        my_dict['difference:'] = line.split(' ')[0]
    elif line.startswith("Median") and "matches per image" in line:
        print('median matches per image:',line.split(' ')[2])
        my_dict['median matches per image:'] = line.split(' ')[2]
        
import json
with open("sample.json", "w") as outfile:  
    json.dump(my_dict, outfile) 

Я оставил операторы печати, чтобы вы может видеть, что загружается в словарь по мере его создания.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...