Программа Python для создания словаря имен файлов, расширений, путей, времени создания и размеров и вывода их в файл json

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
     }
}

Что выдает ваш текущий код и что в нем не так? Также объясните, что вы хотите создать в тексте в своем вопросе, а не в виде ссылки.

DisappointedByUnaccountableMod 26.12.2020 11:41

Пожалуйста не публикуйте изображения кода или сообщения об ошибках. Что вы сделали, чтобы отладить это?

tripleee 26.12.2020 11:41

Вы сохраняете список в свой ключ 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 26.12.2020 11:42

спасибо @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', продолжение следует.... }}

Ionut Marius 26.12.2020 12:24

@tripleee изображение автоматически размещается на другом веб-сайте под названием imgur. Он не размещается на серверах stackoverflow. Почему это даже вариант изображения в процессе добавления сообщения с вопросом ?!

Ionut Marius 26.12.2020 13:05

Некоторые вещи должны быть изображениями, но изображения текста бесполезны, если, например, читатель хочет скопировать/вставить текст. Прочтите stackoverflow.com/help/how-to-ask, где также говорится: «НЕ публикуйте изображения кода, данных, сообщений об ошибках и т. д.».

DisappointedByUnaccountableMod 26.12.2020 13:47

отредактировано с помощью информации, которую дал мне @validname, удалило это изображение текста и добавило желаемый результат. Предоставленный код в основном печатает последний файл из указанного пути к папке с необходимыми аргументами.

Ionut Marius 26.12.2020 13:58

Я не сварливый, я надеюсь помочь вам помочь нам помочь вам. Ссылка, которую я предоставил, объясняет ряд проблем с публикацией текста в виде изображений; Прежде всего, вероятно, вы требуете, чтобы посетители нажимали на изображение, чтобы увидеть, что вы спрашиваете, что многие потенциальные ответчики не захотят делать, особенно когда они могут предвидеть необходимость повторного ввода того, что находится на изображении, если они хотят это найти в Google. или попробуйте запустить код.

tripleee 26.12.2020 13:59

Код, указанный в сообщении с вопросом, дает мне в качестве вывода в файлах.JSON только последний файл с указанной информацией о нем. Я хочу, чтобы все файлы, находящиеся в указанной папке, были перечислены в файле JSON. Пока это только последний файл в списке, и я не знаю, в чем проблема.

Ionut Marius 26.12.2020 14:09

Почему вы используете контекстный менеджер (оператор with) вокруг os.scandir()? Это определенно странно, и я совсем не удивлюсь, если это не сделает что-то другое, чем вы хотите и ожидаете. Опять же, что вы сделали, чтобы отладить это?

tripleee 26.12.2020 15:08
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
2
10
219
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Решено с помощью:

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)

Другие вопросы по теме