![](/img/trans.png)
[英]How do I write to a CSV with the data ending up in separate columns (currently using arcpy in python 2.7)
[英]When I write in csv how do I separate columns in Python
我的代碼是
import pymysql
conn=pymysql.connect(host=.................)
curs=conn.cursor()
import csv
f=open('./kospilist.csv','r')
data=f.readlines()
data_kp=[]
for i in data:
data_kp.append(i[:-1])
c = csv.writer(open("./test_b.csv","wb"))
def exportFunc():
result=[]
for i in range(0,len(data_kp)):
xp="select date from " + data_kp[i] + " where price is null"
curs.execute(xp)
result= curs.fetchall()
for row in result:
c.writerow(data_kp[i])
c.writerow(row)
c.writerow('\n')
exportFunc()
data_kp正在讀取表名,表名是這樣的(字符串,例如:a000010)我從這里收集表名。 然后,執行並獲得結果。
我的期望是
(不是3列。有2000個表)
我以為我的代碼接近答案了……但是它沒有用。我的工作差不多完成了,但是我無法完成這一部分。 我用谷歌搜索了將近10個小時..我不知道如何..請幫助
我認為這部分有問題
for row in result:
c.writerow(data_kp[i])
c.writerow(row)
csvwriter.writerow
方法允許您在輸出csv
文件中寫一行 。 這意味着一旦調用了writerow
方法,該行即被寫入,您將無法返回。 當您編寫代碼時:
for row in result:
c.writerow(data_kp[i])
c.writerow(row)
你是說:
“對於每個結果,寫一條包含
data_kp[i]
的行,然后寫一條包含row
。”
這樣,一切都將垂直寫入,而data_kp[i]
和row
交替。
令人驚訝的是,這並不是我們從您的實際輸出中獲得的。 我認為您已經更改了某些內容。 像這樣:
c.writerow(data_kp[i])
for row in result:
c.writerow(row)
顯然,這還不能完全解決您的問題:表名沒有正確顯示(每列一個字符),並且它們不是並排的。 因此,這里有兩個問題:
1.在一個單元格中獲取表名稱,而不進行拆分
首先,讓我們看一下有關csvwriter
的文檔:
行必須是Writer對象的字符串或數字的可迭代項
但是您的data_kp[i]
是一個String
,而不是一個“可迭代的String
”。 這行不通! 但是您也沒有任何錯誤,為什么? 這是因為python中的String
本身可能被視為String
的可迭代對象。 自己嘗試:
for char in "abcde":
print(char)
現在,您可能已經了解了如何使這些工作正常進行:
# Give an Iterable containing only data_kp[i]
c.writerow([data_kp[i]])
現在,您的表名僅顯示在1個單元格中! 但是我們還有另一個問題...
2.獲取並排顯示的表名
在這里,這是代碼邏輯中的問題。 您正在瀏覽表名稱,寫包含它們的行,並希望它們並排寫入並獲得日期列!
您的代碼需要重新考慮一下,因為csvwriter
並非用於編寫列,而是用於編寫行。 然后,我們將使用itertools
模塊的zip_longest
函數。 有人會問我為什么不使用Python的zip
內置函數:這是因為據說列的大小不相等,並且一旦到達最短列表的末尾, zip
函數就會停止!
import itertools
c = csv.writer(open("./test_b.csv","wb"))
# each entry of this list will contain a column for your csv file
data_columns = []
def exportFunc():
result=[]
for i in range(0,len(data_kp)):
xp="select date from " + data_kp[i] + " where price is null"
curs.execute(xp)
result= curs.fetchall()
# each column starts with the name of the table
data_columns.append([data_kp[i]] + list(result))
# the * operator explode the list into arguments for the zip function
ziped_columns = itertools.zip_longest(*data_columns, fillvalue=" ")
csvwriter.writerows(ziped_columns)
注意:此處提供的代碼未經測試,可能包含錯誤。 但是,您應該能夠(通過使用我提供的文檔)對其進行修復,以使其起作用! 祝好運 :)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.