簡體   English   中英

Python CSV編寫器在空的第一行添加引號,但不添加后續行

[英]Python csv writer adds quotes on empty first line, but not subsequent lines

我正在嘗試使用python的csv標准庫模塊來生成逗號分隔值(csv)文件。

不允許第一行為空白。 更煩人的是,它將第一行與其他行區別對待,因此一個空列表在一種情況下會給出一個空字符串(“”),然后是一個空行:

import csv
import io

def make_csv(rows):
  with io.StringIO(newline='') as sout:
    writer = csv.writer(sout, quoting=csv.QUOTE_MINIMAL)
    writer.writerows(rows)
    return sout.getvalue()

給定以上定義,解釋器會話可能類似於:

>>> make_csv([[''], ['']]) # (only the) first line has quoted empty string
'""\r\n\r\n'

>>> make_csv([['A'], ['A']]) # expected: same input row, same output row
'A\r\nA\r\n'

為什么用引號引起的空字符串僅出現在第一行? 有什么辦法可以阻止它,或者至少獲得更一致的行為?


更新 :這是2017年12月報告為https://bugs.python.org/issue32255的錯誤,並通過提交https://github.com/python/cpython/commit/2001900b0c02a397d8cf1d776a7cc7fcb2a463e3解決,該錯誤已包含在3.6中。 5發布

您可以通過設置其他引用策略來強制csv編寫器引用空字符串。 QUOTE_ALLQUOTE_NONNUMERIC都將執行您想要的操作:

def make_csv(rows):
  with io.StringIO(newline='') as sout:
    writer = csv.writer(sout, quoting=csv.QUOTE_NONNUMERIC)
    writer.writerows(rows)
    return sout.getvalue()
>>> make_csv([[''], ['']])
'""\r\n""\r\n'

我不知道為什么默認策略將第一行與其他行區別對待,但是我認為這是一個錯誤。 如果您嘗試在第二行未加引號的地方加載csv數據,則會注意到輸出與最初用於創建csv的輸入不同:

>>> data = [[''], ['']]
>>> text = make_csv(data)
>>> text
'""\r\n\r\n'
>>> f = io.StringIO(text)
>>> reader = csv.reader(f)
>>> list(reader)
[[''], []]

暫無
暫無

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

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