Создать строку с повторяющимся фрагментом, используя списки - PullRequest
0 голосов
/ 29 августа 2018

Я ищу элегантный способ добиться следующего:

У меня есть список (размер динамический, зависит от исходного файла) имен столбцов:

columns = ['col1', 'col2', 'col3']

и список размеров столбцов:

leng = [20, 30, 15]

и я хочу получить строку:

a = 'CREATE TABLE dbo.table
     (
      [col1] varchar(20)
     ,[col2] varchar(30)
     ,[col3] varchar(15)
     )'

Я могу сгенерировать это, используя:

a = 'CREATE TABLE dbo.table\n(\n('

for i in range(len(columns)):
    a = a + '[' + col[i] + '] varchar(' + str(leng[i]) + ')\n'

a = a + ')'

print(a)

Интересно, можно ли заменить часть с именами столбцов, используя функцию форматирования, или что-то более элегантное, чем просто цикл for.

Спасибо!

Ответы [ 2 ]

0 голосов
/ 29 августа 2018

Используйте zip , чтобы соединить столбцы и их длину параллельно.

a = ('CREATE TABLE dbo.table (' 
     + ', '.join(['[{}] varchar({})'.format(col, n) 
                  for col, n in zip(columns, leng)])
     + ')'
     )

>>> a
'CREATE TABLE dbo.table ([col1] varchar(20), [col2] varchar(30), [col3] varchar(15))'
0 голосов
/ 29 августа 2018

Использование str.join и str.format

Ex:

columns = ['col1', 'col2', 'col3']
leng = [20, 30, 15]

sampleStr = """CREATE TABLE dbo.table
     (
      {}
     )"""

print( sampleStr.format(",".join(["[{}] varchar({})".format(i, j) for i,j in zip(columns, leng)])) )

Выход:

CREATE TABLE dbo.table
     (
      [col1] varchar(20),[col2] varchar(30),[col3] varchar(15)
     )
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...