从文件夹中读取文件,提取文件中指定的密钥并另存为CSV文件



我是Python新手,我正在执行的任务是从特定目录下的.iris(其中包含嵌套字典格式的列表)文件列表中提取特定键值。

我想提取特定的值并将其保存为一个新的.csv文件,并对所有其他文件重复此操作。

下面是我的.iris文件样本,我应该从中提取这些键('uid','enabled','login','name')

{"streamType":"user",
"uid":17182,
"enabled":true,
"login":"xyz",
"name":"abcdef",
"comment":"",
"authSms":"",
"email":"",
"phone":"",
"location":"",
"extraLdapOu":"",
"mand":997,
"global":{
"userAccount":"View",
"uid":"",
"retention":"No",
"enabled":"",
"messages":"Change"},
"grants":[{"mand":997,"role":1051,"passOnToSubMand":true}],

我正试图将.iris文件转换为.json并逐个读取文件,但不幸的是,我没有得到所需的确切输出。

请问,有人能帮我吗?

我的代码(添加注释):

import os
import csv
path = ''
os.chdir(path) 
# Read iris File 
def read_iris_file(file_path): 
with open(file_path, 'r') as f: 
print(f.read())

# iterate through all files
for file in os.listdir():
# Check whether file is in iris format or not
if file.endswith(".iris"):
file_path = f"{path}{file}"
# call read iris file function
print(read_iris_file(file_path))   

您的文件包含JSON格式的数据,因此我们可以使用内置的json模块来解析它。迭代扩展特定的文件您可以使用pathlib.glob()"*.iris"与下一个模式。然后我们可以使用csv.DictWriter()并将"ignore"传递给extrasaction参数,这将使DictWriter忽略我们不需要的键,只写我们传递给fieldnames参数的键。

代码:

import csv
import json
from pathlib import Path
path = Path(r"path/to/folder")
keys = "uid", "enabled", "login", "name"
with open(path / "result.csv", "w", newline="") as out_f:
writer = csv.DictWriter(out_f, fieldnames=keys, extrasaction='ignore')
writer.writeheader()
for file in path.glob("*.iris"):
with open(file) as inp_f:
data = json.load(inp_f)
writer.writerow(data)

尝试以下操作(这里的关键是使用ast加载虹膜文件)

import ast
fields = ('uid','enabled','login','name')
with open('my.iris') as f1:
data = ast.literal_eval(f1.read())
with open('my.csv','w') as f2:
f2.write(','.join(fields) + 'n')
f2.write(','.join(data[f] for f in fields) + 'n')

my.csv

uid,enabled,login,name
17182,true,xyz,abcdef

相关内容

  • 没有找到相关文章

最新更新