33

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

3 回答 3

28

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

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

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

于 2013-05-29T22:25:33.827 回答
6

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

于 2013-05-29T22:31:14.117 回答
0

带有自定义分隔符的 CSV 文件

默认情况下,逗号用作 CSV 文件中的分隔符。但是,某些 CSV 文件可以使用逗号以外的分隔符。很少有流行的是|and \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_NONNUMERICquoting参数。它是csv模块定义的常量。

csv.QUOTE_NONNUMERIC指定writer应在非数字条目周围添加引号的对象。

您可以将其他 3 个预定义常量传递给quoting参数:

  • csv.QUOTE_ALL- 指定writer要写入 CSV 文件的对象,并在所有条目周围加上引号。
  • csv.QUOTE_MINIMAL- 指定writer对象只引用那些包含特殊字符的字段(分隔符、引号字符或行终止符中的任何字符)
  • 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对象*用作所有非数字值的引号。

于 2021-01-15T15:30:09.317 回答