将带有\ x01字符的字符串保存到磁盘

时间:2014-08-12 01:28:44

标签: python string python-3.x pandas

我需要将包含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')

我还得到一个包含多行和一列的数据帧(即没有字段分割)。

1 个答案:

答案 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)

请注意,所有值都是您所期望的。