从词典/列表中删除最后一个逗号

时间:2014-10-20 19:46:29

标签: python dictionary

我正在尝试使用python生成一个在redshift中生成卸载命令的脚本。我不是专业的Python程序员。我需要在哪里可以为卸载列表生成所有列。如果列具有特定名称,我需要替换为函数。我面临的挑战是将“,”添加到字典中的最后一项。有没有办法可以避免使用最后一个逗号?任何帮助将不胜感激。

import psycopg2 from psycopg2.extras 
import RealDictCursor 

try: 
    conn = psycopg2.connect("dbname='test' port='5439' user='scott' host='something.redshift.amazonaws.com' password='tiger'"); 
except: 
    print "Unable to connect to the database"

conn.cursor_factory = RealDictCursor 
cur = conn.cursor()
conn.set_isolation_level( psycopg2.extensions.ISOLATION_LEVEL_AUTOCOMMIT )

try: 
    cur.execute("SELECT column from pg_table_def where schema_name='myschema' and table_name ='tab1' " ); 
except: 
    print "Unable to execute select statement from the database!"

result = cur.fetchall()   
print "unload mychema.tab1 (select " 

for row in result: 
    for key,value in row.items(): 
        print "%s,"%(value)

print ") AWS Credentials here on..."

conn.close()

2 个答案:

答案 0 :(得分:5)

在每行的值列表中使用join函数:

print ",".join(row.values())

简单地说,在一个我们可以认为是“胶水”的字符串上调用join函数,并将“pieces”列表作为其参数。结果是由“胶水”“串在一起”的一串“碎片”。例如:

>>> glue = "+"
>>> pieces = ["a", "b", "c"]
>>> glue.join(pieces) 
"a+b+c"

(因为row.values()返回一个列表,你实际上并不需要理解,所以它比我最初写的更简单)

答案 1 :(得分:0)

事实上,这效果更好。

columns = []
for row in result:
        if (row['column_name'] == 'mycol1') or (row['column_name'] == 'mycol2') :
           columns.append("func_sha1(" + row['column_name'] + "||" + salt +")")
        else:
           columns.append(row['column_name'])

print selstr + ",".join(columns)+" ) TO s3://"

感谢您的帮助,Jon