Почему я получаю скобки при записи текста в файл? - PullRequest
1 голос
/ 20 июня 2011
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')

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

Ответы [ 5 ]

3 голосов
/ 20 июня 2011

Эта строка:

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

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

writer.write("{0}, TARGET, {1}\n".format(map_name, tgt_name))
1 голос
/ 20 июня 2011

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

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

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

Чтобы проверить это, вы можете просто добавить выписку с типом печати (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 голосов
/ 20 июня 2011

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

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

0 голосов
/ 20 июня 2011

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

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

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

0 голосов
/ 20 июня 2011

, поскольку 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...