繁体   English   中英

熊猫:忽略新行作为read_csv中的分隔符

[英]Pandas: ignore new lines as separators in read_csv

我有一个带有定界符$$$Field$$$的输入字符串。 该字符串有一些行。 我需要返回字符串中所有项目的列表,仅用$$$Field$$$分隔。

在下面的示例中,我应该收到['Food', 'Fried\\nChicken', 'Banana']作为输出。 但是,似乎它也将换行符也解释为分隔符,所以我得到的是列表而不是列表。 如何忽略这些新行,以便重新获得列表?

import pandas as pd
from pandas.compat import StringIO

temp=u"""Food$$$Field$$$Fried
Chicken$$$Field$$$Banana"""
df = pd.read_csv(StringIO(temp), sep='\$\$\$Field\$\$\$',engine='python')
print (df)

我使用pandas的唯一原因是因为该字符串实际上是一个巨大的.csv文件,并且我一次无法读取所有这些内容,但是可以接受流式处理。

由于您不希望以表格格式存储信息,因此我认为不需要DataFrame。 相反,请分块读取字符串,并在每次遇到'$$$Field$$$'时产生缓冲区。

改编自https://stackoverflow.com/a/16260159/4410590

def myreadlines(f, newline):
    buf = ""
    while True:
        while newline in buf:
            pos = buf.index(newline)
            yield buf[:pos]
            buf = buf[pos + len(newline):]
        chunk = f.read(4096)
        if not chunk:
            yield buf
            break
        buf += chunk

然后调用该函数:

> for x in myreadlines(StringIO(temp), '$$$Field$$$'):
      print repr(x)

u'Food'
u'Fried\nChicken'
u'Banana'

好吧,这应该做您想要的,只是将其缩放到多行:

df = pd.DataFrame("""Food$$$Field$$$Fried
Chicken$$$Field$$$Banana""".split("$$$Field$$$")).T

print(df)

根据文本的存储位置(方式),您可以在列表理解中进行拆分:

df = pd.DataFrame(lines.split("$$$Field$$$") for line in lines).T

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM