csv文件在每行中都有json,但是在以下格式的一列中:
╔═══╦══════════════════════╗
║ ║ A ║
╠═══╬══════════════════════╣
║ 2 ║ {"discover":"123"} ║
║ 3 ║ {"offer":"321"} ║
║ 4 ║ {"roadmap":"788789"} ║
║ 5 ║ {"nebravvska":"890"} ║
╚═══╩══════════════════════╝
我希望将上述JSON键和值写入csv col1和col2中的每一行,而不替换现有数据。俄亥俄州和加利福尼亚州是现有数据。
预期输出:
╔═══╦════════════════╦══════════╗
║ ║ A ║ B ║
╠═══╬════════════════╬══════════╣
║ 1 ║ discover ║ 123 ║
║ 3 ║ offer ║ 321 ║
║ 4 ║ roadmap ║ 78890 ║
║ 5 ║ nebrask ║ 890 ║
║ 6 ║ ohio ║ hjsd8943 ║
║ 7 ║ california ║ 68yubkj ║
╚═══╩════════════════╩══════════╝
我正在使用pycharm 2.6。我的代码是将键和值写入一列
╔═══╦════════════════╗
║ ║ A ║
╠═══╬════════════════╣
║ 1 ║ discover 123 ║
║ 2 ║ offer 321 ║
║ 3 ║ roadmap 788789 ║
║ 4 ║ nebravvska 890 ║
╚═══╩════════════════╝
with open("JSONsinfile.csv","rU") as infile:
with open("output.csv","a+") as outfile:
writer = csv.writer(outfile, delimiter=' ')
for line in infile:
d = json.loads(line)
writer.writerows(d.items())
infile.close()
outfile.close()
答案 0 :(得分:2)
使用" pandas"您可以使用以下解决方案:
1) - 安装pandas
pip install pandas
2) - 脚本:
import csv, json
import csv
import pandas as pd
inp_csv = pd.read_csv("JSONsinfile.csv")
lst_of_dict = inp_csv['{"discover":"123"}'].tolist()
mydict={key:value for elem in lst_of_dict for key,value in eval(elem).items()}
with open('output.csv', 'wb') as csv_file:
writer = csv.writer(csv_file)
for key, value in mydict.items():
writer.writerow([key, value])
答案 1 :(得分:1)
如果要保留现有数据,则需要读入现有数据:
<强>代码:强>
import csv
import json
# get current data
with open('file1', 'rU') as f:
reader = csv.reader(f, delimiter=' ')
in_data = dict((row[0], row[1]) for row in reader)
# if you have python 2.7+ this also works, and looks nicer :-)
# in_data = {row[0]: row[1] for row in reader}
with open("file2", "rU") as infile, open("file3", "wb") as outfile:
writer = csv.writer(outfile, delimiter=' ')
for line in infile:
d = json.loads(line)
writer.writerows(d.items())
for key in d:
if key in in_data:
del in_data[key]
# write out any pre-existing unchanged data
writer.writerows(in_data.items())
现有数据(file1):
discover 123
offer 321
roadmap 78890
nebrask 890
ohio hjsd8943
california 68yubkj
传入Json(file2):
{"discover":"123"}
{"offer":"321"}
{"roadmap":"788789"}
{"nebravvska":"890"}
结果(file3):
discover 123
offer 321
roadmap 788789
nebravvska 890
california 68yubkj
nebrask 890
ohio hjsd8943
答案 2 :(得分:1)
下面的代码会在一列中写入密钥而在其他列中写入值,您必须在阅读csv之后创建一个字典,如
mydict = {"discover":"123","offer:321"}
with open('output.csv', 'wb') as csv_file:
writer = csv.writer(csv_file)e
for key, value in mydict.items():
writer.writerow([key, value])