将字典列表导出到csv时出错

时间:2019-10-18 09:48:17

标签: python list csv dictionary web-scraping

我正在尝试将字典列表导出到excel,以便csv文件每个变量具有一列,并具有所有键的对应值。

我尝试尝试导出词典字典,而不是导出包含字典的列表列表,但它们似乎都不起作用。我该怎么办?

url_test = 'http://app.parlamento.pt/webutils/docs/doc.txt?path=6148523063446f764c324679626d56304c3239775a57356b595852684c3052685a47397a51574a6c636e5276637939535a576470633352764a544977516d6c765a334c446f575a705932387657456c4a535355794d45786c5a326c7a6247463064584a684c314a6c5a326c7a644739436157396e636d466d61574e7657456c4a53563971633239754c6e523464413d3d&fich=RegistoBiograficoXIII_json.txt&Inline=true'

r_test = requests.get(url_test)

mps = cont['RegistoBiografico']['RegistoBiograficoList']['pt_ar_wsgode_objectos_DadosRegistoBiograficoWeb']

result = {}

for j in mps:
     ID = j['cadId']
     Nome = j['cadNomeCompleto']
     Sexo = j['cadSexo']
     resultf = {'ID':ID, 'Nome':Nome, 'Sexo':Sexo}
     result.append(resultf)

with open('bio_json.csv', 'w') as outfile:
    writer = DictWriter(outfile, ('ID', 'Nome', 'Sexo', 'Profissao', 'Legislatura'))
    writer.writerows(result)

我期望如上所述的最终csv。但是,在writer.writerows(result)之后,我收到此消息:

File "C:\Users\fnac\Desktop\Universidade do Minho\Software\lib\csv.py", line 158, in writerows
    return self.writer.writerows(map(self._dict_to_list, rowdicts))
  File "C:\Users\fnac\Desktop\Universidade do Minho\Software\lib\csv.py", line 148, in _dict_to_list
    wrong_fields = rowdict.keys() - self.fieldnames
AttributeError: 'list' object has no attribute 'keys'

2 个答案:

答案 0 :(得分:0)

字典列表可以正常工作:

config_api.js:63 Uncaught Error: Cannot find module './../src/AreaChart'
    at Function.webpackEmptyContext [as resolve] (notes sync:2)
    at Module../packages/recharts/notes/Basic.js (Basic.js:22)
    at __webpack_require__ (bootstrap:790)
    at fn (bootstrap:150)
    at Module.<anonymous> (Basic.js:58)
    at Module../packages/recharts/stories/index.story.js (index.story.js:8)
    at __webpack_require__ (bootstrap:790)
    at fn (bootstrap:150)
    at webpackContext (packages sync .story.js$:9)
    at config.js:16

import requests import csv resp = requests.get( "http://app.parlamento.pt/webutils/docs/doc.txt?path=6148523063446f764c324679626d56304c3239775a57356b595852684c3052685a47397a51574a6c636e5276637939535a576470633352764a544977516d6c765a334c446f575a705932387657456c4a535355794d45786c5a326c7a6247463064584a684c314a6c5a326c7a644739436157396e636d466d61574e7657456c4a53563971633239754c6e523464413d3d&fich=RegistoBiograficoXIII_json.txt&Inline=true" ) resp.raise_for_status() data = resp.json() mps = data["RegistoBiografico"]["RegistoBiograficoList"]["pt_ar_wsgode_objectos_DadosRegistoBiograficoWeb"] result = [ { "ID": j["cadId"], "Nome": j["cadNomeCompleto"], "Sexo": j["cadSexo"], } for j in mps ] with open("bio_json.csv", "w") as outfile: writer = csv.DictWriter( outfile, ("ID", "Nome", "Sexo", "Profissao", "Legislatura"), ) writer.writerows(result) 看起来

bio_json.csv

答案 1 :(得分:0)

您可以很容易地从词典列表中创建一个数据框,并将其写入文件中(在他的解决方案中,对列表理解的很好的工作AKX)。

import requests
import pandas as pd

resp = requests.get(
    "http://app.parlamento.pt/webutils/docs/doc.txt?path=6148523063446f764c324679626d56304c3239775a57356b595852684c3052685a47397a51574a6c636e5276637939535a576470633352764a544977516d6c765a334c446f575a705932387657456c4a535355794d45786c5a326c7a6247463064584a684c314a6c5a326c7a644739436157396e636d466d61574e7657456c4a53563971633239754c6e523464413d3d&fich=RegistoBiograficoXIII_json.txt&Inline=true"
)
resp.raise_for_status()
data = resp.json()

mps = data["RegistoBiografico"]["RegistoBiograficoList"]["pt_ar_wsgode_objectos_DadosRegistoBiograficoWeb"]

result = [
    {
        "ID": j["cadId"],
        "Nome": j["cadNomeCompleto"],
        "Sexo": j["cadSexo"],
        "Profissao": "", 
        "Legislatura": ""
    }
    for j in mps
]

df = pd.DataFrame(result)
df.to_csv('bio_json.csv')

或仅一行:

pd.DataFrame(result).to_csv('bio_json.csv')