簡體   English   中英

Python3避免在csv文件末尾加引號和多余的行

[英]Python3 avoid quoting and extra lines at the end of the csv file

我試圖根據先前創建和連接的列表內容創建CSV文件。 關鍵是我的所有行記錄都在每行的開頭和結尾都用雙引號引起來。 另外,在文件末尾,我得到了一條額外的白線。

碼:

with open('/tmp/'+filename,"w", newline='') as output:
            writer = csv.writer(output)
            for item in update_records:
                row = '{},{},{}'.format(item['field1'],item['field2'],item['field3'])
                #print(row)
                writer.writerow([row])               

        output.close()

電流輸出:

在此處輸入圖片說明

我努力了:

writer = csv.writer(output, quotechar='', quoting=csv.QUOTE_MINIMAL)

但是我收到如下錯誤:

如果啟用了報價,則必須設置quotechar

非常感謝您的支持。

這里是使用DictWriter的答案,但是基於數據結構的大量猜測工作。 甚至有更簡單的編寫方法,例如,將它們作為字典列表。

import csv

update_records = [
    {
        "field1": "field1",
        "field2": "en",
        "field3": "field3"
    },
    {
        "field1": "field1",
        "field2": "de",
        "field3": "field3"
    }
]

filename = "test.csv"

with open('/tmp/'+filename,"w", newline='') as output:
    # Define header, needed even if not written when using DictWriter
    header = ["field1", "field2", "field3"]
    writer = csv.DictWriter(output, fieldnames=header)
    # Optional write the header
    # writer.writeheader()
    for item in update_records:
        row = {}
        # Only provide the fields 1 to 1 that are present in the header.
        # There are plenty of cooler ways to do this, but hope this is clearer.
        for head in header:
            row[head] = item[head]
        # print(row)
        writer.writerow(row)

輸出是這樣的(/tmp/test.csv)(末尾有一個空行,但是不知道如何將其顯示為代碼的一部分,因此添加了EOF):

field1,en,field3
field1,de,field3

EOF

writerow應該將字段列表作為參數:

with open('/tmp/'+filename,"w", newline='') as output:
    writer = csv.writer(output)
    for item in update_records:
        row = [item['field1'],item['field2'],item['field3']]
        #print(row)
        writer.writerow(row)               

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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