我需要向磁盘写入一串字符,其中包含用于分隔字段的 chr(1)
字符。最终我需要使用 read_csv
()` 在 Pandas 中打开这个文件(希望使用 C 解析器,尽管现在有点相关)。
我的数据以字节形式存储在内存中:
> 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')
我得到一个包含多行和 1 列的数据框(即没有字段分割)。
更新
with open('my_file', 'wb') as f:
f.write(data)
然后:
pd.read_csv('my_file', sep='\x01')
我还得到了一个包含多行和 1 列的数据框(即没有字段分割)。
最佳答案
如果需要写入二进制字符/字节,还需要以二进制模式打开,即open('foo.csv', 'wb')
,然后只写入数据(因为它已经是 bytes
类型了)。
# assuming isinstance(data, bytes) is True
with open('foo.csv', 'wb') as f:
f.write(data)
假设文件写入正确,您应该能够像这样读取它。不管怎样,为了你的缘故,我现在安装了 pandas,如果我尝试做你想做的事情,就会发生以下情况:
>>> 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)
请注意,所有值都是您所期望的。
关于python - 将包含\x01 字符的字符串保存到磁盘,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25254847/