Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/fortran/2.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 CSV阅读器,CSV格式_Python_Excel_Csv - Fatal编程技术网

Python 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.| ----------------------

我有一个CSV,在视觉上看起来没有损坏。其中一列包含完整的电子邮件以及随后添加的逗号。格式类似于:

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文件中为您在示例中使用的三个条目添加实际数据吗?对不起,是机密的。