[英]How to get values with in a single string in a list without getting separated by commas in csv file using python?
[英]List to csv without commas in Python
我有以下問題。 我想將列表保存到 csv 中(在第一列中)。 請參見此處的示例:
import csv
mylist = ["Hallo", "der Pixer", "Glas", "Telefon", "Der Kühlschrank brach kaputt."]
def list_na_csv(file, mylist):
with open(file, "w", newline="") as csv_file:
csv_writer = csv.writer(csv_file)
csv_writer.writerows(mylist)
list_na_csv("example.csv", mylist)
你可以看到我有兩個問題:首先,每個字符后面都有逗號。 其次,我不知道如何使用一些編碼,例如 UTF-8 或 cp1250。 請問我該如何解決?
我試圖搜索類似的問題,但對我沒有任何幫助。 謝謝你。
你這里有兩個問題。
writerows
需要一個行列表,不同的說法是一個可迭代的列表。 由於字符串是可迭代的,因此您將每個單詞寫在不同的行中,每個字段一個字符。 如果你想要一行每個字段一個單詞,你應該使用writerow
csv_writer.writerow(mylist)
默認情況下,csv 模塊使用逗號作為分隔符(這是最常見的一種)。 但是 Excel 是一個麻煩:它希望分隔符是語言環境之一,在包括德國在內的許多西歐國家是分號 ( ;
)。 如果您想通過 Excel 輕松使用您的文件,您應該更改分隔符:
csv_writer = csv.writer(csv_file, delimiter=';')
編輯后,您需要第一列中的所有數據,每行一個元素。 這是一種腐爛的 csv 文件,因為它每條記錄只有一個值,沒有分隔符。 如果字段不能包含分號或換行符,則可以編寫一個純文本文件:
...
with open(file, "w", newline="") as csv_file:
for row in mylist:
print(row, file=file)
...
如果您想安全並防止以后出現問題,如果您以后想處理更多極端情況值,您仍然可以使用 csv 模塊並通過將其包含在另一個迭代中來每行寫入一個元素:
...
with open(file, "w", newline="") as csv_file:
csv_writer = csv.writer(csv_file, delimiter=';')
csv_writer.writerows([elt] for elt in mylist)
...
l = ["Hallo", "der Pixer", "Glas", "Telefon", "Der Kühlschrank brach kaputt."]
with open("file.csv", "w") as msg:
msg.write(",".join(l))
對於不那么瑣碎的例子:
l = ["Hallo", "der, Pixer", "Glas", "Telefon", "Der Kühlschrank, brach kaputt."]
with open("file.csv", "w") as msg:
msg.write(",".join([ '"'+x+'"' for x in l]))
在這里,您基本上設置了引號之間的每個列表元素,以防止出現字段內逗號問題。
如果要將整個字符串列表寫入單行,請使用注釋中提到的csv_writer.writerow(mylist)
。
如果您想將每個字符串寫入新行,正如我相信您在第一列中寫入它們的參考所暗示的那樣,您必須按照 class 的預期格式化數據:“行必須是字符串或數字的可迭代對於 Writer 對象”。 在這些數據上看起來像:
csv_writer.writerows((entry,) for entry in mylist)
在那里,我使用生成器表達式將每個單詞包裝在一個元組中,從而使其成為可迭代的字符串。 如果沒有這樣的東西,您的字符串本身就是可迭代的,並導致它在您所看到的每個字符之間定界。
使用 csv 每行寫入一個條目幾乎沒有意義,但它確實有一個優點,即如果它出現在數據中,它將逃脫您的分隔符。
要指定編碼,文檔說:
由於 open() 用於打開 CSV 文件進行讀取,默認情況下,該文件將使用系統默認編碼解碼為 unicode(參見 locale.getpreferredencoding())。 要使用不同的編碼解碼文件,請使用 open 的 encoding 參數:
import csv with open('some.csv', newline='', encoding='utf-8') as f: reader = csv.reader(f) for row in reader: print(row)
這同樣適用於寫入系統默認編碼以外的其他內容:打開 output 文件時指定編碼參數。
試試這個,它會 100% 工作
import csv
mylist = ["Hallo", "der Pixer", "Glas", "Telefon", "Der Kühlschrank brach kaputt."]
def list_na_csv(file, mylist):
with open(file, "w") as csv_file:
csv_writer = csv.writer(csv_file)
csv_writer.writerow(mylist)
list_na_csv("example.csv", mylist)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.