【发布时间】: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 - 你的回复毫无帮助:你不知道我的代码的第一件事,但你会建议不诚实?您可能不会想到,也许我现在无法访问我的代码(它正在工作中)并且我这样发布,希望也许有人理解我在问什么或遇到过同样的问题之前的事情,不需要任何代码即可回复。