删除字典列表中的回车符和换行符 - Python



我有一个JSON文件,我正在将其读取到我的Python脚本中,展平然后将其导出为CSV。

我的问题是我注意到 JSON 文件中有各种回车符和换行符提要,所以它弄乱了 CSV 的整个结构。

更新的当前代码:

from pymongo import MongoClient
import pandas as pd
from azure.storage.filedatalake import DataLakeServiceClient
from azure.core._match_conditions import MatchConditions
from azure.storage.filedatalake._models import ContentSettings
from pandas import json_normalize
from datetime import datetime, timedelta
import numpy as np
mongo_client = MongoClient("XXXX") 
db = mongo_client.scaling
table = db.planning
document = table.find()
docs = list(document)
docs = json_normalize(docs) 
docs['pressure'] = docs['pressure'].str.strip().str.replace(" rn","")
docs.to_csv("planning.csv", sep = ",",index=False) 

我收到以下错误:

Traceback (most recent call last):
File "XXXXV2.py", line 16, in <module>
docs['pressureLevels'] = docs['pressureLevels'].str.strip().str.replace(" rn","")
File "XXXX.venvlibsite-packagespandascoregeneric.py", line 5456, in __getattr__
return object.__getattribute__(self, name)
File "XXXX.venvlibsite-packagespandascoreaccessor.py", line 180, in __get__
accessor_obj = self._accessor(obj)
File "XXXX.venvlibsite-packagespandascorestringsaccessor.py", line 154, in __init__
self._inferred_dtype = self._validate(data)
File "XXXX.venvlibsite-packagespandascorestringsaccessor.py", line 218, in _validate
raise AttributeError("Can only use .str accessor with string values!")
AttributeError: Can only use .str accessor with string values!

当字典中存在整数时,如何摆脱回车符、换行符?

任何帮助将不胜感激。

您收到错误,因为您正在尝试将 strip 与int对象一起使用。

试试这个:

for i in docs:
x = {}
for k, v in i.items():
if type(v) == str:
x[k.strip()] = v.strip().replace("rn","")
else:
x[k.strip()] = v
docs2.append(x)

尝试df.json_normalize后跟str.stripstr.replace(而不是相反)。

这将使您能够充分利用熊猫提供的矢量化str方法。这样你就可以跳过显式的 for 循环!-

docs =  [
{'isActive': 1, 'description': 'teleconference call.nn'}, 
{'isActive': 1, 'description': 'calls to review capacity.n'}, 
{'isActive': 1, 'description': 'communications rn.'}
]
df = pd.json_normalize(docs)
df['description'] = df['description'].str.strip().str.replace(" rn","")
print(df)
isActive                description
0         1       teleconference call.
1         1  calls to review capacity.
2         1            communications.

现在,您可以将其保存为csv或进一步更改。

你可以写一个小函数来做到这一点:

def try_strip(value):
try:
return value.strip().replace("rn", "")
except AttributeError:
return value
docs2 = [{k: try_strip(v) for k, v in d.items()} for d in docs]
# [
#     {'isActive': 1, 'description': 'teleconference call.'}, 
#     {'isActive': 1, 'description': 'calls to review capacity.'}, 
#     {'isActive': 1, 'description': 'communications .'}
# ]

该函数不需要使用try ... except您可以使用hasattr()isinstance进行测试。

终于找到了一个可行的解决方案来删除字典列表中的回车符和换行符。

首先,您使用json.dumps,它将字典作为输入并返回字符串作为输出,以使您能够使用.replace,因为它仅适用于字符串。

从字符串中删除换行符和回车符后,现在可以使用json.loads将字符串转换回字典,该字典将字符串作为输入并返回字典作为输出。

docs2 = json.dumps(docs)
docs2 = doc2.replace(r"n",'').replace(r"rn",'').replace(r"r",'')
docs2 = json.loads(docs2)
docs2 = json_normalize(docs2)
print(docs2)

相关内容

  • 没有找到相关文章