我需要将包含chr(1)
个字符的字符串写入磁盘以分隔字段。最后我需要在Pandas中用read_csv
()`打开这个文件(希望使用C-parser,尽管现在这有点相关)。
我的数据以字节存储在内存中:
> data?
Type: bytes
String form: b'foo\x01302.0\x011407339259000\nbar\x01206.0\x011407339259230\n < .. >
在上面的示例中,前两行是:
foo 102.0 1407339259000
bar 206.0 1407339259230
如何在Python 3中保存这个字节流,以便以后可以在Pandas中打开它:
read_csv('foo.csv',sep='\x01')
我尝试过:
with open('foo.csv', 'w') as f:
f.write(data.decode(encoding='ascii'))
没有运气。如果我稍后尝试使用以下命令打开文件:
pd.read_csv('my_file', sep='\x01')
我得到一个包含多行和一列的数据帧(即没有字段分割)。
with open('my_file', 'wb') as f:
f.write(data)
然后:
pd.read_csv('my_file', sep='\x01')
我还得到一个包含多行和一列的数据帧(即没有字段分割)。
答案 0 :(得分:3)
如果你有二进制字符/字节需要写,你还需要打开二进制模式,即open('foo.csv', 'wb')
,然后只需写入数据(因为它已经是类型bytes
)。 / p>
# assuming isinstance(data, bytes) is True
with open('foo.csv', 'wb') as f:
f.write(data)
假设文件写得正确,您应该能够像这样阅读。无论如何,为了你的缘故,我现在安装了大熊猫,如果我想做你想做的事情就会发生这种情况:
>>> with open('dummy.csv', 'wb') as f:
... f.write(b'foo\x01302.0\x011407339259000\nbar\x01206.0\x011407339259230\n')
...
48
>>> import pandas
>>> foo = pandas.read_csv('dummy.csv', sep='\x01')
>>> foo.keys()
Index(['foo', '302.0', '1407339259000'], dtype='object')
>>> foo.values
array([['bar', 206.0, 1407339259230]], dtype=object)
请注意,所有值都是您所期望的。