【问题标题】:File has two parts - 1st is text 2nd is CSV. How to parse only the CSV part with python文件有两个部分 - 第一个是文本第二个是 CSV。如何使用 python 仅解析 CSV 部分
【发布时间】:2019-05-31 22:17:02
【问题描述】:

我有一个文本文件,其中包含前 20 行左右的文本,然后是 CSV 数据。文本部分中的某些文本包含逗号,因此尝试 csv.reader 或 csv.dictreader 效果不佳。

我想跳过文本部分,然后才开始解析 CSV 数据。

除了使用 csv.reader/csv.dictreader 并遍历返回的行(由于文本中的逗号而不起作用)或读取文件的指令之外,搜索不会产生太多逐行并使用“,”作为分隔符分割行。

后者在一定程度上起作用,但它产生的是字符串,而不是数字。我可以将字符串转换为数字,但我希望有一种简单的方法可以使用 csv 或 numpy 库来做到这一点。

根据要求 - 示例数据:

这是第一行。这只是要跳过的文本。 第一行并不总是有逗号 - 也许它在第三行 还是没有逗号,还是有? 是的,有。它又来了。 等等 有更多的线路,但当你到达时它们最终会停止 EndOfHeader 1,2,3,4,5 8,9,10,11,12 3、6、9、12、15

感谢您的帮助。

编辑#2 建议的答案给出了以下链接,标题为Read file from line 2... 这就是我正在寻找的东西,但我希望能够通读这些行,直到找到“EndOfHeader”,然后调用 CSV 库来处理文件的其余部分。 saimadhu.polamuri 的回复是我尝试过的一部分,特别是

with open(filename , 'r') as f:
    first_line = f.readline()
    for line in f:
            #test if line equals EndOfHeader. If true then parse as CSV

但这就是它的不同之处 - 从现在开始,我看不出如何让 CSV 处理数据。

【问题讨论】:

  • 那么您如何知道文本何时结束而 CSV 何时开始?
  • 请提供样本数据或原件。您将需要在文本和 csv 数据之间找到明确的分隔,这可以像空行或句点或数字一样简单,或者测试每一行以查看它是否是 csv 可读的,然后检查它是否真的是你的想要。
  • 由于“文本”是一个包含“csv”作为子集的分类,我们需要一个明确的问题定义才能提供帮助。
  • @blorgbeard - 我可以识别一个特定的短语,例如“EndOfHeader”
  • 5 分钟超时 FTF。对于 blorgbeard 和 jab - 我可以识别一个特定的短语,例如“EndOfHeader”,它本身就有整行。之后,下一行是 CSV 数据的开始。对 Prune - 你的回复毫无帮助:你不知道我的代码的第一件事,但你会建议不诚实?您可能不会想到,也许我现在无法访问我的代码(它正在工作中)并且我这样发布,希望也许有人理解我在问什么或遇到过同样的问题之前的事情,不需要任何代码即可回复。

标签: python csv


【解决方案1】:

感谢@Mike 的建议,代码实际上相当简单。

with open('data.csv') as f:                # open the file
    for i in range(7):                     # Loop over first 7 lines 
        str=f.readline()                   # just read them. Could also do f.next()
    r = csv.reader(f, delimiter=',')       # Now pass the file handle to a csv reader
    for row in r:                          # and loop over the resulting rows
        print(row)                         # Print the row. Or do something else.

在我的实际代码中,它将搜索 EndOfHeader 行并使用它来决定从哪里开始解析 CSV

我将其发布为答案,因为这个问题应该重复并没有明确考虑文件句柄的问题以及如何将其传递给 CSV 阅读器,因此它可能对其他人有所帮助。

感谢所有花时间提供帮助的人。

【讨论】:

    猜你喜欢
    • 2021-10-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-21
    相关资源
    最近更新 更多