当前位置: 首页 > 知识库问答 >
问题:

如何解析复杂的CSV文件

樊琦
2023-03-14

我收到了一个包含字符串和元组元素组合的CSV文件,但找不到正确解析它的方法。我错过了什么明显的东西吗?

csvfile

"presentation_id","presentation_name","sectionId","sectionNumber","courseId","courseIdentifier","courseName","activity_id","activity_prompt","activity_content","solution","event_timestamp","answer_id","answer","isCorrect","userid","firstname","lastname","email","role"
"26cc7957-5a6b-4bde-a996-dd823f54ece7","3-Axial Skeleton F18","937c47b0-cc66-4938-81de-1b1b58388499","001","3b5b5e49-1798-4eab-86d7-186cf59149b4","MOVESCI 230","Human Musculoskeletal Anatomy","62d059e8-9ab4-41d4-9eb8-00ba67d9fac9","A blow to which side of the knee might tear the medial collateral ligament?","{"choices":["medial","lateral"],"type":"MultipleChoice"}","{"solution":[1],"selectAll":false,"type":"MultipleChoice"}","2018-09-30 23:54:16.000","7b5048e5-7460-49f8-a64a-763b7f62d771","{"solution":[1],"type":"MultipleChoice"}","1","57ba970d-d02b-4a10-a64d-56f02336ee08","Student","One","student1@example.com","Student"
"26cc7957-5a6b-4bde-a996-dd823f54ece7","3-Axial Skeleton F18","937c47b0-cc66-4938-81de-1b1b58388499","001","3b5b5e49-1798-4eab-86d7-186cf59149b4","MOVESCI 230","Human Musculoskeletal Anatomy","f82cb32b-45ce-4d3a-aa74-b3fa1a1038a2","What is the name of this movement?","{"choices":["right rotation","left rotation","right lateral rotation","left lateral rotation"],"type":"MultipleChoice"}","{"solution":[1],"selectAll":false,"type":"MultipleChoice"}","2018-09-30 23:20:33.000","d6cce4d9-37ae-409e-afc5-54ad79f86226","{"solution":[3],"type":"MultipleChoice"}","0","921d1b9b-f550-4289-89f1-2a805b27eeb3","Student","Two","student2@example.com","Student"

第一行是标题,第二行开始数据

with open(filepathcsv) as csvfile:
    readCSV = csv.reader(csvfile)
    for row in readCSV:
        numcolumns = len(row)
        print(numcolumns,": ",row)

产量:

20 :  ['presentation_id', 'presentation_name', 'sectionId', 'sectionNumber', 'courseId', 'courseIdentifier', 'courseName', 'activity_id', 'activity_prompt', 'activity_content', 'solution', 'event_timestamp', 'answer_id', 'answer', 'isCorrect', 'userid', 'firstname', 'lastname', 'email', 'role']
25 :  ['26cc7957-5a6b-4bde-a996-dd823f54ece7', '3-Axial Skeleton F18', '937c47b0-cc66-4938-81de-1b1b58388499', '001', '3b5b5e49-1798-4eab-86d7-186cf59149b4', 'MOVESCI 230', 'Human Musculoskeletal Anatomy', '62d059e8-9ab4-41d4-9eb8-00ba67d9fac9', 'A blow to which side of the knee might tear the medial collateral ligament?', '{choices":["medial"', 'lateral]', 'type:"MultipleChoice"}"', '{solution":[1]', 'selectAll:false', 'type:"MultipleChoice"}"', '2018-09-30 23:54:16.000', '7b5048e5-7460-49f8-a64a-763b7f62d771', '{solution":[1]', 'type:"MultipleChoice"}"', '1', '57ba970d-d02b-4a10-a64d-56f02336ee08', 'William', 'Muter', 'wmuter@umich.edu', 'Student']
27 :  ['26cc7957-5a6b-4bde-a996-dd823f54ece7', '3-Axial Skeleton F18', '937c47b0-cc66-4938-81de-1b1b58388499', '001', '3b5b5e49-1798-4eab-86d7-186cf59149b4', 'MOVESCI 230', 'Human Musculoskeletal Anatomy', 'f82cb32b-45ce-4d3a-aa74-b3fa1a1038a2', 'What is the name of this movement?', '{choices":["right rotation"', 'left rotation', 'right lateral rotation', 'left lateral rotation]', 'type:"MultipleChoice"}"', '{solution":[1]', 'selectAll:false', 'type:"MultipleChoice"}"', '2018-09-30 23:20:33.000', 'd6cce4d9-37ae-409e-afc5-54ad79f86226', '{solution":[3]', 'type:"MultipleChoice"}"', '0', '921d1b9b-f550-4289-89f1-2a805b27eeb3', 'Noah', 'Willett', 'willettn@umich.edu', 'Student']

csv.reader解析每行不同,因为结构复杂,嵌入了花括号元素。

...但是我希望每行有20个元素。

共有2个答案

司徒浩思
2023-03-14

谢谢大家的建议!

另外,我很抱歉,因为我没有包括我试图解析的原始CSV文件(例如:)

“b5ae18d3-b6dd-4d0a-84fe-7c43df472571”|“气候快速变化”| W18.pdf”|“18563b1e-a467-44b3-aed7-3607a1acd712”|“001”|“c86c8c8d-dca6-41cd-a010-a83e40d93e75”|“气候102”|“极端天气”|“278c4561-c834-43-a770-3F563F563”与欧洲城市在同一纬度的阿伯安”ク|“{”选项“[“斯德哥尔摩,瑞典”,“柏林,德国”,“伦敦,英国”,“巴黎,法国”,“马德里,西班牙],”类型“:“多重回声”}“{”解决方案“[4],”选择全部“:”假“,”类型“:“多重回声”}”|“2019-01-31 22:11:08.000”|“81392cd3-28e9-4e2e-8a33-018104b1f4d1”|“{”解决方案“[3,4],”类型“:“多重回声”|“0”|“2DB100C-12407-12441;-B5411”|student1@umich.edu“|”学生“ee73fdaf-a926-4899-b0f7-9b942f1b44ad”|“6-肘、腕、手W19”|“48539109-529e-4359-83b9-2ae81be0532c”|“001”|“3B5E49-1798-4eab-86d7-186cf59149b4”|“MOVESCI 230”|“人体肌肉骨骼解剖学”|“fcd7c673-d944-48c3-8a09-F45834”|“这个运动叫什么名字?”?(3)选择“,”类型:“(类型:“(解决方案:[3]解决解决方案[3],“类型:“(解决解决解决解决解决解决解决解决解决解决解决解决解决解决解决解决解决解决解决解决[3],,”选择所有:假,“类型::假,”类型:“假,”类型:“(假,”类型:“(假,”类型:“(假,”类型:“(假,”类型:“(多回声)假,”类型:“(多回声)假,”类型:“(多回声)假,”类型,”类型:“(多回声)类型:“(多回声)假,”类型,”类型:“(多回声)假,”类型,”类型:“(多回声)类型:“(多回声)类型:“(多回声)类型::“(多回声)类型:::,类型:“(类型:“(多回声)类型)类型:“(多回声)类型)类型:::::::))类型,”类型:“(类型:“(多回声)类型::::::::::))类型,”类型,”类型:::“(多回声)类型::::“两个"|"student2@umich.edu“|”学生”

你是对的,问题是CSV文件的形式。

  1. 我更改了readCSV=csv。读卡器(csvfile)到readCSV=csv。读卡器(csvfile,分隔符=“|”,引号=“|”)
  2. 然后,我获取结果列表,并从每个元素中删除多余的引号

html" target="_blank">程序的其余部分现在正常工作。

华峰
2023-03-14

记录中的,而不是代码。您的代码工作正常。为了解决这个问题,您需要修复csv文件,因为json内容的字段没有正确序列化。

只需将一个引号符号更改为两个引号符号,即可将其转义。

下面是固定csv行的示例。

"26cc7957-5a6b-4bde-a996-dd823f54ece7","3-Axial Skeleton F18","937c47b0-cc66-4938-81de-1b1b58388499","001","3b5b5e49-1798-4eab-86d7-186cf59149b4","MOVESCI 230","Human Musculoskeletal Anatomy","f82cb32b-45ce-4d3a-aa74-b3fa1a1038a2","What is the name of this movement?","{""choices"":[""right rotation"",""left rotation"",""right lateral rotation"",""left lateral rotation""],""type"":""MultipleChoice""}","{""solution"":[1],""selectAll"":false,""type"":""MultipleChoice""}","2018-09-30 23:20:33.000","d6cce4d9-37ae-409e-afc5-54ad79f86226","{""solution"":[3],""type"":""MultipleChoice""}","0","921d1b9b-f550-4289-89f1-2a805b27eeb3","Student","Two","student2@example.com","Student"

以及修复后代码的结果:

20 :  ['26cc7957-5a6b-4bde-a996-dd823f54ece7', '3-Axial Skeleton F18', '937c47b0-cc66-4938-81de-1b1b58388499', '001', '3b5b5e49-1798-4eab-86d7-186cf59149b4', 'MOVESCI 230', 'Human Musculoskeletal Anatomy', 'f82cb32b-45ce-4d3a-aa74-b3fa1a1038a2', 'What is the name of this movement?', '{"choices":["right rotation","left rotation","right lateral rotation","left lateral rotation"],"type":"MultipleChoice"}', '{"solution":[1],"selectAll":false,"type":"MultipleChoice"}', '2018-09-30 23:20:33.000', 'd6cce4d9-37ae-409e-afc5-54ad79f86226', '{"solution":[3],"type":"MultipleChoice"}', '0', '921d1b9b-f550-4289-89f1-2a805b27eeb3', 'Student', 'Two', 'student2@example.com', 'Student']
 类似资料:
  • 问题内容: 我正在寻找一种将复杂文本文件解析为pandas DataFrame的简单方法。下面是一个示例文件,我希望解析后的结果是什么样,以及我当前的方法。 有什么方法可以使其更简洁/更快/更pythonic /更易读? 我也把这个问题放在了Code Review上 。 我最终写了一篇博客文章向初学者解释。 这是一个示例文件: 这是我希望解析后的结果看起来像什么: 这是我目前解析的方式: 问题答案

  • 我在解析从Excel中的API检索的XML文件时遇到问题。我可以成功地检索数据集(如下所示),但我找到的将每个字段格式化为其自身单元格的表格式的解决方案没有奏效,我认为这是因为XML的格式化方式。 每个XML看起来都类似于下面的内容。可能需要独立提取多个消息ID。(这是我遇到的另一个问题。“消息ID”中的空格引发了各种错误。) 下面是我尝试使用的解决方案:如何使用vba解析XML 下面是我尝试拉取

  • 我真的希望你能在这件事上帮我....我需要从我的xml文件中获取特定的数据,但我卡在了一个点上,我不知道如何继续... 我想从网络获得:网络名称;From代码:mcc和mnc代码;From设置:名称、id、类型、参数名称、值; 这就是我的xml文件的结构: 这就是我目前掌握的......我真的不能再继续下去了...在字符串content=CNode.GetLastChild().GetTextCo

  • 问题内容: 我正在研究一个很长的Bash脚本。我想将CSV文件中的单元格读取到Bash变量中。我可以解析行和第一列,但不能解析其他任何列。到目前为止,这是我的代码: 它仅打印第一列。作为附加测试,我尝试了以下操作: $ y是空的。所以我尝试了: $ y是。为什么? 问题答案: 您需要使用而不是: 请注意,对于一般用途的CSV解析,您应该使用专门的工具,该工具可以处理带有内部逗号的带引号的字段,以及

  • 本文向大家介绍python 如何读、写、解析CSV文件,包括了python 如何读、写、解析CSV文件的使用技巧和注意事项,需要的朋友参考一下 您知道将表格数据存储到纯文本文件背后的机制是什么吗?答案是CSV(逗号分隔值)文件,该文件允许将数据转换为纯文本格式。在这篇文章中关于“在Python如何阅读CSV文件”中,我们将学习如何读,写和解析的CSV文件的Python。 将详细讨论以下方面: 什么

  • 问题内容: 假设我有一个包含以下内容的文件: 如何通过PHP解析内容? 问题答案: 只需使用该功能即可解析CSV文件