Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将JSON元素写入csv文件python_Python_Arrays_Json_Csv_Object - Fatal编程技术网

将JSON元素写入csv文件python

将JSON元素写入csv文件python,python,arrays,json,csv,object,Python,Arrays,Json,Csv,Object,我刚刚创建了一个python程序,该程序使用googlewebmasterapi检查目标站点是否对移动设备友好&然后根据响应提取某些Json元素。它还捕获了本地文件夹中的屏幕截图 该脚本运行良好,但当我试图将这些json对象写入csv文件时,它不起作用 这是我的密码:- import requests, json, string, random, time import csv from base64 import decodestring from random import randint

我刚刚创建了一个python程序,该程序使用googlewebmasterapi检查目标站点是否对移动设备友好&然后根据响应提取某些Json元素。它还捕获了本地文件夹中的屏幕截图

该脚本运行良好,但当我试图将这些json对象写入csv文件时,它不起作用

这是我的密码:-

import requests, json, string, random, time
import csv
from base64 import decodestring
from random import randint

#links = open(r'D:\\Carlos\\Links.txt')
links = ['https://www.googleapis.com/pagespeedonline/v3beta1/mobileReady?key=AIzaSyDkEX-f1JNLQLC164SZaobALqFv4PHV-kA&screenshot=true&snapshots=true&locale=en_US&url=https://www.economicalinsurance.com/en/&strategy=mobile&filter_third_party_resources=false',
         'https://www.googleapis.com/pagespeedonline/v3beta1/mobileReady?key=AIzaSyDkEX-f1JNLQLC164SZaobALqFv4PHV-kA&screenshot=true&snapshots=true&locale=en_US&url=http://www.volkswagen-me.com/en-vwme/service/protection/motor-insurance.html&strategy=mobile&filter_third_party_resources=false']

def id_generator(size=6, chars=string.ascii_uppercase + string.digits):
    return ''.join(random.choice(chars) for _ in range(size))

i = 12

def get_data(each):
    try:
        r = requests.get(each)
    except:
        pass
    #time.sleep(randint(1, 3))
    try:    
        json_data = json.loads(r.text)
    except:
        pass
    try:
        score = json_data['ruleGroups']['USABILITY']['score'];score=int(score)
    except:
        pass
    try:
        Pass = json_data['ruleGroups']['USABILITY']['pass'];Pass=str(Pass)
    except:
        pass
    try:
        ConfigureViewport = json_data['formattedResults']['ruleResults']['ConfigureViewport']['localizedRuleName'];ConfigureViewport=str(ConfigureViewport)
    except:
        pass
    try:
        UseLegibleFontSizes = json_data['formattedResults']['ruleResults']['UseLegibleFontSizes']['localizedRuleName'];UseLegibleFontSizes=str(UseLegibleFontSizes)
    except:
        pass
    try:
        AvoidPlugins = json_data['formattedResults']['ruleResults']['AvoidPlugins']['localizedRuleName'];AvoidPlugins=str(AvoidPlugins)
    except:
        pass
    try:
        SizeContentToViewport = json_data['formattedResults']['ruleResults']['SizeContentToViewport']['localizedRuleName'];SizeContentToViewport=str(SizeContentToViewport)
    except:
        pass
    try:
        SizeTapTargetsAppropriately = json_data['formattedResults']['ruleResults']['SizeTapTargetsAppropriately']['localizedRuleName'];SizeTapTargetsAppropriately=str(SizeTapTargetsAppropriately)
    except:
        pass
    try:
        AvoidInterstitials = json_data['formattedResults']['ruleResults']['AvoidInterstitials']['localizedRuleName'];AvoidInterstitials=str(AvoidInterstitials)
    except:
        pass
    try:
        image_link = json_data['screenshot']['data']; image_link = image_link.replace("_", "/").replace("-","+")
    except:
        pass
    #try:
    id_generator_name = "".join( [random.choice(string.letters) for i in xrange(15)] )+'.jpeg'
    #except:
       # pass
    #try:
    fh = open(id_generator_name, "wb")
    #except:
    #    pass
    try:
        fh.write(str(image_link).decode('base64'))
        time.sleep(1)
    except:
        pass
    try:
        fh.close()
    except:
        pass
    try:
        error_code = json_data['error']['message'];error_code=str(error_code)
    except:
        pass
    try:
        print each, score, Pass, ConfigureViewport, UseLegibleFontSizes, AvoidPlugins, SizeContentToViewport, SizeTapTargetsAppropriately, AvoidInterstitials, error_code
    except:
        pass
    try:
        writer.writerow({'each':each, 'score':score, 'Pass':Pass, 'ConfigureViewport':ConfigureViewport,
                         'UseLegibleFontSizes':UseLegibleFontSizes, 'AvoidPlugins':AvoidPlugins,
                         'SizeContentToViewport':SizeContentToViewport,'SizeTapTargetsAppropriately':SizeTapTargetsAppropriately,
                         'AvoidInterstitials':AvoidInterstitials, 'error_code':error_code,'imagename':id_generator_name})
    except:
        pass

#path to the csv file
with open("D:\Carlos\Data_file\output.csv", "ab")as export:
    fieldnames = ['each', 'score', 'Pass', 'ConfigureViewport', 'UseLegibleFontSizes', 'AvoidPlugins', 'SizeContentToViewport',
                  'SizeTapTargetsAppropriately', 'AvoidInterstitials', 'error_code','imagename']
    writer = csv.DictWriter(export, fieldnames=fieldnames)
    writer.writeheader()
    for each in links:
    #try:
        get_data(each)
    #except:
    #  pass

请提供如何写入csv的建议?或者代码中哪里出了问题?

我喜欢使用Pandas数据帧,但是如果不使用Pandas,可能会有点过头。熊猫数据帧也非常适合进行分析和比较

您可以将JSON放入数据帧,然后将数据帧输出到CSV文件

import pandas as pd

df = pd.read_json('path/to/json/file')
df.to_csv('filename.csv')
请注意,只有当您的JSON有一个级别并且可能是csv时,它才这么简单。否则,您需要将JSON读入dict,导航到适当的级别,然后将其读入数据帧


我更喜欢使用CSV,正如您在上面的代码中所看到的,我可以为我想要解析的每个JSON元素分配变量,但是当我尝试将这些变量写入CSV文件时,它不写任何东西&代码退出时没有错误。您可以捕获每个
try:except:
block的所有可能的异常,因此不显示错误是可以理解的。您应该捕获显式异常,以避免隐藏意外异常。请解释哪些异常不起作用。在脚本中添加一个调试打印,以显示要传递给
writer.writerow
print({'each':each,'score':score,})
)“代码中哪里出错了?”-您的错误处理是完全没有用的,不是说得太细了。请阅读并理解所编写的代码无法调试。请在不使用
try:的情况下尝试您的代码,除非:
块,否则您将了解发生了什么。