Почему я получаю скобки при записи текста в файл?

1
for node in tree.getiterator('TARGET'):
    tgt_name = node.attrib.get('NAME')
    print map_name, ",", "TARGET" , ", " , tgt_name
    tgt_name_str = map_name, ",", "TARGET" , ", " , tgt_name
    writer.writelines (str(tgt_name_str))
    writer.writelines('\n')

Вот содержимое выходного файла:

('m_myname', ',', 'TARGET', ', ', 'mytable')

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

Теги:
file
file-io

5 ответов

3

Эта строка:

tgt_name_str = map_name, ",", "TARGET" , ", " , tgt_name

создает кортеж, а строковое представление кортежа заключено в круглые скобки. Чтобы сделать то, что вы хотите, используйте это:

writer.write("{0}, TARGET, {1}\n".format(map_name, tgt_name))
  • 0
    +1 за не вслепую , используя ''.join когда str.format является более целесообразным.
1

Это связано с тем, что при выполнении следующей строки:

tgt_name_str = map_name, ",", "TARGET" , ", " , tgt_name

tgt_name_str будет содержать кортеж, поэтому, когда вы вызываете str (tgt_name_str), он дает вам данные с paranthesis.

Чтобы проверить это, вы можете просто добавить оператор с типом печати (tgt_name_str).

Поэтому, чтобы исправить это, вы можете использовать join:

tgt_name_str = ''.join([map_name, ",", "TARGET" , ", " , tgt_name])

ИЛИ:

for node in tree.getiterator('TARGET'):
    tgt_name = node.attrib.get('NAME')
    writer.writelines (''.join([map_name, ",", "TARGET" , ", " , tgt_name, '\n']))
0

потому что tgt_name_str = map_name, ",", "TARGET", ", ", tgt_name является кортежем.

заменить на:

tgt_name_str = ''.join([map_name, ",", "TARGET" , ", " , tgt_name])
# or
tgt_name_str = map_name + "," + "TARGET" + ", " + tgt_name
0

tgt_name_str = map_name, ",", "TARGET", ", ", tgt_name создает кортеж, строковое представление которого окружено скобками.

Другие предложили ''.join([map_name, ",", "TARGET", ", ", tgt_name]), но вы могли бы сделать ', '.join([map_name, "TARGET", tgt_name]). Соединение будет помещать ',' между элементами поставляемого массива. Обратите внимание, что это может отличаться от вашего желаемого результата, как в вашем коде, после первой запятой нет пробела, но после второго. Это намеренно?

0

Если вы присваиваете несколько значений одной переменной, как в:

tgt_name_str = map_name, ",", "TARGET" , ", " , tgt_name

Python будет неявно преобразовывать это в кортеж. Это эквивалентно написанию:

tgt_name_str = (map_name, ",", "TARGET" , ", " , tgt_name)

и это то, что передает str (tgt_name_str).

Возможно, вы захотите объединить значения:

tgt_name_str = map_name + "," + "TARGET" + ", " + tgt_name

используйте '.join или создайте свой собственный шаблон формата, чтобы получить желаемый результат.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню