[英]Something not quite right with application of CSV Module in Python
我有一個試圖寫入數據具有以下格式的文件的字符串:
100.10 89.7 1,891.43 123.99
我想轉換為以下格式:
"100.10","89.7","1,891.43","123.99",
但是,使用以下代碼(其中文件filepath
在代碼中之前定義為文本文件位置,而data2
是字符串:
csv.register_dialect('sas', delimiter=',',quoting=csv.QUOTE_ALL)
with open(filepath, "w") as f:
writer = csv.writer(f, dialect='sas')
writer.writerow(data2)
我得到以下輸出:
"1","0","0",".",1,"0","8","9",".","7","1","8","9","1",".","4","3","1","2","3",".","9","9",
我想用引號掩蓋數據中可能出現的逗號,我在做什么錯呢?
您將一個字符串傳遞給writerow
,因此它遍歷字符,在每個字符之間放置一個逗號。 最小修復是:
writer.writerow(data2.split(" "))
另外,將數據保存在列表中可能比將字符串放在首位更方便!
my_string = '100.10 89.7 1891.43 123.99'
string_list = my_string.split()
然后string_list返回:
['100.10', '89.7', '1891.43', '123.99']
當您這樣做時:
csv.register_dialect('sas', delimiter=',',quoting=csv.QUOTE_ALL)
with open(filepath, "w") as f:
writer = csv.writer(f, dialect='sas')
writer.writerow(data2)
它按字符分割data2,因此當您讀回它時,會將每個字符讀為單獨的列。 您可能想要這樣:
csv.register_dialect('sas', delimiter=',',quoting=csv.QUOTE_ALL)
with open(filepath, "w") as f:
writer = csv.writer(f, dialect='sas')
writer.writerow(data2.split())
編輯
因此,我可能會建議使用其他方法,而忘記注冊方言,這對我而言始終是有問題的。
string_list = ['100.10', '89.7', '1,891.43', '123.99']
with open(filepath, 'w') as f:
writer = csv.writer(f, quoting=csv.QUOTE_ALL)
writer.writerow(string_list)
with open(filepath, 'r') as f:
print f.read()
對我來說:
"100.10","89.7","1,891.43","123.99"
和
with open(filepath, 'rU') as f:
reader = csv.reader(f, quoting=csv.QUOTE_ALL)
data = next(reader) # next(reader) gives us the iterable's first row.
data
收益:
['100.10', '89.7', '1,891.43', '123.99']
因此,在編寫時,請執行以下操作:
with open(filepath, "w") as f:
writer = csv.writer(f, quoting=csv.QUOTE_ALL)
writer.writerow(data2.split()) # *write here
您可能打算寫一堆行,因此請確保遍歷要寫的行,或者使用writerows
而不是writerow
。 請參閱文檔中的示例。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.