簡體   English   中英

寫入 CSV 而不將單詞標記為字母

[英]Writing to CSV without tokenizing words into letters

所以,我想從字典“數據”[見下面的代碼]中取出鍵並將一行標題寫入 csv 文件,所以我將有兩列,“名稱”和“語言”。 然后我想要四行,第一行是“Dave,Python”,第二行是“Dennis,C”,依此類推。 應該看起來像:

姓名、語言
戴夫,Python
丹尼斯,C
彼得,Java
傑斯,Python

代碼:

data = {
    'name': ['Dave', 'Dennis', 'Peter', 'Jess'],
    'language': ['Python', 'C', 'Java', 'Python']
}

with open("dump.csv", mode="w", newline="") as f:
    writer = csv.writer(f, delimiter=",")
    writer.writerow(data.keys())
    for n, l in zip(data["name"], data["language"]):
        writer.writerow(f'{n}{l}')

這是我實際得到的:

姓名、語言
D,a,v,e,P,y,t,h,o,n
D,e,n,n,i,s,C
P,e,t,e,r,J,a,v,a
J,e,s,s,P,y,t,h,o,n

我很確定這種情況正在發生,因為字符串在 Python 中被索引,而我的 for n, l [etc.] 行以某種方式迭代字符串的每個索引,但我不知道為什么會發生這種情況或如何修復它。

在引擎蓋下,字符串只是字符的 arrays。 同時, writerow()期望將一組值轉換為一行字段。 相反,您將一個組合在一起的字符串傳遞給它,這導致每個字符都被解釋為一個字段。

您可以將nl重新組合成一個數組

writer.writerow([n, l])

或者干脆不費心從zip()操作中解構枚舉值。

for row in zip(data["name"], data["language"]):
    writer.writerow(row)

.writerow()將一個可迭代對象作為參數,並將所有部分作為單獨的值寫入 csv。

你給它一個字符串( f'{n}{l}' ),這是一個可迭代的字符,這解釋了你得到的 output 。

你應該這樣做:

        writer.writerow([n, l])

這給了它一個字符串列表,將每個字符串寫入它自己的 position,而不會分解它。

[矯枉過正]如果您不介意添加(不必要的)package,Pandas 可以減輕任務。

import pandas as pd

data = {
    'name': ['Dave', 'Dennis', 'Peter', 'Jess'],
    'language': ['Python', 'C', 'Java', 'Python']
}

df = pd.DataFrame(data)
df.to_csv("dump.csv", index=False)

暫無
暫無

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

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