Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Скриптовые языки программирования > Python
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 30.05.2024, 10:55   #1
Ципихович Эндрю
Старожил
 
Регистрация: 24.01.2011
Сообщений: 3,069
По умолчанию БД с помощью json

у меня файл базы слов находится в файле WordDB.json это json-файл, созданный из изначальной sqlite-базы, этот файл из 1 строки длиной 251 млн+ знаков. Как этот файл на ЯП Питон преобразовать в файл с переносами строк, чтобы работала также как сейчас?
Начало БД:
{"позвонить":[{"ID":6120,"WordForm":"позвонить"," Hash":"","HashValue":0,"IsBase":tru e,"BaseWord":null,"Descriptor":{
Окончание БД:
erson":2,"GlagolTime":4},"ID":91000 25,"Hash":"","HashValue":0}]}
моя попытка:
Код:
file = r'C:\Server\data\htdocs\data\WordDB.json'
file1 = r'C:\Server\data\htdocs\data\1WordDB.json'
with open(file, 'r') as f:
    json_str = f.read()

json_str_new = json_str.replace('},{"ID"', '},\n{"ID"')

with open(file1, 'w') as f:
    f.write(json_str_new)
print('Окончено')
теперь строк 34000 - ну по моему это НЕ то
все строки кроме первой начинаются с {"ID":
но в тоже время в строках файла не одно упоминание об "ID"
все строки разной длины, понятно, что они не могут быть одной длины, но разница по длине у строк бывает разительная
спасибо
Ципихович Эндрю вне форума Ответить с цитированием
Старый 30.05.2024, 18:10   #2
ViktorR
Старожил
 
Регистрация: 23.10.2010
Сообщений: 2,318
По умолчанию

Недавно читал одну книжку:

Юн Цуй, Рецепты Python. Коллекция лучших техник программирования. — СПб.: Питер, 2024.

В этой книге есть параграф: 9.3. КАК ПОДГОТОВИТЬ И ОБРАБОТАТЬ ДАННЫЕ JSON

В частности, рассматривается модуль json Питона и некоторые методы работы с подобными файлами.
Если ваш файл действительно в формате json, то есть надежда, что книга поможет .

Книгу, ещё недавно, можно было найти в Сети.
Как-то так, ...
ViktorR вне форума Ответить с цитированием
Старый 04.06.2024, 14:07   #3
DeepFlake
Пользователь
 
Регистрация: 16.05.2024
Сообщений: 28
По умолчанию

Попробуйте так:
подправите для своего файла.

Код:
import mmap
with open("hello.txt", "r+b") as f:
    mm = mmap.mmap(f.fileno(), 0)
    s4=mm.read()
    s5=s4.replace(b"pr",b"pr\n")
    with open('h2.txt', 'wb') as f2:
        f2.write(s5)
    mm.close()

Последний раз редактировалось DeepFlake; 04.06.2024 в 14:13.
DeepFlake вне форума Ответить с цитированием
Старый 04.06.2024, 15:11   #4
Ципихович Эндрю
Старожил
 
Регистрация: 24.01.2011
Сообщений: 3,069
По умолчанию

Цитата:
Сообщение от DeepFlake Посмотреть сообщение
mmap
это прям критично?
я впервые сталкиваюсь с таким ...
соль здесь?
Цитата:
Сообщение от DeepFlake Посмотреть сообщение
replace(b"pr",b"pr\n")
так?
Код:
file = r'C:\Server\data\htdocs\data\WordDB.json'
file1 = r'C:\Server\data\htdocs\data\1WordDB.json'
with open(file, 'r') as f:
    json_str = f.read()

json_str_new = json_str.replace(b"pr",b"pr\n")

with open(file1, 'w') as f:
    f.write(json_str_new)
print('Окончено')
Ципихович Эндрю вне форума Ответить с цитированием
Старый 04.06.2024, 16:03   #5
Ципихович Эндрю
Старожил
 
Регистрация: 24.01.2011
Сообщений: 3,069
По умолчанию

Цитата:
Сообщение от Ципихович Эндрю Посмотреть сообщение
так?
опробовал - всё также очень длинная 1 строка
Ципихович Эндрю вне форума Ответить с цитированием
Старый 04.06.2024, 16:33   #6
Ципихович Эндрю
Старожил
 
Регистрация: 24.01.2011
Сообщений: 3,069
По умолчанию

Код:
file = r'C:\Server\data\htdocs\data\WordDB.json'
file1 = r'C:\Server\data\htdocs\data\1WordDB.json'
import mmap
with open(file, "r+b") as f:
    mm = mmap.mmap(f.fileno(), 0)
    s4=mm.read()
    s5=s4.replace(b"pr",b"pr\n")
    with open(file1, 'wb') as f2:
        f2.write(s5)
    mm.close()
Цитата:
Сообщение от Ципихович Эндрю Посмотреть сообщение
опробовал - всё также очень длинная 1 строка
Ципихович Эндрю вне форума Ответить с цитированием
Старый 04.06.2024, 18:04   #7
DeepFlake
Пользователь
 
Регистрация: 16.05.2024
Сообщений: 28
По умолчанию

насколько я понял, запись в таблице бд начинается с последовательности "ID": ,
вот перед ней надо поставить переход на новую строку.
b"pr",b"pr\n" - это я только для примера сделал, а у вас должно быть:

Код:
file = r'C:\Server\data\htdocs\data\WordDB.json'
file1 = r'C:\Server\data\htdocs\data\1WordDB.json'
import mmap
with open(file, "r+b") as f:
    mm = mmap.mmap(f.fileno(), 0)
    s4=mm.read()
    s5=s4.replace(b'"ID":',b'\n"ID":')
    with open(file1, 'wb') as f2:
        f2.write(s5)
    mm.close()
если запись в таблице бд начинается с последовательности {"ID":
то
Код:
file = r'C:\Server\data\htdocs\data\WordDB.json'
file1 = r'C:\Server\data\htdocs\data\1WordDB.json'
import mmap
with open(file, "r+b") as f:
    mm = mmap.mmap(f.fileno(), 0)
    s4=mm.read()
    s5=s4.replace(b'{"ID":',b'\n{"ID":')
    with open(file1, 'wb') as f2:
        f2.write(s5)
    mm.close()
обязательно ли здесь делать преобразования через mmap - честно говоря не знаю, потому что у меня нет такого большого текстового файла для эксперимента. На маленьких файлах mmap не нужен точно. А если большие файлы - возможно будет экономия памяти с ним.

Последний раз редактировалось DeepFlake; 04.06.2024 в 18:30.
DeepFlake вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
(c#) как считать json файл в поле класса, с помощью конструктора Liz_ast Помощь студентам 4 03.11.2021 08:17
Как с помощью json сериализовать объект, в которой вложена коллекция или массив других объектов. Viktor77777 Общие вопросы по Java, Java SE, Kotlin 1 04.02.2020 00:45
есть API которая в JSON дает гору данных, я их забираю и строю графики с помощью tChart. но так как даты накладываются друг на друга и не выходит вывести значения всех Series'ов PTyTb32 Общие вопросы Delphi 0 05.06.2019 18:13
Не получаю JSON при обработке ошибок с помощью ExceptionMapper(Jersey)) alex-u Java для Web (EE, Servlet, JSP, Tomcat, Spring MVC) 0 14.12.2018 13:15
Как отпарсить ответ от сервера с помощью json? nevender Помощь студентам 0 28.04.2016 21:44