在运行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,如下所示:
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并尝试将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)
当我打印 …
我将数据保存在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) 使用jq,如何将浅层对象数组的任意JSON编码转换为CSV?
这个网站上有大量的问答,涵盖了对字段进行硬编码的特定数据模型,但是这个问题的答案应该适用于任何JSON,唯一的限制是它是一个具有标量属性的对象数组(没有深/复/子对象,扁平化这些是另一个问题).结果应包含一个标题行,给出字段名称.将优先考虑保留第一个对象的字段顺序的答案,但这不是必需的.结果可以用双引号括起所有单元格,或者只包含那些需要引用的单元格(例如'a,b').
输入:
[
{"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)输入:
[
{"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)我收到了一个JSON文件,但不知道如何阅读它.是否有转换器,我可以生成一个漂亮的CSV文件,以便它可以加载到MS Excel?我不懂JSON,所以如果有人编写脚本或将我链接到可以完成工作的脚本,那就太棒了.
我在http://json.bloople.net上发现了一些东西,不幸的是,它是HTML的JSON.
编辑:jsonformat.com更接近,但它仍然不是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).
flatten_json从GitHub Repo 使用:flattenpip install flatten-jsondef 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) pandas.DataFramestr、dict或listtype。NaN时处理值的问题。df.dropna().reset_index(drop=True)str必须将列中的值转换为dict类型,使用, 。ast.literal_eval.json_normalizeimport 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) 我需要使用 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) 我有一个像这样的 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
python ×7
json ×6
csv ×3
dictionary ×3
pandas ×3
dataframe ×1
github ×1
google-api ×1
javascript ×1
jq ×1
ldap3 ×1
newline ×1
node.js ×1
python-idle ×1
recursion ×1
windows ×1