python - 将包含\x01 字符的字符串保存到磁盘

标签 python string python-3.x pandas

我需要向磁盘写入一串字符,其中包含用于分隔字段的 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/

相关文章:

python - 使用 opencv-2.4.2 安装 pyopencv 2.1.0 时遇到错误

python - 如何使用python从git存储库下载单个文件

python - python和tcl之间发送和接收数据

python - 从脚本中将 python 控制台输出作为电子邮件发送的最佳方法是什么?

python - 存储长字符串资源的最 Pythonic/Django 风格的方法是什么?

c# - 如何在 C# 中安全地嵌入静态字符串( key )?

python - Numpy 字符串数组用字符串填充

python - 为什么列表理解比附加到列表要快得多?

python - 将列表与列表字典进行比较的最快方法

python - 为什么 urllib2.urlopen 打不开 "http://localhost/new-post#comment-29"这样的页面?