相关疑难解决方法(0)

Python中的CSV在Windows上添加额外的回车符

在运行Windows XP专业版的Python 2.7中:

import csv
outfile = file('test.csv', 'w')
writer = csv.writer(outfile, delimiter=',', quoting=csv.QUOTE_MINIMAL)
writer.writerow(['hi','dude'])
writer.writerow(['hi2','dude2'])
outfile.close()
Run Code Online (Sandbox Code Playgroud)

它生成一个文件test.csv,每行有一个额外的\ r \n,如下所示:

test.csv

hi,dude\r\r\nhi2,dude2\r\r\n
Run Code Online (Sandbox Code Playgroud)

而不是预期的:

hi,dude\r\nhi2,dude2\r\n
Run Code Online (Sandbox Code Playgroud)

为什么会发生这种情况,或者这实际上是期望的行为?

python windows csv newline

202
推荐指数
4
解决办法
14万
查看次数

为什么我看到"TypeError:字符串索引必须是整数"?

我正在玩学习python并尝试将github问题变成可读的形式.使用有关如何将JSON转换为CSV的建议?我想出了这个:

import json
import csv

f=open('issues.json')
data = json.load(f)
f.close()

f=open("issues.csv","wb+")
csv_file=csv.writer(f)

csv_file.writerow(["gravatar_id","position","number","votes","created_at","comments","body","title","updated_at","html_url","user","labels","state"])

for item in data:
        csv_file.writerow([item["gravatar_id"], item["position"], item["number"], item["votes"], item["created_at"], item["comments"], item["body"], item["title"], item["updated_at"], item["html_url"], item["user"], item["labels"], item["state"]])
Run Code Online (Sandbox Code Playgroud)

其中"issues.json"是包含我的github问题的json文件.当我尝试运行时,我明白了

File "foo.py", line 14, in <module>
csv_file.writerow([item["gravatar_id"], item["position"], item["number"], item["votes"], item["created_at"], item["comments"], item["body"], item["title"], item["updated_at"], item["html_url"], item["user"], item["labels"], item["state"]])

TypeError: string indices must be integers
Run Code Online (Sandbox Code Playgroud)

我在这里错过了什么?哪个是"字符串索引"?我敢肯定,一旦我开始工作,我会有更多的问题,但就目前而言,我只是喜欢这个工作!

更新: 当我for简单地调整声明时

for item in data:
    print item
Run Code Online (Sandbox Code Playgroud)

我得到的是......"问题" - 所以我做了一些更基本的错误.这是我的一些json:

{"issues":[{"gravatar_id":"44230311a3dcd684b6c5f81bf2ec9f60","position":2.0,"number":263,"votes":0,"created_at":"2010/09/17 16:06:50 -0700","comments":11,"body":"Add missing paging (Older>>) links...
Run Code Online (Sandbox Code Playgroud)

当我打印 …

python json github

173
推荐指数
4
解决办法
66万
查看次数

将Pandas列内的字典/列表拆分为单独的列

我将数据保存在postgreSQL数据库中.我使用Python2.7查询这些数据并将其转换为Pandas DataFrame.但是,此数据框的最后一列中包含值的字典(或列表?).DataFrame看起来像这样:

[1] df
Station ID     Pollutants
8809           {"a": "46", "b": "3", "c": "12"}
8810           {"a": "36", "b": "5", "c": "8"}
8811           {"b": "2", "c": "7"}
8812           {"c": "11"}
8813           {"a": "82", "c": "15"}
Run Code Online (Sandbox Code Playgroud)

我需要将此列拆分为单独的列,以便DataFrame如下所示:

[2] df2
Station ID     a      b       c
8809           46     3       12
8810           36     5       8
8811           NaN    2       7
8812           NaN    NaN     11
8813           82     NaN     15
Run Code Online (Sandbox Code Playgroud)

我遇到的主要问题是列表的长度不同.但是所有列表只包含相同的3个值:a,b和c.它们总是以相同的顺序出现(第一个,第二个,第三个).

以下代码用于工作并返回我想要的内容(df2).

[3] df 
[4] objs = [df, pandas.DataFrame(df['Pollutant Levels'].tolist()).iloc[:, :3]]
[5] df2 = pandas.concat(objs, axis=1).drop('Pollutant Levels', axis=1) …
Run Code Online (Sandbox Code Playgroud)

python dictionary dataframe pandas

93
推荐指数
10
解决办法
5万
查看次数

如何使用jq将任意简单JSON转换为CSV?

使用jq,如何将浅层对象数组的任意JSON编码转换为CSV?

这个网站上有大量的问答,涵盖了对字段进行硬编码的特定数据模型,但是这个问题的答案应该适用于任何JSON,唯一的限制是它是一个具有标量属性的对象数组(没有深/复/子对象,扁平化这些是另一个问题).结果应包含一个标题行,给出字段名称.将优先考虑保留第一个对象的字段顺序的答案,但这不是必需的.结果可以用双引号括起所有单元格,或者只包含那些需要引用的单元格(例如'a,b').

例子

  1. 输入:

    [
        {"code": "NSW", "name": "New South Wales", "level":"state", "country": "AU"},
        {"code": "AB", "name": "Alberta", "level":"province", "country": "CA"},
        {"code": "ABD", "name": "Aberdeenshire", "level":"council area", "country": "GB"},
        {"code": "AK", "name": "Alaska", "level":"state", "country": "US"}
    ]
    
    Run Code Online (Sandbox Code Playgroud)

    可能的输出:

    code,name,level,country
    NSW,New South Wales,state,AU
    AB,Alberta,province,CA
    ABD,Aberdeenshire,council area,GB
    AK,Alaska,state,US
    
    Run Code Online (Sandbox Code Playgroud)

    可能的输出:

    "code","name","level","country"
    "NSW","New South Wales","state","AU"
    "AB","Alberta","province","CA"
    "ABD","Aberdeenshire","council area","GB"
    "AK","Alaska","state","US"
    
    Run Code Online (Sandbox Code Playgroud)
  2. 输入:

    [
        {"name": "bang", "value": "!", "level": 0},
        {"name": "letters", "value": "a,b,c", "level": 0},
        {"name": "letters", "value": "x,y,z", "level": 1},
        {"name": "bang", "value": …
    Run Code Online (Sandbox Code Playgroud)

csv json jq

84
推荐指数
6
解决办法
5万
查看次数

将MSSON的JSON格式转换为CSV格式

我收到了一个JSON文件,但不知道如何阅读它.是否有转换器,我可以生成一个漂亮的CSV文件,以便它可以加载到MS Excel?我不懂JSON,所以如果有人编写脚本或将我链接到可以完成工作的脚本,那就太棒了.

我在http://json.bloople.net上发现了一些东西,不幸的是,它是HTML的JSON.

编辑:jsonformat.com更接近,但它仍然不是CSV.

json

71
推荐指数
2
解决办法
23万
查看次数

使用Python(空闲)将JSON转换为CSV

我有一个纬度/经度的JSON文件,我想要转换为CSV文件.我想用Python做到这一点.我已阅读/尝试了所有其他stackoverflow和谷歌搜索结果的建议.我已经设法创建了CSV并包含标题,但除此之外,愚蠢的东西开始发生.到目前为止,这是我的代码的工作部分:

import json, csv

x="""[
    {"longitude":"-73.689070","latitude":"40.718000"},
    {"longitude":"-73.688400","latitude":"40.715990"},
    {"longitude":"-73.688340","latitude":"40.715790"},
    {"longitude":"-73.688370","latitude":"40.715500"},
    {"longitude":"-73.688490","latitude":"40.715030"},
    {"longitude":"-73.688810","latitude":"40.714370"},
    {"longitude":"-73.688980","latitude":"40.714080"},
    {"longitude":"-73.689350","latitude":"40.713390"},
    {"longitude":"-73.689530","latitude":"40.712800"},
    {"longitude":"-73.689740","latitude":"40.712050"},
    {"longitude":"-73.689820","latitude":"40.711810"},
    {"longitude":"-73.689930","latitude":"40.711380"},
    {"longitude":"-73.690110","latitude":"40.710710"}
]"""

x = json.loads(x)

f = csv.writer(open("test.csv", "wb+"))

f.writerow(["longitude", "latitude"])
Run Code Online (Sandbox Code Playgroud)

它在哪里崩溃("?"意味着我不知道该放在那里.我已经尝试了各种各样的组合,我在寻找答案时发现了这些组合):

for ? in ?:
    f.writerow([?[?],?[?]])
Run Code Online (Sandbox Code Playgroud)

我从little_fish得到了上述问题答案.我可以看到我们的JSON示例略有不同,我认为这与我无法使其工作的原因有关...

任何帮助将不胜感激,如果需要,我很乐意提供澄清.仅供参考,我是Python的新手,所以如果你要使用行话,请尽可能清楚地解释.谢谢!(PS不确定是否重要,但我使用的是IDLE).

python csv json python-idle

11
推荐指数
1
解决办法
1万
查看次数

如何使用 flatten_json 递归地展平嵌套的 JSON

这个问题特定于flatten_jsonGitHub Repo 使用:flatten

  • 该软件包位于 pypi flatten-json 0.1.7 上,可以安装pip install flatten-json
  • 此问题特定于软件包的以下组件:
def flatten_json(nested_json: dict, exclude: list=[''], sep: str='_') -> dict:
    """
    Flatten a list of nested dicts.
    """
    out = dict()
    def flatten(x: (list, dict, str), name: str='', exclude=exclude):
        if type(x) is dict:
            for a in x:
                if a not in exclude:
                    flatten(x[a], f'{name}{a}{sep}')
        elif type(x) is list:
            i = 0
            for a in x:
                flatten(a, f'{name}{i}{sep}')
                i += 1
        else:
            out[name[:-1]] = x

    flatten(nested_json) …
Run Code Online (Sandbox Code Playgroud)

python recursion json pandas

10
推荐指数
1
解决办法
7159
查看次数

如何使用 NaN 对列进行 json_normalize

  • 这个问题特定于a中的数据列pandas.DataFrame
  • 此问题取决于列中的值是否为strdictlisttype。
  • 这个问题解决了在不是有效选项NaN时处理值的问题。df.dropna().reset_index(drop=True)

情况1

  • 对于类型的列,在使用 之前,str必须将列中的值转换为dict类型,使用, 。ast.literal_eval.json_normalize
import numpy as np
import pandas as pd
from ast import literal_eval

df = pd.DataFrame({'col_str': ['{"a": "46", "b": "3", "c": "12"}', '{"b": "2", "c": "7"}', '{"c": "11"}', np.NaN]})

                            col_str
0  {"a": "46", "b": "3", "c": "12"}
1              {"b": "2", "c": "7"}
2                       {"c": "11"}
3                               NaN

type(df.iloc[0, 0])
[out]: str

df.col_str.apply(literal_eval)
Run Code Online (Sandbox Code Playgroud)

错误:

df.col_str.apply(literal_eval) results in ValueError: malformed …
Run Code Online (Sandbox Code Playgroud)

python json dictionary pandas json-normalize

5
推荐指数
1
解决办法
5806
查看次数

如何将 ldap3 条目处理为 json 或列表以进行进一步的数据处理?

我需要使用 LDAP 从服务器获取数据。我正在使用 ldap3,并且正在获取我需要的所有属性和响应,但是它们被困在 ldap.abstract.entry.entry 类中。我尝试了几种方法将数据转换为 json 或列表形式,但它从未按照我预期的方式工作。

例如我尝试过:

entry = conn.entries
current_data = (entry.entry_to_json())
print(type(current_data))
print(len(current_data))
>>> <class 'str'>
>>> 480
Run Code Online (Sandbox Code Playgroud)

然而,这导致我的所有数据都是长度为 480 或更长的单个字符串。我尝试过使用这个,但事实证明这非常困难。所以我尝试以下方法将字符串转换为字典:

current_data = (entry[0].entry_to_json())
current_data = ast.literal_eval(current_data)
print(type(current_data))
print(len(current_data))
>>> <class 'dict'>
>>> 2
Run Code Online (Sandbox Code Playgroud)

但是,现在我无法单独访问所有不同的属性。我的目标是将从 LDAP 查询获得的所有数据写入 CSV,以便其他应用程序可以使用它。但目前我陷入困境,因为我无法将数据转换为 JSON 或 CSV 格式。

如何获取并处理来自 的数据,conn.entries以便将每个属性写入 CSV 中的单独列?

最好的祝愿,

C·泽布

编辑:

这是我使用时得到的示例(entry.entry_to_json())

{
    "attributes": {
        "dcxLDOUniqueCN": [
            "XXXX"
        ],
        "dcxPostalAddress": [
            "XXX"
        ],
        "dcxSupervisor": [
            "XXX"
        ],
        "mail": [
            "XXX"
        ],
        "mobile": [],
        "uid": …
Run Code Online (Sandbox Code Playgroud)

python dictionary ldap3

3
推荐指数
1
解决办法
9364
查看次数

如何使用 NodeJs 将 JavaScript 对象导出到 Google Sheet

我有一个像这样的 JavaScript 对象

[{ a: "123", b: "456" }, { a: "321", b: "654" }]
Run Code Online (Sandbox Code Playgroud)

有没有办法使用 NodeJs 将其导出到 Google Sheet

在此输入图像描述

javascript google-api google-sheets node.js google-sheets-api

3
推荐指数
1
解决办法
2949
查看次数