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')
В приведенном выше скобках также написано как часть текстового файла, но я этого не делаю. Любая идея, как удалить эти скобки, записываемые в файл?
Эта строка:
tgt_name_str = map_name, ",", "TARGET" , ", " , tgt_name
создает кортеж, а строковое представление кортежа заключено в круглые скобки. Чтобы сделать то, что вы хотите, используйте это:
writer.write("{0}, TARGET, {1}\n".format(map_name, tgt_name))
Это связано с тем, что при выполнении следующей строки:
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']))
потому что 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
tgt_name_str = map_name, ",", "TARGET", ", ", tgt_name
создает кортеж, строковое представление которого окружено скобками.
Другие предложили ''.join([map_name, ",", "TARGET", ", ", tgt_name])
, но вы могли бы сделать ', '.join([map_name, "TARGET", tgt_name])
. Соединение будет помещать ',' между элементами поставляемого массива. Обратите внимание, что это может отличаться от вашего желаемого результата, как в вашем коде, после первой запятой нет пробела, но после второго. Это намеренно?
Если вы присваиваете несколько значений одной переменной, как в:
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 или создайте свой собственный шаблон формата, чтобы получить желаемый результат.
''.join
когдаstr.format
является более целесообразным.