簡體   English   中英

如何在 Python 中為 CSV 使用分隔符?

[英]How to use delimiter for CSV in Python?

我無法弄清楚如何在 Python 中使用csv.writer的分隔符。 我有一個 CSV 文件,其中以逗號分隔的字符串位於單個單元格中,並且我需要在每個單獨的單元格中包含每個單詞,例如:

100 , 2559  ,,Main, St,LEOMA,LEOMA,498,498, AK,AK
140 , 425   ,,Main, St,LEOMA,LEOMA,498,498, AK,AK
100 , 599   ,,Main, St,LEOMA,LEOMA,498,498, AK,AK

應該在單個單元格中包含每個單詞:

100 2559    Main    St  LEOMA   LEOMA   498 498 AK  AK
140 425     Main    St  LEOMA   LEOMA   498 498 AK  AK
100 599     Main    St  LEOMA   LEOMA   498 498 AK  AK

我試過了:

import csv
workingdir = "C:\Mer\Ven\sample"
csvfile = workingdir+"\test3.csv"
f=open(csvfile,'wb')

csv.writer(f, delimiter =' ',quotechar =',',quoting=csv.QUOTE_MINIMAL)

您的代碼正在清除您的文件:

import csv
workingdir = "C:\Mer\Ven\sample"
csvfile = workingdir+"\test3.csv"
f=open(csvfile,'wb') # opens file for writing (erases contents)
csv.writer(f, delimiter =' ',quotechar =',',quoting=csv.QUOTE_MINIMAL)

如果要讀取文件,則需要使用 csv.reader 並打開文件進行讀取。

import csv
workingdir = "C:\Mer\Ven\sample"
csvfile = workingdir+"\test3.csv"
f=open(csvfile,'rb') # opens file for reading
reader = csv.reader(f)
for line in reader:
    print line

如果要將其寫回具有不同分隔符的新文件,則可以創建一個新文件並指定這些分隔符並寫出每一行(而不是打印元組)。

好的,這是我從你的問題中了解到的。 您正在從 python 編寫一個 csv 文件,但是當您將該文件打開到其他一些應用程序(如 excel 或 open office)中時,它們會在一個單元格中顯示完整的行,而不是在單個單元格中顯示每個單詞。 我是對的??

如果我是那么請試試這個,

import csv

with open(r"C:\\test.csv", "wb") as csv_file:
    writer = csv.writer(csv_file, delimiter =",",quoting=csv.QUOTE_MINIMAL)
    writer.writerow(["a","b"])

您必須設置delimiter = ","

帶有自定義分隔符的 CSV 文件

默認情況下,逗號用作 CSV 文件中的分隔符。 但是,某些 CSV 文件可以使用逗號以外的分隔符。 少數受歡迎的是| \t

import csv
data_list = [["SN", "Name", "Contribution"],
             [1, "Linus Torvalds", "Linux Kernel"],
             [2, "Tim Berners-Lee", "World Wide Web"],
             [3, "Guido van Rossum", "Python Programming"]]
with open('innovators.csv', 'w', newline='') as file:
    writer = csv.writer(file, delimiter='|')
    writer.writerows(data_list)

輸出:

SN|Name|Contribution
1|Linus Torvalds|Linux Kernel
2|Tim Berners-Lee|World Wide Web
3|Guido van Rossum|Python Programming

編寫帶引號的 CSV 文件

import csv

row_list = [["SN", "Name", "Contribution"],
             [1, "Linus Torvalds", "Linux Kernel"],
             [2, "Tim Berners-Lee", "World Wide Web"],
             [3, "Guido van Rossum", "Python Programming"]]
with open('innovators.csv', 'w', newline='') as file:
    writer = csv.writer(file, quoting=csv.QUOTE_NONNUMERIC, delimiter=';')
    writer.writerows(row_list) 

輸出:

"SN";"Name";"Contribution"
1;"Linus Torvalds";"Linux Kernel"
2;"Tim Berners-Lee";"World Wide Web"
3;"Guido van Rossum";"Python Programming"

如您所見,我們已將csv.QUOTE_NONNUMERIC傳遞給quoting參數。 它是由csv模塊定義的常量。

csv.QUOTE_NONNUMERIC指定應在非數字條目周圍添加引號的writer器對象。

您可以將 3 個其他預定義常量傳遞給quoting參數:

  • csv.QUOTE_ALL - 指定writer器對象以在所有條目周圍使用引號寫入 CSV 文件。
  • csv.QUOTE_MINIMAL - 指定writer對象僅引用那些包含特殊字符(分隔符、quotechar 或 lineterminator 中的任何字符)的字段
  • csv.QUOTE_NONE - 指定不應引用任何條目的writer器對象。 它是默認值。
import csv

row_list = [["SN", "Name", "Contribution"],
             [1, "Linus Torvalds", "Linux Kernel"],
             [2, "Tim Berners-Lee", "World Wide Web"],
             [3, "Guido van Rossum", "Python Programming"]]
with open('innovators.csv', 'w', newline='') as file:
    writer = csv.writer(file, quoting=csv.QUOTE_NONNUMERIC,
                        delimiter=';', quotechar='*')
    writer.writerows(row_list)

輸出:

*SN*;*Name*;*Contribution*
1;*Linus Torvalds*;*Linux Kernel*
2;*Tim Berners-Lee*;*World Wide Web*
3;*Guido van Rossum*;*Python Programming*

在這里,我們可以看到quotechar='*'參數指示writer對象使用*作為所有非數字值的引號。

暫無
暫無

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

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