簡體   English   中英

當我用csv編寫代碼時,如何在Python中分隔列

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM