使用python

时间:2015-05-28 13:16:45

标签: python postgresql

我使用pyhton 2.7来比较数据集。我调用select语句来从两个表中提取。 str(row[4])始终为空。我需要总是写一个" T"进入那一栏。

在我在下面的代码中使用的str(row[4])语句中有没有办法写入g.write

这是我的代码的一部分:

## This is used to connect to our database and run the sql statement.
def RunSQLStatement(sql):
    conn = psycopg2.connect(Connect2DB())
    cursor = conn.cursor()
    cursor.execute(sql)
    alias_data = cursor.fetchall()
    cursor.close()
    conn.close()
    return alias_data

def selectFoisp():
    with open(outTemp_file, 'w') as g:
        strGetDiffer = """SELECT c.foi_id, c.title, c.feat_type, c.feat_subtype, c.upd_type, p.foi_id, p.title
    FROM foisp c, foisp_prior p
    WHERE (c.foi_id = p.foi_id)
    AND (c.title <> p.title)"""

    extract_rows = RunSQLStatement(strGetDiffer)

    for row in extract_rows:
        g.write(str(row[0]) + ',' + str(row[1]) + ',' + str(row[2])  + ',' + str(row[3]) + ',' + str(row[4]) + ',' +  str(row[5]) + ',' + str(row[6]) + '\n')

2 个答案:

答案 0 :(得分:2)

g.write(str(row[0]) + ',' + str(row[1]) + ',' + str(row[2])  + ',' + str(row[3]) + ', T,' +  str(row[5]) + ',' + str(row[6]) + '\n')

format method

g.write("{0}, {1}, {2}, {3}, {4}, {5}, {6}\n".format(row[0], row[1], row[2], row[3], "T", row[5], row[6])

答案 1 :(得分:1)

如果它始终为空白,为什么不用str(row[4])替换'T'? (正如迈克尔所做的那样)

那说你应该能够在你的循环中直接操纵row[4]

for row in extract_rows:
    row[4] = 'T'
    g.write(str(row[0]) + ',' + str(row[1]) + ',' + str(row[2])  + ',' + str(row[3]) + ',' + str(row[4]) + ',' +  str(row[5]) + ',' + str(row[6]) + '\n')

此外,您应该考虑使用CSV模块:

import csv
writer = csv.writer(g)
for row in extract_rows:
    row[4] = 'T'
    writer.writerow(row)

这会自动将迭代器整理成您指定的格式(逗号分隔,但如果您希望将其与其他内容分开,则可以更改某些参数。)因此您不必执行冗长的字符串级联。它看起来也更干净。