代替在json文件中使用u,并使用python将其写入表

代替在json文件中使用u,并使用python将其写入表,python,json,database,Python,Json,Database,如何更换。在我的json文件中使用u,并将结果json文件推送到DB表中 尝试了以下代码,但不起作用: import pandas as pd import json import sys import os import psycopg2 import glob import traceback import csv user= sys.argv[2] password = sys.argv[3] host = sys.argv[4] port = sys.argv[5] db = sys.

如何更换。在我的json文件中使用u,并将结果json文件推送到DB表中

尝试了以下代码,但不起作用:

import pandas as pd
import json
import sys
import os
import psycopg2
import glob
import traceback
import csv

user= sys.argv[2]
password = sys.argv[3]
host = sys.argv[4]
port = sys.argv[5]
db = sys.argv[6]
documenttype = sys.argv[7]
schema_name =  sys.argv[8]

from sqlalchemy import create_engine

engine = create_engine('postgresql+psycopg2://'+user+':'+password+'@'+host+':'+port+'/'+db)
print("Database is connected")

data = sys.argv[1]
output_path = sys.argv[9]
for fileName in os.listdir(data):
    file = open(data+fileName, "r",encoding='utf-8')
    contents = file.read()
    if '.' in contents:        
        with open(output_path+fileName,'w',encoding='utf-8') as output:
            rmSplc=contents.replace('.','_')
            output.write(rmSplc)
            print(". replaced with _ in file")


df = pd.read_json(rmSplc)

df['RecordsNew'] = df['Records'].astype('|S80')

df_1 = pd.json_normalize(df['Records'])
df_1.columns = map(str.lower, df_1.columns)
table_name =documenttype.lower()

             
df_1.to_sql(table_name,schema=schema_name,con=engine, if_exists = 'append',index=False)
但下面是一个错误:

Database is connected
Traceback (most recent call last):
  File "/xdata/dev/ariba/python/JSON_PYTHON_RESPONSE.py", line 36, in <module>
    for fileName in os.listdir(data):
OSError: [Errno 36] File name too long: '{"Records":[{"ExceptionType":{"ExceptionTypeId":"UnderTaxVariance-SAP"},"InvoiceLineNumber":2,"ExceptionStatus":"Unreconciled","InvoiceSubmissionMethod":"PaperInvoice","AccountingDate":{"Day":"2020-02-19T00:00:00Z"},"OrderID":null,"InvoiceId":"IRC2347-R337-154","InvoiceWithExceptionCount":1,"Requester":{"SourceSystem":"SSP-sap-CHILD1","UserId":"","PasswordAdapter":""},"Supplier":{"SourceSystem":"SSP-sap-CHILD1","SupplierId":"sid111","SupplierLocationId":"sid111_loc1"},"InvoiceNumber":"C2347-R337","InvoiceDate":{"Day":"2020-02-20T00:00:00Z"},"IRStatus":"Reconciling","POId":null,"ReconciledBy":{"SourceSystem":"SSP-sap-CHILD1","UserId":"","PasswordAdapter":""},"LoadUpdateTime":"2020-02-19T19:27:38Z","ProcurementUnit":{"SourceSystem":"","UniqueName":""},"LoadCreateTime":"2020-02-19T19:27:38Z","InvoiceSourceDocument":"NoOrderInformation","POLineNumber":null,"SourceSystem":{"SourceSystemId":"SSP-sap-CHILD1"}}],"PageToken":"TlhXQ0FXVDJHMUV3Qg"}'
InvoiceExceptionsFactis created
ProjectFactSystemView
ProjectFact
如果删除要替换的代码段。它工作得很好。 正在读取数据,创建表,并将数据推送到表中。 但是我想换一个。到u,然后将其写入表。
解决此问题的建议将非常有用。

如果替换是代码中唯一的问题,请尝试以下方法:

# -*- coding: utf-8 -*-
import os
input_path='E:/CD034591Q_001log5.json'
output_path='E:/CD034591Q_001log5.json' 

file = open(input_path, "r",encoding='utf-8')
contents = file.read()
if '' in contents:        
    with open(output_path,'w',encoding='utf-8') as output:
        rmSplc=contents.replace('','')
        output.write(rmSplc)

但问题到底是什么?您是否可以添加json内容示例。json内容示例:
{“Records”:[{“CommodityId”:“3470”,“SourceSystem”:“SSP-generic-CHILD4”,“CommodityName”:“地脚螺栓-物料清单”,“CommodityType”:“},{“CommodityId”:“默认”,“SourceSystem”:“SSP-sap-BH100”,“CommodityName”:“默认ERP商品代码”,“CommodityType”:“},{“CommodityId”:“CSU”、“SourceSystem”:“SSP-sap-BH100”、“CommodityName”:“SPRINGS”、“CommodityType”:“}],“PageToken”:“TlhXQ0FVcTlzNE8rQQ”}
错误im获取:
数据库已连接回溯(最近一次调用):文件“/xdata/dev/ariba/python/JSON_python_RESPONSE.py”,第42行,用于glob.iglob(df_1)中的fl:File”/usr/local/anaconda3/lib/python3.6/glob.py”,第40行,在_iglobdirname中,basename=os.path.split(路径名)文件“/usr/local/anaconda3/lib/python3.6/posixpath.py”,第107行,在split p=os.fspath(p)中TypeError:应为str、bytes或os.PathLike对象,而不是DataFrame InvoiceExceptionsFactis created ERPCommodityDimSystemView ERPCommodityDim
您应该更新您的问题,而不是将其作为注释发布。是的,感谢您的建议,用错误和示例json文件更新了问题。需要的场景:数据应该被读取,如果”。“found then应替换为“u”,然后推送到表中。我试图合并您的代码,但不知怎的,上面的错误是文件名太长(已更新我的问题)。应读取数据,如果找到“.”,则应将其替换为“u”,然后推送到表中。不知道我哪里出错了,请help@Roho我上面提到的代码用于放置在一个文件夹中的JSON文件集,for循环中的fileName(第5行)是从文件夹中逐个获取的文件(例如:file1.JSON、file2.JSON…等等)。如果只想运行一个文件,只需提及路径并从(第6行)开始,只需打开文件,读取并替换它。os.listdir用于读取一个文件夹中的多个文件,这里json的标题是takes in fileName,如果您仍然没有得到它,请提及它,我将编辑我的codeManju,我仍然无法获得它。请您编辑您的代码。那将是非常重要的help@Roho,编辑后只需提供与上述相同的输入和输出文件
# -*- coding: utf-8 -*-
import os
input_path='E:/CD034591Q_001log5.json'
output_path='E:/CD034591Q_001log5.json' 

file = open(input_path, "r",encoding='utf-8')
contents = file.read()
if '' in contents:        
    with open(output_path,'w',encoding='utf-8') as output:
        rmSplc=contents.replace('','')
        output.write(rmSplc)