Ошибка записи текстового файла с помощью функции Python 3.x «с открытым» - PullRequest
0 голосов
/ 12 июня 2018

Я пишу текстовый файл с некоторыми из данных, которые я проанализировал, используя 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 ]

0 голосов
/ 12 июня 2018

Ваша логика слишком сложна.Я настоятельно рекомендую вам использовать список кортежей или 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')
0 голосов
/ 12 июня 2018

Это не имеет ничего общего с 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}")

Или вам придется вручную превратить ваши данные в правильныеформат до объединения.

...