Python CSV阅读器,CSV格式
我有一个CSV,在视觉上看起来没有损坏。其中一列包含完整的电子邮件以及随后添加的逗号。格式类似于:Python CSV阅读器,CSV格式,python,excel,csv,Python,Excel,Csv,我有一个CSV,在视觉上看起来没有损坏。其中一列包含完整的电子邮件以及随后添加的逗号。格式类似于: ID | Info | Email | Notes -------------------------------------------------- 1234 | Sample | Full email here,| More notes here | and email wraps.| ----------------------
ID | Info | Email | Notes
--------------------------------------------------
1234 | Sample | Full email here,| More notes here
| and email wraps.|
--------------------------------------------------
5678 | Sample2| Another email, | More notes
--------------------------------------------------
9011 | Sample3| More emails | Etc.
--------------------------------------------------
我使用的是CSV阅读器,它将每一行作为新行输出,这是不正确的。
例如,我得到:
Line 1: 1234 | Sample | Full email here,| More notes here
Line 2: | and email wraps.|
Line 3: 5678 | Sample2| Another email, | More notes
Line 4: 9011 | Sample3| More emails | Etc.
我需要它能够像Excel或Libre Office一样识别单元格分隔符,并获得以下结果:
Line 1: 1234 | Sample | Full email here, and email wraps.| More notes here
Line 2: 5678 | Sample2| Another email, | More notes
Line 3: 9011 | Sample3| More emails | Etc.
我有以下代码:
import csv
import sys
csv.field_size_limit(sys.maxsize)
file = "myfile.csv"
with open(file, 'rU') as f:
freader = csv.reader(f, delimiter = '|', quoting=csv.QUOTE_NONE)
for row in freader:
print(','.join(row))
我尝试了delimiter='、'或delimiter='\n',但没有成功。
有什么想法吗?虽然可以将分隔符更改为选项卡、管道或任何您喜欢的内容,但事实是CSV是一种非常原始的、基于行的格式
问题在于您的第二条记录,它跨越了从CSV文件的角度断开的行。PythonCSV库不是为容纳这些东西而设计的,因为它不是CSV文件的样式
为了满足您的要求,最好编写自己的解析器,在delimter上断开每一行,并基于某些逻辑进行合并。这应该是相对简单的iffID列从不跨越两行
至于如何实际编写代码,您需要一个如下的过程:
Initialise array X
Read each line L of file F:
If the ID field is empty then merge each entry into the previous line L-1
Otherwise append the line L to array X
虽然可以将分隔符更改为选项卡、管道或任何您喜欢的内容,但事实是CSV是一种非常原始的、基于行的格式
问题在于您的第二条记录,它跨越了从CSV文件的角度断开的行。PythonCSV库不是为容纳这些东西而设计的,因为它不是CSV文件的样式
为了满足您的要求,最好编写自己的解析器,在delimter上断开每一行,并基于某些逻辑进行合并。这应该是相对简单的iffID列从不跨越两行
至于如何实际编写代码,您需要一个如下的过程:
Initialise array X
Read each line L of file F:
If the ID field is empty then merge each entry into the previous line L-1
Otherwise append the line L to array X
ID列从不跨越两行。我如何解析它,有什么模块吗?@reblehen您可以通过编写代码来解析它,而我所知道的任何模块都不能满足您的需要。@reblehen我添加了一些伪代码,可以解释您需要的过程。谢谢,我将尝试遵循,并希望能使其工作。我创建了一个简单的逐行读取,并使用参数和startswith()将其附加到上一个,它完成了这项工作。然而,原始CSV解析不正确,但您的答案是正确的。ID列从不跨越两行。我如何解析它,有什么模块吗?@reblehen您可以通过编写代码来解析它,而我所知道的任何模块都不能满足您的需要。@reblehen我添加了一些伪代码,可以解释您需要的过程。谢谢,我将尝试遵循,并希望能使其工作。我创建了一个简单的逐行读取,并使用参数和startswith()将其附加到上一个,它完成了这项工作。然而,原始CSV解析不正确,但您的答案是正确的。您能在CSV文件中为您在示例中使用的三个条目添加实际数据吗?对不起,是机密的。您能在CSV文件中为您在示例中使用的三个条目添加实际数据吗?对不起,是机密的。