如何使用python csv writer

1,254 阅读8分钟

在这篇博客中,我们将看到如何使用python csv writer将列表数据写入csv中。

1.方法:Python写一个列表到CSV

在第一个方法中,我们将使用csv.writer()将一个列表写到CSV文件中。

 import csv
Details = ['Name', 'class', 'Year', 'Subject','Grade']  
rows = [ ['Susjan', '2nd', '2020', 'Physics','A'],
        ['John', '3rd', '2022', 'Chemistry','B'],
        ['Sam', '4th', '2021', 'Math','A']]
with open('studentData.csv', 'w') as f:
    write = csv.writer(f)
    write.writerow(Details)
    write.writerows(rows)

输出

Name,class,Year,Subject,Grade
Susjan,2nd,2020,Physics,A
John,3rd,2022,Chemistry,B
Sam,4th,2021,Math,A

第1行:我们导入CSV模块。

2行至第3行:我们创建了两个详细信息和行的列表。细节列表将表示各列的名称,行列表将表示每一列的数据。

第6行至第9行:我们打开一个文件studentData.csv作为写模式('w')来写文件。现在,我们使用csv.writer(f)创建了一个写对象。首先,我们使用细节列表来写csv的列名。在写完csv的列名后,我们使用write.writerows()并将rows列表作为参数传入其中,将每个列表写成一行。

2.2.方法:Python将一个列表写成CSV行

在这个方法中,我们将使用csv.writer()来写CSV行。程序中详细说明了如何使用这个方法来写入下面给出的csv行。

  import csv
data = [['a'], ['b'], ['c'],['d']]
file = open('alphabet.csv', 'w+',newline ='')
with file:    
    write = csv.writer(file)
    write.writerows(data)

輸出

a
b
c
d

第1行:我们导入CSV模块。

第2行:我们创建了一个数据列表,其中的元素也是一个列表。每个子列表将被视为一个单独的行。

第3行至第6行:我们以写模式('w')打开alphabet.csv文件,来写这个文件。我们还使用了换行属性,这有助于将数值写入新行。现在,我们创建了一个对象,使用csv.writer(file)进行写入。为了把每个列表写成一行,我们使用write.writerows(),并把数据列表作为参数传给它们。

从输出结果中,我们可以看到所有子列表都被写成了新的一行。

3.方法:Python写列表到CSV头

在这个方法中,我们要写CSV文件的头。

   import csv
list = [[ 'New York', 'USA','A'],['Toronto', 'CANADA', 'A'],['Bejing','CHINA','B']]
with open('header.csv','w') as f:
    writer = csv.writer(f)
    writer.writerow(['City', 'Country', 'Rank'])
    writer.writerows(list)

输出

City,Country,Rank

第1行:我们导入CSV模块。

2到3行:我们创建了一个数据列表,其中的元素也是一个列表。每个子列表将被视为一个单独的行。

4行到第7行:我们打开一个文件rank.csv,作为写模式('w')来写这个文件。现在,我们使用csv.writer(f)创建了一个对象来写入。首先,我们使用 writerow (['City', 'Country', 'Rank'])写入csv的各列名称。

输出显示我们已经成功地写入了csv文件的标题。

4.方法:Python写一个列表元组元素到csv中

这个方法将展示我们如何将一个列表里面的元素元组类型写到csv中。

 import csv
items = [(('A', 'Sam'), 25), (('B', 'Rakesh'), 23), (('C', 'Kaira'), 42)]
with open('tuple.csv', 'w') as f:
    write = csv.writer(f)
    write.writerows(items)

输出

"('A', 'Sam')",25
"('B', 'Rakesh')",23
"('C', 'Kaira')",42

第1行:我们导入CSV模块。

2行:我们创建了一个项目列表,列表中的每个元素都是一个元组类型。

第3行至第5行:我们以写模式('w')打开一个文件tuple.csv来写这个文件。现在,我们创建了一个使用csv.writer(f)的对象来写。为了把每个列表元素(元组)写成一行,我们使用write.writerows()并把项目列表作为参数传给它们。

5.5.方法:Python 将一个列表追加到一个 csv 中

这个方法将展示我们如何使用python writer将任何新数据追加到csv中。

 import csv
with open('result.csv','a') as f:
    writer = csv.writer(f)
    writer.writerow(['city','New York'])

输出

"('A', 'Sam')",25
"('B', 'Rakesh')",23
"('C', 'Kaira')",42
city,New York

第1行:我们导入CSV模块。

2行:我们在追加模式下打开result.csv文件,因为我们想在现有的csv文件中增加一些数据。

第3行至第4行:现在,我们使用csv.writer(f)创建了一个对象来写入。为了把每个列表元素写成一行,我们使用write.writerows(),并把项目列表作为参数传给他们。但由于现在我们只有一个列表,我们将只使用**writerow()**方法。

从输出结果中,我们可以看到,我们成功地将新的数据追加到一个现有的csv文件。

6.方法:Python 将一个列表追加到一个 csv 中

import csv
from itertools import zip_longest
item_1 = ['A', 'B', 'C', 'D']
item_2 = [1,2,3,4]
data = [item_1, item_2]
export_data = zip_longest(*data, fillvalue = '')
with open('item_zip.csv', 'w', encoding="ISO-8859-1", newline='') as file:
      write = csv.writer(file)
      write.writerow(("item_1", "item_2"))
      write.writerows(export_data)

输出

item_1,item_2
A,1
B,2
C,3
D,4

第1行和第2行:我们导入CSV模块和zip_longest。这个模块用于按顺序进行迭代。

第3行至第5行:我们创建了两个列表 item_1 和 item_2,用于数据迭代。然后我们将两个列表合并为一个列表,并将该列表命名为data。

6行:然后我们调用zip_longest方法,对两个列表进行并行迭代。

7行到第10行:我们打开一个文件item_zip.csv,作为写模式('w')来写这个文件。现在,我们创建了一个使用csv.writer(f)的对象来写。首先,我们写出了csv的列名,写完后,为了把每个列表写成一行,我们使用write.writerows()并把行列表(export_data)作为参数传入其中。

输出结果显示,我们已经成功地将我们的压缩数据写入csv文件。

7.7.方法:用自定义管状分隔符写CSV文件

在这个方法中,我们将使用管状分隔符('|')而不是逗号。下面的程序将解释我们如何在代码中使用管状分隔符。

  import csv
Details = ['Name', 'class', 'Year', 'Subject','Grade']  
rows = [ ['Susjan', '2nd', '2020', 'Physics','A'],
        ['John', '3rd', '2022', 'Chemistry','B'],
        ['Sam', '4th', '2021', 'Math','A']]
with open('pipe_delimiter.csv', 'w') as f:
    write = csv.writer(f,delimiter='|')
    write.writerow(Details)
    write.writerows(rows)

输出

Name|class|Year|Subject|Grade
Susjan|2nd|2020|Physics|A
John|3rd|2022|Chemistry|B
Sam|4th|2021|Math|A

第1行:我们导入CSV模块。

2行至第3行:我们创建了两个细节和行的列表。细节列表将表示各列的名称,行列表将表示每一列的数据。

第6行至第9行:我们打开一个文件studentData.csv,以写模式('w')来写文件。现在,我们创建了一个使用csv.writer(f)的对象来写入。我们还在csv.writer()方法中与f一起添加了一个额外的属性分隔符。首先,我们使用细节列表写出csv的列名。写完后,我们使用write.writerows(),并将rows列表作为参数传给他,将每个列表写成一行。

输出结果显示,我们的csv文件数据是用管道分隔符而不是逗号分隔的。

8.方法:用自定义引号字符写CSV文件

在这个方法中,我们将使用一些自定义的引号字符,同时将数据保存为csv格式。为此,我们必须使用quoting=csv.QUOTE_NONNUMERIC属性和quotechar,如下面的程序所示。

  import csv
Details = ['Name', 'class', 'Year', 'Subject','Grade']  
rows = [ ['Susjan', '2nd', '2020', 'Physics','A'],
        ['John', '3rd', '2022', 'Chemistry','B'],
        ['Sam', '4th', '2021', 'Math','A']]
with open('quote.csv', 'w') as f:
    write = csv.writer(f,quoting=csv.QUOTE_NONNUMERIC,
                        delimiter=';', quotechar='*')
    write.writerow(Details)
    write.writerows(rows)

輸出

*Name*;*class*;*Year*;*Subject*;*Grade*
*Susjan*;*2nd*;*2020*;*Physics*;*A*
*John*;*3rd*;*2022*;*Chemistry*;*B*
*Sam*;*4th*;*2021*;*Math*;*A*

第1行:我们导入CSV模块。

2行至第3行:我们创建了两个细节和行的列表。细节列表将表示各列的名称,行列表将表示每一列的数据。

第6行至第9行:我们打开一个文件studentData.csv,以写模式('w')来写文件。现在,我们创建了一个使用csv.writer(f)的对象来写入。我们还在csv.writer()方法中与f一起添加了一个额外的属性quoting和quotechar。首先,我们使用细节列表来写csv的列名。写完后,我们使用write.writerows(),并将rows列表作为参数传给他,将每个列表写成一行。

输出结果显示,我们的csv文件数据现在是用自定义的quotechar引号。

9.9.方法:使用csv.DictWriter()写CSV文件

我们也可以使用DictWriter()方法写入csv文件。所以在这个程序中,我们将看到如何使用DictWriter()方法来写csv文件。

 import csv

with open('dictwriter.csv', 'w', newline='') as file:
    fieldnames = ['A', 'B']
    writer = csv.DictWriter(file, fieldnames=fieldnames)

    writer.writeheader()
    writer.writerow({'A': 'Magnus Carlsen', 'B': 28770})
    writer.writerow({'A': 'Fabiano Caruana', 'B': 28222})
    writer.writerow({'A': 'Ding Liren', 'B': 28001})

输出

A,B
Magnus Carlsen,28770
Fabiano Caruana,28222
Ding Liren,28001

第1行:我们导入csv模块。

第3行:我们在写模式下打开文件dictwriter.csv。

4行和第5行:在这个dictwriter()方法中,我们必须定义列表中的键,并在创建writer对象时传递,如第5行所示。字段名的顺序与我们要写入csv文件的顺序相同。

第8至10行:我们以dict(键和值)的形式将所有的数据传递给writerow。

总结

在这篇文章中,我们已经看到了使用csv.writerow()方法的不同方式。我们看到了如何将整个列表写到csv中。我们还看到了如何将列表中的图元写到csv中。然后我们看到了一些有趣的方法,比如自定义csv的分隔符。