【问题标题】:Writing a text file error using python 3.x "with open" function使用 python 3.x "with open" 函数写入文本文件错误
【发布时间】:2018-06-12 19:34:09
【问题描述】:

我正在编写一个文本文件,其中包含我使用 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 功能。您的建议将不胜感激。有什么建议么?

【问题讨论】:

  • 我收到TypeError: unsupported operand type(s) for +: 'float' and 'str'
  • 使用“your_string”.format()
  • 请在问题正文中发布您遇到的错误的全文。

标签: python python-3.x with-statement


【解决方案1】:

它与open() 及其上下文管理器无关,它与您的数据和不匹配类型的连接有关。您的示例应该引发不同的错误 - 我想您发布的错误源于某些 Pandas 结构。

您可以让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】:

    您的逻辑过于复杂。我强烈建议您使用元组列表或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')
    

    【讨论】:

      猜你喜欢
      • 2013-03-05
      • 1970-01-01
      • 2020-08-09
      • 1970-01-01
      • 2023-04-01
      • 2011-06-25
      • 2019-11-01
      • 2020-08-04
      • 1970-01-01
      相关资源
      最近更新 更多