экспортировать данные в формат файла xls - PullRequest
0 голосов
/ 31 января 2020

У меня есть текстовый файл с данными 6000 записей в этом формате

{"id":"1001","user":"AB1001","first_name":"David  ","name":"Shai","amount":"100","email":"me@no.mail","phone":"9999444"}

{"id":"1002","user":"AB1002","first_name":"jone  ","name":"Miraai","amount":"500","email":"some1@no.mail","phone":"98894004"}

Я хочу экспортировать все данные в файл Excel, как показано ниже:

enter image description here

Ответы [ 3 ]

1 голос
/ 31 января 2020

Я бы рекомендовал прочитать текстовый файл, затем преобразовать его в словарь с json и использовать pandas для сохранения файла .csv, который можно открыть с помощью Excel.

В приведенном ниже примере Я скопировал ваш текст в текстовый файл с именем «myfile.txt» и сохранил данные как «myfile2.csv».

import pandas as pd
import json 

# read lines of text file
with open('myfile.txt') as f:
    lines=f.readlines()

# remove empty lines
lines2 = [line for line in lines if not(line == "\n")]

# convert to dictionaries
dicts = [json.loads(line) for line in lines2]  

# save to .csv
pd.DataFrame(dicts ).to_csv("myfile2.csv", index = False)
1 голос
/ 03 февраля 2020

Вы можете использовать VBA и json -парсер

Ваши две строки недопустимы JSON. Однако его легко преобразовать в действительный JSON, как показано в коде ниже. Тогда сравнительно просто разобрать его и записать на лист.

Код не содержит пустых строк в вашем текстовом файле, но его легко исправить, если это не так.

Использование ваших данных в двух отдельных строках в текстовом файле windows (если не windows, возможно, вам придется изменить замену токена новой строки запятой в зависимости от того, что генерирующая система использует для новой строки.

Я использовал конвертер JSON Тима Холла

'Set reference to Microsoft Scripting Runtime or
'    use late binding
Option Explicit
Sub parseData()
    Dim JSON As Object
    Dim strJSON As String
    Dim FSO As FileSystemObject, TS As TextStream
    Dim I As Long, J As Long

    Dim vRes As Variant, v As Variant, O As Object
    Dim wsRes As Worksheet, rRes As Range

Set FSO = New FileSystemObject
Set TS = FSO.OpenTextFile("D:\Users\Ron\Desktop\New Text Document.txt", ForReading, False, TristateUseDefault)

'Convert to valid JSON
strJSON = "[" & TS.ReadAll & "]"
strJSON = Replace(strJSON, vbLf, ",")

Set JSON = parsejson(strJSON)

ReDim vRes(0 To JSON.Count, 1 To JSON(1).Count)

'Header row
J = 0
For Each v In JSON(1).Keys
    J = J + 1
    vRes(0, J) = v
Next v

'populate the data
I = 0
For Each O In JSON
    I = I + 1
    J = 0
    For Each v In O.Keys
        J = J + 1
        vRes(I, J) = O(v)
    Next v
Next O

'write to a worksheet
Set wsRes = Worksheets("sheet6")
Set rRes = wsRes.Cells(1, 1)

Set rRes = rRes.Resize(UBound(vRes, 1) + 1, UBound(vRes, 2))

Application.ScreenUpdating = False
With rRes
    .EntireColumn.Clear
    .Value = vRes
    .Style = "Output"
    .EntireColumn.AutoFit
End With

End Sub

Результаты ваших опубликованных данных

enter image description here

0 голосов
/ 31 января 2020

Попробуйте использовать модуль pandas в сочетании с функцией eval():

import pandas as pd
with open('textfile.txt', 'r') as f:
    data = f.readlines()

df = pd.DataFrame(data=[eval(i) for i in data])
df.to_excel('filename.xlsx', index=False)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...