代码之家  ›  专栏  ›  技术社区  ›  user7852656

使用python 3.x“with open”函数写入文本文件时出错

  •  -1
  • user7852656  · 技术社区  · 6 年前

    我正在编写一个文本文件,其中包含一些使用Python分析的数据。我遇到一些错误信息。下面是我的代码。

    sixteen=0.1
    fifteen=0.3
    fourteen=-.4
    fourteen_revised=1
    thirteen=2
    
    with open('TMV_AVD.txt','w') as f:
        f. write('16+',sixteen+'\n','15+', fifteen+'\n','14+',\
                 fourteen+'\n','14-',fourteen_revised+'\n', '13-', thirteen)
    

    我想要的文本文件如下

    16+,0.1
    15+,0.3
    14+,-.4
    14-,1
    13-,2
    

    我得到的错误消息如下。

    ufunc 'add' did not contain a loop with signature matching types dtype('<U32') dtype('<U32') dtype('<U32').
    

    我以为我明白了 with open 功能。非常感谢您的建议。有什么建议吗?

    2 回复  |  直到 6 年前
        1
  •  2
  •   zwer    6 年前

    这与 open() 以及它的上下文管理器,它与数据和不匹配类型的连接有关。您的示例tho应该抛出一个不同的错误-我想您发布的错误是由一些熊猫结构引起的。

    你可以让 str.format() 尝试将数据连接为:

    with open('TMV_AVD.txt', 'w') as f:
        f.write('16+,{}\n15+,{}\n14+,{}\n14-,{}\n13-,{}'.format(sixteen, fifteen, fourteen,
                                                                fourteen_revised, thirteen))
    

    或者,如果使用python 3.6+可以直接构建 F字符串 以下内容:

    f.write(f"16+,{sixteen}\n15+,{fifteen}\n14+,{fourteen}\n14-,{fourteen_revised}\n13-,{thirteen}")
    

    或者,在连接之前必须手动将数据转换为正确的格式。

        2
  •  1
  •   jpp    6 年前

    你的逻辑太复杂了。我强烈建议您使用元组列表或 OrderedDict 存储变量。然后用一个简单的 for 循环:

    d = [('sixteen', ('16+', '0.1')),
         ('fifteen', ('15+', '0.3')),
         ('fourteen', ('14+', '-.4')),
         ('fourteen_revised', ('14-', '1')),
         ('thirteen', ('13-', '2'))]
    
    with open('TMV_AVD.txt', 'w') as f:
        for _, vals in d:
            f.write(','.join(vals)+'\n')