我使用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')
答案 0 :(得分:2)
g.write(str(row[0]) + ',' + str(row[1]) + ',' + str(row[2]) + ',' + str(row[3]) + ', T,' + str(row[5]) + ',' + str(row[6]) + '\n')
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)
这会自动将迭代器整理成您指定的格式(逗号分隔,但如果您希望将其与其他内容分开,则可以更改某些参数。)因此您不必执行冗长的字符串级联。它看起来也更干净。