簡體   English   中英

在 Python 中列出不帶逗號的 csv

[英]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)

我在 excel 中的 output 看起來像這樣: 在此處輸入圖像描述

所需的 output 是: 在此處輸入圖像描述

你可以看到我有兩個問題:首先,每個字符后面都有逗號。 其次,我不知道如何使用一些編碼,例如 UTF-8 或 cp1250。 請問我該如何解決?

我試圖搜索類似的問題,但對我沒有任何幫助。 謝謝你。

你這里有兩個問題。

  1. writerows需要一個行列表,不同的說法是一個可迭代的列表。 由於字符串是可迭代的,因此您將每個單詞寫在不同的行中,每個字段一個字符。 如果你想要一行每個字段一個單詞,你應該使用writerow

     csv_writer.writerow(mylist)
  2. 默認情況下,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.

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