【问题标题】:Writing a string to a text file and then an array using numpy savetxt将字符串写入文本文件,然后使用 numpy savetxt 写入数组
【发布时间】:2016-02-11 00:38:23
【问题描述】:

我目前正在尝试制作一个程序,该程序制作一个第一行为“s16”的文本文件,之后它应该用数字填充下一行。我当前的代码如下所示:

import os
import numpy as np
file = open('workfile.txt','wb')
file.write('s16\n')
array=np.eye(4)
np.savetxt(file, array, fmt='%.3f', newline=os.linesep)  

但这会在file.write('s16\n') 处显示一个错误,因为我用“wb”打开了文件,这意味着我正在尝试写入字节,而“s16\n”是一个字符串。但是,如果我将 'wb' 更改为 'w' 则 np.savetxt(file, wut, fmt='%.3f', newline=os.linesep) 会因未处于 'wb' 模式而引发类似的错误。有什么办法可以调和这两者吗?谢谢!

【问题讨论】:

    标签: arrays string python-3.x numpy


    【解决方案1】:

    试试:

    file.write(b's16\n')
    

    在 Python3 中,默认的字符串类型是 unicode,所以你必须使用额外的 b 来标记字节字符串。

    savetxt(和load 对应)适用于字节字符串。所以你用'wb'打开文件是对的。

    检查savetxt 文档 - 我认为您可以给它标题和尾行(可能仍然需要b - 除非savetxt 进行转换)。

    【讨论】:

    • 这正是我想要的,谢谢!唯一的问题是 file.write(b's16\n') 似乎没有创建换行符,并且当 np.savetxt(file, array, fmt='%.3f', newline=os.linesep) 运行 's16 ' 与第一行或 np.eye(4) 位于同一行
    【解决方案2】:

    不是对您的问题的直接回答,但我希望它仍然可以帮助。

    我已经停止使用 numpy 来编写和加载文件,而是使用 pickle。 这个包比 numpy 更好地处理不同的数据类型和列表/数组。

    示例代码片段:

    import pickle
    f = open("myfile.txt", 'w')
    pickle.dump("My string", f)
    

    还可以打开文件进行只读或读写。我强烈推荐这个包。

    【讨论】:

    • savetxt 以常见的 CSV 格式写入文本。所以它的文件可以被其他程序读/写,包括电子表格。 pickle 是特定于 Python 的。
    猜你喜欢
    • 2014-06-02
    • 2011-08-18
    • 1970-01-01
    • 2018-11-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-06
    相关资源
    最近更新 更多