使用Python将JSON转换为CSV,如何删除某些文本/字符(如果找到),以及如何更好地格式化单元格?

gojuced7  于 2022-12-20  发布在  Python
关注(0)|答案(1)|浏览(113)

如果我没有提供足够的信息,使用了错误的术语或我没有正确地格式化我的问题,我提前道歉。这是我第一次在这里提问。
这是python脚本的脚本:https://pastebin.com/WWViemwf
这是JSON文件的脚本(包含前4个元素氢、氦、锂、铍):https://pastebin.com/fyiijpBG
如图所示,我正在将文件从“.json”转换为“.csv”。
JSON文件有时包含“不适用”或“未知”的字段,或者它会显示我不熟悉的奇怪文本。
例如:

"LiquidDensity": {
            "data": "NotAvailable",
            "tex_description": "\\text{liquid density}"
        },

还有这里

"MagneticMoment": {
                    "data": "Unknown",
                    "tex_description": "\\text{magnetic dipole moment}"
                },

下面是我把.json文件转换成.csv文件的代码:

#liquid density
        liquid_density = element_data["LiquidDensity"]["data"]
        if isinstance(liquid_density, dict):
            liquid_density_value = liquid_density["value"]
            liquid_density_unit = liquid_density["tex_unit"]
        else:
            liquid_density_value = liquid_density
            liquid_density_unit = ""

然而,在csv文件中,它显示为this
我还试图删除这些characters,我看到在“.csv”文件。
在JSON文件中,数据的查看方式如下:

"AtomicMass": {
            "data": {
                "value": "4.002602",
                "tex_unit": "\\text{u}"
            },
            "tex_description": "\\text{atomic mass}"
        },

这是我如何用Python编写转换代码的:

#atomic mass
        atomic_mass = element_data["AtomicMass"]["data"]
        if isinstance(atomic_mass, dict):
            atomic_mass_value = atomic_mass["value"]
            atomic_mass_unit = atomic_mass["tex_unit"]
        else:
            atomic_mass_value = atomic_mass
            atomic_mass_unit = ""

我做错了什么?
我已尝试替换:

#melting point
        melting_point = element_data["MeltingPoint"]["data"]
        if isinstance(melting_point, dict):
            melting_point_value = melting_point["value"]
            melting_point_unit = melting_point["tex_unit"]
        else:
            melting_point_value = melting_point
            melting_point_value = ""

其中:

#melting point
        melting_point = element_data["MeltingPoint"]["data"]
        if isinstance(melting_point, dict):
            melting_point_value = melting_point["value"]
            melting_point_unit = melting_point["tex_unit"]
        elif melting_point == "NotApplicable" or melting_point == "Unknown":
            melting_point_value = ""
            melting_point_unit = ""
        else:
            melting_point_value = melting_point
            melting_point_unit = ""

然而,这似乎不起作用。

ui7jx7zq

ui7jx7zq1#

你的代码是好的,什么地方出了问题是在写作,让我拿出一些部分。

#I will only be using Liquid Density as example, so I won't be showing the others
headers = [..., "Liquid Density", ...]

#liquid_density data reading part
liquid_density = element_data["LiquidDensity"]["data"]
if isinstance(liquid_density, dict):
      liquid_density_value = liquid_density["value"]
      liquid_density_unit = liquid_density["tex_unit"]
else:
      liquid_density_value = liquid_density
      liquid_density_unit = ""

#your writing of the data into the csv
 writer.writerow([..., liquid_density, ...])

您直接将liquid_density写入csv,这就是为什么它显示字典。如果您只想写入值,我认为您应该将write line中的值更改为writer.writerow([..., liquid_density_value, ...])

相关问题