import os, json, time
path = "C:\\Users\\Marius\\Desktop\\homework" #se defineste adresa
with os.scandir(path) as listOfEntries:
for item in listOfEntries:
data = {}
if item.is_file():
filename_ext=os.path.splitext(item)
size=(os.path.getsize(item))
creation=(time.ctime(os.path.getctime(item)))
extension=(os.path.splitext(os.path.basename(item))[1])
if filename_ext not in data:
data[item.path] = {'name': item.name, 'path': path, 'extension': extension, 'creation': creation, 'size': size}
print(data)
j_data = json.dumps(data, indent=4)
with open('files.json', 'w') as f:
json.dump(data, f, indent=4)
Я не могу разобраться. Любая помощь будет оценена по достоинству.
Я попытался создать файл python для получения необходимых результатов, но мне нужно, чтобы они были в виде выходного файла JSON.
Я хочу, чтобы результаты выводились в файл files.JSON, что-то вроде следующего результата, но со всеми файлами из этой конкретной папки:
{
"C:\\Users\\Marius\\Desktop\\homework\\test.py": {
"name": "test.py",
"path": "C:\\Users\\Marius\\Desktop\\homework",
"extension": ".py",
"creation": "Sat Dec 26 08:39:59 2020",
"size": 733
}
}
Пожалуйста не публикуйте изображения кода или сообщения об ошибках. Что вы сделали, чтобы отладить это?
Вы сохраняете список в свой ключ data[item.path]
, вместо этого вы должны сохранить dict. Замените data[item.path] = [item.name,extension,path,size]
на data[item.path] = {'name': item.name, 'extension': extension, 'path': path, 'size': size}
.
спасибо @validname за предложение, которое после запуска дает следующие результаты, но с некоторыми нежелательными пустыми скобками, такими как {}, а также вывод не печатается в файл JSON {'C:\\Program Files\\Bitdefender\\Bitdefender Security\\crlset.txt': {'name': 'crlset.txt', продолжение следует.....}} {} {'C:\\Program Files\\Bitdefender\\Bitdefender Security\\cryptprotectal. dll': {'имя': 'cryptprotectal.dll', продолжение следует.....} {} {} {'C:\\Program Files\\Bitdefender\\Bitdefender Security\\d3dcompiler_47.dll': { 'имя': 'd3dcompiler_47.dll', продолжение следует.... }}
@tripleee изображение автоматически размещается на другом веб-сайте под названием imgur. Он не размещается на серверах stackoverflow. Почему это даже вариант изображения в процессе добавления сообщения с вопросом ?!
Некоторые вещи должны быть изображениями, но изображения текста бесполезны, если, например, читатель хочет скопировать/вставить текст. Прочтите stackoverflow.com/help/how-to-ask, где также говорится: «НЕ публикуйте изображения кода, данных, сообщений об ошибках и т. д.».
отредактировано с помощью информации, которую дал мне @validname, удалило это изображение текста и добавило желаемый результат. Предоставленный код в основном печатает последний файл из указанного пути к папке с необходимыми аргументами.
Я не сварливый, я надеюсь помочь вам помочь нам помочь вам. Ссылка, которую я предоставил, объясняет ряд проблем с публикацией текста в виде изображений; Прежде всего, вероятно, вы требуете, чтобы посетители нажимали на изображение, чтобы увидеть, что вы спрашиваете, что многие потенциальные ответчики не захотят делать, особенно когда они могут предвидеть необходимость повторного ввода того, что находится на изображении, если они хотят это найти в Google. или попробуйте запустить код.
Код, указанный в сообщении с вопросом, дает мне в качестве вывода в файлах.JSON только последний файл с указанной информацией о нем. Я хочу, чтобы все файлы, находящиеся в указанной папке, были перечислены в файле JSON. Пока это только последний файл в списке, и я не знаю, в чем проблема.
Почему вы используете контекстный менеджер (оператор with
) вокруг os.scandir()
? Это определенно странно, и я совсем не удивлюсь, если это не сделает что-то другое, чем вы хотите и ожидаете. Опять же, что вы сделали, чтобы отладить это?
Решено с помощью:
import os, json, time
path = "C:\\Users\\Marius\\Desktop\\homework"
data = {}
with os.scandir(path) as listOfEntries:
for item in listOfEntries:
filename_ext=os.path.splitext(item)
size=(os.path.getsize(item))
creation=(time.ctime(os.path.getctime(item)))
extension=(os.path.splitext(os.path.basename(item))[1])
if item.is_file():
if filename_ext not in data:
data[item.path] = {'name': item.name, 'path': path, 'extension': extension, 'creation': creation, 'size': size}
print(data)
j_data = json.dumps(data, indent=4)
with open('files.json', 'w') as f:
json.dump(data, f, indent=4)
Что выдает ваш текущий код и что в нем не так? Также объясните, что вы хотите создать в тексте в своем вопросе, а не в виде ссылки.