簡體   English   中英

Python3:編寫csv文件

[英]Python3: writing csv files

我試圖在Windows計算機上使用Python 3.2來編寫一個簡單的CSV文件,但是我沒有運氣。 Python 3.2csv模塊文檔

>>> import csv
>>> spamWriter = csv.writer(open('eggs.csv', 'w'), delimiter=' ',
...                         quotechar='|', quoting=csv.QUOTE_MINIMAL)
>>> spamWriter.writerow(['Spam'] * 5 + ['Baked Beans'])
>>> spamWriter.writerow(['Spam', 'Lovely Spam', 'Wonderful Spam'])

生成一個文件,每行由字節序列\\r\\r\\n終止,所以當你用例如MS Excel打開它時,看起來每行都有一個額外的空行。 這不是“CSV文件”。

注意,如果我在Python 3.2中嘗試Python 2.7相同示例 (對於文件模式,其中最大的區別是'w''wb' ),當我嘗試spamWriter.writerow時出現錯誤:

回溯(最近一次調用最后一次):TypeError中的文件“”,第1行:'str'不支持緩沖區接口

如何在Windows計算機上從Python 3.2編寫簡單的CSV文件?

文檔說你應該使用open('eggs.csv', 'w', newline='')

http://docs.python.org/py3k/library/csv.html#id2

這適用於Python 2和Python 3:

if sys.version_info >= (3,0,0):
    f = open(filename, 'w', newline='')
else:
    f = open(filename, 'wb')

作為記錄在一個腳注

csv.writer(csvfile, dialect='excel', **fmtparams)

如果csvfile是文件對象,則應使用newline =''打開它。

如果未指定newline ='',則不會正確解釋嵌入在引用字段中的換行符,並且在寫入時使用\\ r \\ n linendings的平台上將添加額外的\\ r \\ n。 指定newline =''應始終是安全的,因為csv模塊執行自己的(通用)換行處理。

以下變體適用於Linux和Windows:

spamWriter = csv.writer(open('eggs.csv', 'wb'), delimiter=' ', quotechar='|',
                        quoting=csv.QUOTE_MINIMAL, newline='')
spamWriter.writerow(['Spam'] * 5 + ['Baked Beans'])
spamWriter.writerow(['Spam', 'Lovely Spam', 'Wonderful Spam'])

要直接回答您的問題,您應該能夠使用lineterminator格式參數:

...所以修改這一行應該有效(未經測試):

>>> spamWriter = csv.writer(open('eggs.csv', 'w'), delimiter=' ',
...                         quotechar='|', quoting=csv.QUOTE_MINIMAL, lineterminator='\n')

至於為什么這個例子沒有開箱即用,看起來像是一個bug。

[對於Python 2.x]這個spamWriter的實現對我有用......

with open('assignmentresults.csv', 'wb') as csvfile:
  spamwriter = csv.writer(csvfile, delimiter=',', quotechar='|', quoting=csv.QUOTE_MINIMAL)
  spamwriter.writerow(["Hullo", "World"])

當我將我的一個代碼從Python2.6.6移動到python3.4.3時,我解決了這個錯誤

Python2.6.6(我正在嘗試對我的csvfile進行一些混淆)

with open( os.path.join(path, name) , 'r') as mycsvfile:
writer = csv.writer(open(newFilename, 'w'))

以上與python2.6.6配合得很好,但是在python3.4.3上沒有用,因為當我試圖運行python3文件時,我得到了一些utf-8 unicode錯誤,所以我做了以下修改Python3.4.4

import codecs
with codecs.open(os.path.join(path, name) , 'r', encoding='ISO-8859-1') as mycsvfile:
writer = csv.writer(open(newFilename, 'w'))

就是這樣,我的代碼現在工作正常,基本上python3沒有考慮一些unicode,我們需要使用編解碼器導入使其工作,希望它有幫助..

暫無
暫無

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

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