Hei*_*inz 3 python csv python-2.7
我使用psycopg2连接postgresql和python,这是我的脚本,
import sys
#set up psycopg2 environment
import psycopg2
#driving_distance module
query = """
select *
from driving_distance ($$
select
gid as id,
start_id::int4 as source,
end_id::int4 as target,
shape_leng::double precision as cost
from network
$$, %s, %s, %s, %s
)
"""
#make connection between python and postgresql
conn = psycopg2.connect("dbname = 'TC_routing' user = 'postgres' host = 'localhost' password = '****'")
cur = conn.cursor()
#count rows in the table
cur.execute("select count(*) from network")
result = cur.fetchone()
k = result[0] + 1
#run loops
rs = []
i = 1
while i <= k:
cur.execute(query, (i, 1000000, False, False))
rs.append(cur.fetchall())
i = i + 1
h = 0
ars = []
element = list(rs)
while h <= 15:
rp = element[0][h][2]
ars.append(rp)
h = h + 1
print ars
conn.close()
Run Code Online (Sandbox Code Playgroud)
输出很好,
[0.0, 11810.7956476379, 16018.6818979217, 18192.3576530232, 21507.7366792666, 25819.1955059578, 26331.2523709618, 49447.0908955008, 28807.7871013087, 39670.8579371438, 42723.0239515299, 38719.7320396044, 38265.4435766971, 40744.8813155033, 43770.2158657742, 46224.8748774639]
Run Code Online (Sandbox Code Playgroud)
但如果我在下面添加一些行以将结果导出到csv文件,我收到此错误,
import csv
with open('test.csv', 'wb') as f:
writer = csv.writer(f, delimiter = ',')
for row in ars:
writer.writerow(row)
Run Code Online (Sandbox Code Playgroud)
[0.0, 11810.7956476379, 16018.6818979217, 18192.3576530232, 21507.7366792666, 25819.1955059578,
26331.2523709618, 49447.0908955008, 28807.7871013087, 39670.8579371438, 42723.0239515299, 38719.7320396044, 38265.4435766971, 40744.8813155033, 43770.2158657742, 46224.8748774639]
Traceback (most recent call last):
File "C:/Users/Heinz/Desktop/python_test/distMatrix_test.py", line 54, in <module>
writer.writerow(row)
Error: sequence expected
Run Code Online (Sandbox Code Playgroud)
如何解决这个问题?
我在Windows 8.1 x64下使用python 2.7.6和pyscripter.随便给我任何建议,非常感谢!
import csv
with open('test.csv', 'wb') as f:
writer = csv.writer(f, delimiter = ',')
for row in ars:
writer.writerow(row)
Run Code Online (Sandbox Code Playgroud)
ars只是一个单一的清单.所以你的for循环不会从中提取一行ars.它从ars列表中获取一个元素并尝试将其写为一行.
尝试替换它
for row in ars:
writer.writerow([row])
Run Code Online (Sandbox Code Playgroud)
这会将每个元素写成csv文件中的一行.
或者如果你想在输出中有一行,那么就不要使用for循环,而是使用
writer.writerow(ars)
Run Code Online (Sandbox Code Playgroud)