[英]Python3: writing csv files
我試圖在Windows計算機上使用Python 3.2來編寫一個簡單的CSV文件,但是我沒有運氣。 從Python 3.2的csv模塊文檔 :
>>> 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='')
這適用於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.