如何在python中使用csv的分隔符

时间:2013-05-29 20:59:39

标签: python csv delimiter

我无法弄清楚如何在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)

3 个答案:

答案 0 :(得分:16)

您的代码正在删除您的文件:

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

如果要将其写回具有不同分隔符的新文件,可以创建一个新文件并指定这些分隔符并写出每一行(而不是打印元组)。

答案 1 :(得分:3)

好的,这是我从你的问题中理解的。您正在从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 = ","

答案 2 :(得分:0)

带有自定义分隔符的 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 或行终止符中的任何字符)的字段
  • 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 对象使用 * 作为所有非数字值的引用。