我有一个带分隔符$$$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文件,我不能一次在内存中读取所有这些,但是流处理是可以接受的。
答案 0 :(得分:2)
由于您不希望以表格格式存储信息,因此我认为不需要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'
答案 1 :(得分:1)
这应该做你想要的只是将它缩放到多行:
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