[英]Write data to .json file in python
我是python的新手,正在嘗試以一定大小讀取文件夾中的所有文件,並將數據(文件路徑和大小)導出到.json
到目前為止,我有:
import os
import json
import sys
import io
testPath = str(sys.argv[1])
testSize = int(sys.argv[2])
try:
to_unicode = unicode
except NameError:
to_unicode = str
filesList = []
x = 1
j = "1"
data = {}
for path, subdirs, files in os.walk(testPath):
for name in files:
filesList.append(os.path.join(path, name))
for i in filesList:
fileSize = os.path.getsize(str(i))
if int(fileSize) >= int(testSize):
data['unit'] = 'B'
data['path' + j] = str(i)
data['size' + j] = str(fileSize)
x = x + 1
j = str(x)
with io.open('Files.json', 'w', encoding='utf8') as outfile:
str_ = json.dumps(data,
indent=4, sort_keys=True,
separators=(',', ': '), ensure_ascii=False)
outfile.write(to_unicode(str_))
問題是輸出是:
{
"path1": "C:\\Folder\\diager.xml",
"path2": "C:\\Folder\\diag.xml",
"path3": "C:\\Folder\\setup.log",
"path4": "C:\\Folder\\ESD\\log.txt",
"size1": "1908",
"size2": "4071",
"size3": "5822",
"size4": "788",
"unit": "B"
}
但這必須是這樣的:
{
"unit": "B",
"files": [{"path":"C:\Folder\file1.txt", "size": "10"}, {"path":"C:\Folder\file2.bin", "size": "400"}]
}
我添加了j變量,因為它將僅替換第一個值,並且最終得到如下所示的結果:
{
"path": "C:\\Folder\\diager.xml",
"size": "1908",
"unit": "B"
}
我不知道該如何進行...幫助?
您可以執行以下操作:
files = []
for i in filesList:
fileSize = os.path.getsize(str(i))
if int(fileSize) >= int(testSize):
files.append({'path': str(i), 'size': fileSize})
data['unit'] = 'B'
data['files'] = files
這樣,您將創建一個包含所有路徑的列表,然后將其添加到data
字典中。
使用以下方法初始化您的數據字典:
data = {"unit": "B", "files": []}
然后,您可以替換主循環:
for i in filesList:
fileSize = os.path.getsize(str(i))
if int(fileSize) >= int(testSize):
data['unit'] = 'B'
data['path' + j] = str(i)
data['size' + j] = str(fileSize)
x = x + 1
j = str(x)
通過
for i in filesList:
fileSize = os.path.getsize(str(i))
if int(fileSize) >= int(testSize):
data['files'].append({"path": str(i), "size": str(filesize)})
請注意,您不再需要x和j變量。
編輯:為了控制字段的順序,您可以看到此問題 。 特別地,根據這個漂亮答案 ,如果正在使用python 3.6,可以導入OrderedDict( from collections import OrderedDict
)和替換data = {"unit": "B", "files": []}
由data = OrderedDict(unit="B", files=[])
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.