Мне нужно написать массив целых чисел в текстовый файл, но отформатированное решение добавляет запятую после каждого элемента, и я хотел бы избежать последнего.

Код выглядит так:

        with open(name, 'a+') as f:
           line = ['FOO ', description, '|Bar|']
           f.writelines(line)
           f.writelines("%d," % item for item in values)
           f.writelines('\n')

Каждая строка начинается с небольшого описания того, что содержится в массиве, а затем со списком целых чисел. Новые строки добавляются в цикл по мере их появления.

Вывод, который я получаю, выглядит примерно так:

Описание FOO | Бар | 274,549,549,824,824,824,824,824,794,765,765,736,736,736,736,736,

И я хотел бы, чтобы это выглядело так без последней запятой:

Описание FOO | Бар | 274,549,549,824,824,824,824,824,794,765,765,736,736,736,736,736

Мне не удалось найти решение, которое бы работало с writelines (), и мне нужно избегать длительной обработки в дополнительных циклах.

-1
TeilaRei 28 Авг 2017 в 16:03

4 ответа

Лучший ответ

Используйте join:

f.writelines(",".join(map(str,values)))

Обратите внимание, что values сначала отображается в список строк, а не чисел, с помощью map.

7
trincot 28 Авг 2017 в 13:06

Вы можете нарезать его с помощью приведенного ниже примера. Это всегда удалит последний символ.

line = ['FOO ', description, '|Bar|']
line = line[:-1]
f.writelines(line)
1
Gokturk 28 Авг 2017 в 13:08

Нарезка является наилучшим подходом и хорошо работает в любой ситуации, по крайней мере, в вашем случае.

    f.writelines(line[:-1])
0
Chetan_Vasudevan 28 Авг 2017 в 14:49

Вы можете использовать функцию печати здесь.

print(*values,sep=',',file=f)

Если вы используете python2, пожалуйста, импортируйте функцию печати.

from __future__ import print_function
0
Abhijith Asokan 28 Авг 2017 в 13:17