Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 3.x 如何将包含多个词典的文件转换为csv文件_Python 3.x - Fatal编程技术网

Python 3.x 如何将包含多个词典的文件转换为csv文件

Python 3.x 如何将包含多个词典的文件转换为csv文件,python-3.x,Python 3.x,我有一个有几本字典的档案。下面只是文件的一部分。我需要将其转换为csv文件,并最终将其加载到数据库中。我在将其转换为csv时遇到问题 {"transaction_type": "new", "policynum": 4994949} {"transaction_type": "renewal", "policynum": 3848848} {"transaction_type": "cancel", "policynum": 49494949, "cancel_table": [{"canc

我有一个有几本字典的档案。下面只是文件的一部分。我需要将其转换为csv文件,并最终将其加载到数据库中。我在将其转换为csv时遇到问题

{"transaction_type": "new", "policynum": 4994949}
{"transaction_type": "renewal", "policynum": 3848848}
{"transaction_type": "cancel", "policynum": 49494949,  "cancel_table": 
[{"cancel_cd": "AU", "cancel_type": "online"}, {"cancel_cd": "AA", "cancel_type": "online"}]}
我已尝试实现以下代码,但取消表键未正确解析到csv文件中

导入ast
导入csv
将open('***\\Python\\test','r')作为in\u f,将open('***\\Python\\test.csv','w')作为out\u f:
数据=in_f.readlines()
writer=csv.DictWriter(out\u f,fieldnames=['transaction\u type','policynum','cancel\u table'],extraction='ignore')
writer.writeheader()#用于写入标头
对于数据中的行:
dict_row=ast.literal_eval(row)#因为row有一个dict字符串
writer.writerow(dict_行)
下面是我在取消表键未正确解析到csv文件时得到的结果。我需要帮助获得取消类型和不同的取消cd作为单独的列。或者取消用逗号分隔符连接在一列中的光盘(只是一个想法)。抱歉,如果这是一个很复杂的问题

transaction_type,policynum,cancel_table
new,4994949,
old,3848848,
cancel,49494949,"[{'cancel_type': 'online','cancel_cd': 'OL'}, 'cancel_type': 'Online','cancel_cd': 'BR'},{'cancel_type': 'online','cancel_cd': 'AU', }]"

假设
cancel\u表中的行总是同时包含
cancel\u cd
cancel\u type
,要将
cancel\u cd
cancel\u type
作为单独的列,可以使用以下代码:

导入ast
导入csv
将open('Python/test','r')作为in\u f,将open('Python/test.csv','w')作为out\u f:
数据=in_f.readlines()
writer=csv.writer(
外,
字段名=[
“交易类型”、“保单编号”、“取消光盘”、“取消类型”
],
溢出(忽略)
writer.writeheader()
对于数据中的行:
dict\u row=ast.literal\u eval(row)
如果dict行中的“取消表格”:
cancel\u table=dict\u行['cancel\u table']
取消光盘,取消光盘类型=[],[]
对于取消表格中的取消行:
取消光盘。追加(取消行['cancel\u cd'])
取消类型。追加(取消行['cancel\u type'])
dict_行['cancel_cd']=','。加入(cancel_cd)
dict_行['cancel_types']=','。连接(cancel_types)
writer.writerow(dict_行)

确保您的csv没有使用逗号作为列分隔符,否则这将导致
cancel\u cd
cancel\u type
的每个值都有不同的列。是,取消表总是有取消光盘和取消类型。我将分隔符设置为管道(|)。您是否有更好的主意在csv文件中容纳多张取消cd而不进行连接?另外,我怎样才能使用python处理文件呢。我了解它的实践和经验。但是你有什么建议吗?如果你知道取消表中的最大行数,你可以保留一些列来存储这些值。否则,您可以将它们存储在一个单独的文件中,并将它们链接到您的主键,我假定主键是
policynum
。对于在Python中使用文件,我建议阅读有关函数和文件解析库的文档(例如)。更多地了解字符串操作和不同的数据结构(如列表、DICT等)也是有用的。在输入文件“CaseLoLoad”中有新的键,字符串中的字符串值为\n。这是在执行脚本时将字符串拆分为新行。有没有忽略的方法\n?因此字符串值不会中断。此外,输入文件中有空白/空的行,需要跳过这些行。我们是否可以编写代码,将密钥“transaction_type”过滤到特定类型,这样我就可以避开空行和无用行?或者如果有其他方法?如果“忽略”的意思是从字符串中删除
\n
,只需使用
dict\u行['cancel\u reason']。替换('\n','')
。有关跳过空行的信息,请参见。如果您还有任何问题,请单独发布。