Python 尝试将列表垂直写入.csv文件
我已经连接到数据库,我正在尝试执行一个简单的select命令并写入一个.csv文件。这就是我所拥有的Python 尝试将列表垂直写入.csv文件,python,csv,Python,Csv,我已经连接到数据库,我正在尝试执行一个简单的select命令并写入一个.csv文件。这就是我所拥有的 import pyodbc import csv print("Imported pyodbc") username = "****" # connection_string = "*Connection_string*" % username print("Before connection") # conn = pyodbc.connect(connection_string) conn
import pyodbc
import csv
print("Imported pyodbc")
username = "****"
# connection_string = "*Connection_string*" % username
print("Before connection")
# conn = pyodbc.connect(connection_string)
conn = pyodbc.connect("connection string")
print("Connection complete")
cursor = conn.cursor()
cursor.execute("SELECT * FROM (tablename) limit 10")
rows = list(cursor.fetchall())
for row in rows:
print(row)
with open('\\*link*\\test.csv','w', newline='') as out:
csv_out=csv.writer(out)
first_elements = [x[0] for x in rows]
print(first_elements)
for i in range(len(first_elements)):
print (first_elements[i])
temp=first_elements[i]
csv_out.writerow(temp)
csv_out.writerow('')
每一行是一个包含204个元素的元组,我试图只保存.csv文件中的第一个元素。我尝试使用csv.writeout(行[0])
,但它给出了一个错误:
csv_out.writerow(row)
_csv.Error: iterable expected, not int
我试图在writerow中转换为列表迭代器,但它给出了第一行元素
1 2 3 4 5
1 2 3 4 5
1 2 3 4 5
但我想要的是
1
2
3
4
5
谢谢大家! 您可以尝试
first_elements=[[x[0]]for x in rows]
来创建表示行而不是整数的iterable元素
编辑:正如Jean在评论中提到的,您可以将csv.out.writerow([row])作为替代解决方案。我不理解您的格式,但如果您遇到
int
错误,请尝试将int放入列表中:csv\u out.writerow([row])
尝试csv\u out.writerow([row])
;一个列表是可迭代的,一个int不是这个解决方案有效的,谢谢!但我不太明白那里发生了什么。{[[x[0]]表示行中的x]}与{[x[0]表示行中的x]}。第一个是列表的列表?第二个是整数列表?为什么第二个不起作用呢?csv.out.writerow
函数要求该行有一个iterable,因为csv行通常有多个值。因此,当它试图调用传递给函数的对象的\uuuu iter\uuu
属性时(在本例中为int),它抛出了一个错误。通过使用一个列表或另一个iterable(tuple,set,…),它可以迭代您传入的值,并使用您设置的定界符(或者我假设是这样)将它们写入一个文件,这在现在很有意义。谢谢你,发发慈悲吧