文件有两个部分 - 第一个是文本,第二个是CSV.如何使用python仅解析CSV部分



>我有一个文本文件,其中包含前 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 建议的答案给出了以下链接,标题为从第 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 处理数据。

感谢@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 阅读器,因此它可能会帮助其他人。

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

最新更新