Я пытаюсь извлечь данные из файла .ldb. Расширение OneTab для Chrome дало мне сбой, и я пытаюсь восстановить сохраненные им ссылки. Я считаю, что нашел решение из старого сообщения в блоге, но я недостаточно знаю о кодировании, чтобы понять, как следовать.
Вот ссылка на сообщение в блоге: https://antimatter15.com/2015/12/recovering-deleted-data-from-leveldb/
Я считаю, что сделал все правильно, чтобы создать приложение Go, как он предлагает. Он создал файл с именем «ldbdump» без расширения. Следующий шаг, где у меня есть проблемы. Я попытался запустить его код Python в Jupyter Notebook (это единственное программное обеспечение, с которым у меня есть опыт работы с Python, и в этом ограниченный опыт), но получил только ошибки.
Исходный код, с которым я работаю, можно найти по приведенной выше ссылке под заголовком «Восстановление». Я изменил определение «база» с «копия тестового материала», чтобы указать на папку с файлами .ldb, которые я пытаюсь прочитать, а также с файлом «ldbdump». Я также изменил синтаксис команды печати внизу после получения ошибок. Все остальное осталось в покое.
base = "D:\\Downloads\\ldb archive"
import os
from subprocess import Popen, PIPE
import json
import ast
for f in os.listdir(base):
if f.endswith(".ldb"):
process = Popen(["ldbdump", os.path.join(base, f)], stdout=PIPE)
(output, err) = process.communicate()
exit_code = process.wait()
for line in (output.split("\n")[1:]):
if line.strip() == "": continue
parsed = ast.literal_eval("{" + line + "}")
key = parsed.keys()[0]
print(json.dumps({ "key": key.encode('string-escape'), "value": parsed[key] }))
Если я правильно понимаю сообщение в блоге, это должно распечатать содержимое файла .ldb после преобразования его содержимого в файл JSON (хотя я не уверен, где будет сохранен этот файл JSON). После этого я могу перейти к следующему шагу, который очистит результаты, чтобы они были более читаемыми. Вместо этого я получаю сообщение об ошибке. Я не могу сказать, что я делаю неправильно, так как я едва знаю, что я делаю в первую очередь. Все, что я действительно понимаю, это «файл не найден» вверху. Это выглядит так:
FileNotFoundError Traceback (most recent call last)
<ipython-input-2-26ff29e32d63> in <module>
1 for f in os.listdir(base):
2 if f.endswith(".ldb"):
----> 3 process = Popen(["ldbdump", os.path.join(base, f)], stdout=PIPE)
4 (output, err) = process.communicate()
5 exit_code = process.wait()
~\Anaconda3\lib\subprocess.py in __init__(self, args, bufsize, executable, stdin, stdout, stderr, preexec_fn, close_fds, shell, cwd, env, universal_newlines, startupinfo, creationflags, restore_signals, start_new_session, pass_fds, encoding, errors, text)
767 c2pread, c2pwrite,
768 errread, errwrite,
--> 769 restore_signals, start_new_session)
770 except:
771 # Cleanup if the child failed starting.
~\Anaconda3\lib\subprocess.py in _execute_child(self, args, executable, preexec_fn, close_fds, pass_fds, cwd, env, startupinfo, creationflags, shell, p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite, unused_restore_signals, unused_start_new_session)
1170 env,
1171 os.fspath(cwd) if cwd is not None else None,
-> 1172 startupinfo)
1173 finally:
1174 # Child is launched. Close the parent's copy of those pipe
FileNotFoundError: [WinError 2] The system cannot find the file specified
Как я уже сказал, я не уверен, что я делаю неправильно. Мои лучшие предположения заключаются в том, что я либо неправильно изменяю код сообщения в блоге, чтобы указать его на файлы на моем ПК, либо что исходный код неправильно предполагает что-то о моей машине (это означает, что у меня неправильная ОС, я не должен запускать это в блокноте, мне не хватает некоторых зависимостей и т. д.)
Для справки, я использую настольный ПК под управлением Windows 10, я пытаюсь запустить этот код с Jupyter Notebook 5.7.4, у меня нет других импортированных пакетов, кроме тех, которые перечислены в разделе кода выше, и я едва знаю, что я делаю. Мне жаль. Пожалуйста помоги.