Python JSON到CSV-编码错误,UnicodeDecodeError:';charmap';编解码器可以';t解码字节
我在将嵌套JSON转换为CSV时遇到问题。为此,我使用了一个完整的json-to-csv.py文件(分叉了一点以支持python 3.4)。 转换正在工作,如果我设置Python JSON到CSV-编码错误,UnicodeDecodeError:';charmap';编解码器可以';t解码字节,python,json,csv,unicode,cyrillic,Python,Json,Csv,Unicode,Cyrillic,我在将嵌套JSON转换为CSV时遇到问题。为此,我使用了一个完整的json-to-csv.py文件(分叉了一点以支持python 3.4)。 转换正在工作,如果我设置 #Base Condition else: reduced_item[str(key)] = (str(value)).encode('utf8','ignore') 及 但是,当我将csv导入MS Excel时,我会看到错误的西里尔字符,例如\xe0\xf1,英文文本就可以了。 尝试设置encode('cp12
#Base Condition
else:
reduced_item[str(key)] = (str(value)).encode('utf8','ignore')
及
但是,当我将csv导入MS Excel时,我会看到错误的西里尔字符,例如\xe0\xf1,英文文本就可以了。
尝试设置encode('cp1251','ignore'),但后来我得到了一个错误
UnicodeDecodeError:“charmap”编解码器无法解码位置Y中的字节X:字符映射到(如下所示)
导入系统
导入json
导入csv
##
#此函数用于转换以下项:
# {
#“项目1”:“价值11”,
#“项目2”:“价值12”,
#“项目3”:“价值13”,
#“项目4”:[“分项价值14”、“分项价值15”],
#“第5项”:{
#“分项1”:“分项价值11”,
#“子项2”:[“子项价值12”、“子项价值13”]
# }
# }
#到
# {
#“节点\项目\ 1”:“值\ 11”,
#“节点_项_2”:“值_12”,
#“节点_项_3”:“值_13”,
#“节点项4 0”:“子项值14”,
#“节点项”4“1”:“子项值”15,
#“节点项目5子项目1”:“子项目值11”,
#“节点项目5子项目2子项目0”:“子项目值12”,
#“节点\u项目\u 5\u子项目\u 2\u 0”:“子项目\u值\u 13”
# }
##
def REDUCT_项目(键、值):
全局约化项
#还原条件1
如果类型(值)为列表:
i=0
对于价值中的子项:
减少项目(键+符号(i),子项目)
i=i+1
#还原条件2
elif类型(值)为dict:
sub_keys=value.keys()
对于sub_键中的sub_键:
减少项目(键+子键+子键),值[子键])
#基本条件
其他:
减少的_项[str(key)]=(str(value)).encode('cp1251','ignore')
如果名称=“\uuuuu main\uuuuuuuu”:
如果len(sys.argv)!=4:
打印(“\n用法:python json\u to\u csv.py\n”)
其他:
#阅读论点
node=sys.argv[1]
json_file_path=sys.argv[2]
csv_file_path=sys.argv[3]
fp=open(json_文件_路径'r',编码='cp1251')
json_value=fp.read()
原始数据=json.loads(json值)
已处理的_数据=[]
标题=[]
对于原始数据[节点]中的项:
减少的_项={}
减少项目(节点,项目)
页眉+=减少的项目.keys()
已处理的\u数据。追加(减少的\u项)
标题=列表(集合(标题))
header.sort()
将open(csv_file_path,'wt+')作为f:#wb+用于python 2.7
writer=csv.DictWriter(f,标题,quoting=csv.QUOTE_ALL,分隔符=',')
writer.writeheader()
对于已处理的_数据中的行:
writer.writerow(行)
打印(“刚刚完成写入csv文件,包含%d列”%len(标题))
如何正确转换西里尔字母,以及我想跳过坏字符?您需要知道要打开的文件的西里尔字母编码。 例如,在python3中这已经足够了:
with open(args.input_file, 'r', encoding="cp866") as input_file:
data = input_file.read()
structure = json.loads(data)
在python3中,数据变量自动为utf-8。在python2中,向json提供输入可能有问题
还可以尝试在python解释器行中打印出来,看看符号是否正确。没有输入文件很难判断是否一切正常。另外,您是否确定这是python问题,而不是与excel相关的问题?您是否尝试用记事本++或类似的编码打开
使用编码最重要的事情是检查输入和输出是否正确。我建议您看看这里。也许您可以使用chardet来检测文件的编码
import chardet
File='arq.GeoJson'
enc=chardet.detect(open(File,'rb').read())['encoding']
with open(File,'r', encoding = enc) as f:
data=json.load(f)
f.close()
这避免了“踢”编码。澄清一下,这是我的错:为了从github编码,我在两个方面添加了自己的编码设置,这是错误的。因此,答案是将encoding=“utf8”添加到open(args.input_file,'r',encoding=“cp866”)作为输入_文件:然后在Excel中正确打开该文件。并从(str(value)).encode('cp1251','ignore')和fp=open(json_file_path,'r',encoding='cp1251')中删除编码声明
import chardet
File='arq.GeoJson'
enc=chardet.detect(open(File,'rb').read())['encoding']
with open(File,'r', encoding = enc) as f:
data=json.load(f)
f.close()
import chardet
File='arq.GeoJson'
enc=chardet.detect(open(File,'rb').read())['encoding']
with open(File,'r', encoding = enc) as f:
data=json.load(f)
f.close()