python: 序列导出到excel, 序列导出到csv, 字典导出到excel, CSV文件读写, CSV File Reading and Writing,list to csv, dict to csv, tuple to csv

 

1. 在Python中读取CSV文件

 

阅读不同类型的CSV文件

在python中,我们使用csv.reader()module来读取csv文件。在这里,我们将告诉你如何读取不同类型具有不同的分隔符如CSV文件quotes("")pipe(|) comma(,)

 

普通的CSV文件

我们有一个名为people.csv 具有comma(,) 以下数据的默认分隔符的csv文件:

SN, Name, City
1, John, Washington
2, Eric, Los Angeles
3, Brad, Texas

 

示例1:读取people.csv文件,其中分隔符为逗号(,)

import csv

with open('people.csv', 'r') as csvFile:
    reader = csv.reader(csvFile)
    for row in reader:
        print(row)

csvFile.close()

当我们运行上面的程序时,输出将是

['SN', ' Name', ' City']
['1', ' John', ' Washington']
['2', ' Eric', ' Los Angeles']
['3', ' Brad', ' Texas']

在上面的程序中,我们读取了该people.csv文件。然后,我们打印每列的行。

 

包含Initial Spaces的CSV文件

正如您在示例1中看到的那样,我们在分隔符后面有空格,因此我们在输出中也有空格。好吧,对于这种文件csv()库,程序员有一个解决方案。

我们可以通过使用模块csv.register_dialect()类注册新dialects来读取csv文件并删除空格  csv。dialects描述了要读取的csv文件的格式。

在dialects中,我们有一个参数skipinitialspace,用于删除分隔符后的空格。默认情况下它有价值false但在我们的情况下我们必须做到true

我们将使用示例1中使用的people.csv以及以下数据

SN, Name, City
1, John, Washington
2, Eric, Los Angeles
3, Brad, Texas

 

示例2:读取people.csv文件,其中在分隔符后我们有空格

import csv

csv.register_dialect('myDialect',
delimiter = ',',
skipinitialspace=True)

with open('people.csv', 'r') as csvFile:
    reader = csv.reader(csvFile, dialect='myDialect')
    for row in reader:
        print(row)

csvFile.close()

当我们运行上面的程序时,输出将是

['SN', 'Name', 'City']
['1', 'John', 'Washington']
['2', 'Eric', 'Los Angeles']
['3', 'Brad', 'Texas']

在上面的程序中,我们注册了一个新的dialects,delimiter = ','skipinitialspace=True告诉编译器在分隔符后面有空格。

*注意:dialects是一类csv 模块,有助于定义读写CSV的参数。它允许您为数据创建,存储和重用各种格式参数。

 

带引号的CSV文件

我们可以通过使用模块csv.register_dialect()类注册新dialects来读取带引号的csv文件  csv

在这里,我们有quotes.csv以下数据的文件。

"SN", "Name", "Quotes"
1, Buddha, "What we think we become"
2, Mark Twain, "Never regret anything that made you smile"
3, Oscar Wilde, "Be yourself everyone else is already taken"

 

示例3:读取quotes.csv文件,其中分隔符为逗号(,)但带引号

import csv

csv.register_dialect('myDialect',
delimiter = ',',
quoting=csv.QUOTE_ALL,
skipinitialspace=True)

with open('quotes.csv', 'r') as f:
    reader = csv.reader(f, dialect='myDialect')
    for row in reader:
        print(row[2])

当我们运行上面的程序时,输出将是

Quotes
What we think we become
Never regret anything that made you smile
Be yourself everyone else is already taken

在上面的程序中,我们注册了一个名为myDialect的dialects。然后,我们用csv.QUOTE_ALL双列引号后显示所有字符。

 

带自定义分隔符的CSV文件

我们可以通过在帮助下注册新dialects来读取具有自定义分隔符的csv文件csv.register_dialect()

在这里,我们在文件中有以下数据dialects.csv

"pencil"|"eraser"|"sharpner"
"book"|"chair"|"table"
"apple"|"mango"|"grapes"

 

示例4:读取dialects.csv文件

import csv

csv.register_dialect('myDialect', delimiter = '|')

with open('dialects.csv', 'r') as f:
    reader = csv.reader(f, dialect='myDialect')
    for row in reader:
        print(row)

 

当我们运行上面的程序时,输出将是

['pencil', 'eraser', 'sharpner']
['book', 'chair', 'table']
['apple', 'mango', 'grapes']

在上面的程序中,我们将新dialects注册为myDialect。然后,我们使用delimiter=|pipe(|) 被认为是列分隔符的地方。

 

将CSV文件读入字典

要将csv文件读入字典可以通过使用DictReader()类似于类的csv模块来完成,reader()但是创建了一个将数据映射到字典的对象。键由fieldnames参数给出。

 

示例5:将people.csv文件读入字典

import csv

with open("people.csv", 'r') as csvfile:
    reader = csv.DictReader(csvfile)
    for row in reader:
        print(dict(row))

csvFile.close()

当我们运行上面的程序时,输出将是

{'SN': '1', ' Name': ' John', ' City': ' Washington'}
{'SN': '2', ' Name': ' Eric', ' City': ' Los Angeles'}
{'SN': '3', ' Name': ' Brad', ' City': ' Texas'}

在上面的程序中,我们DictReader() 用来读取people.csv文件并映射到字典中。然后,我们使用dict()字典格式打印数据而无需订购。

如果我们dict()从上面的程序中删除函数并且仅使用print(row),则输出将是

OrderedDict([('SN', '1'), (' Name', ' John'), (' City', ' Washington')])
OrderedDict([('SN', '2'), (' Name', ' Eric'), (' City', ' Los Angeles')])
OrderedDict([('SN', '3'), (' Name', ' Brad'), (' City', ' Texas')])

我们也可以注册新的dialects并在DictReader()方法中使用它。假设我们有people_data.csv以下格式

SN| Name| City
1| John| Washington
2| Eric| Los Angeles
3| Brad| Texas

 

示例6:通过注册新方言将people_data.csv读入字典

import csv

csv.register_dialect('myDialect',
delimiter = '|',
skipinitialspace=True)

with open("people.csv", 'r') as csvfile:
    reader = csv.DictReader(csvfile, dialect='myDialect')
    for row in reader:
        print(row)

csvfile.close()

 

当我们运行上面的程序时,输出将是

OrderedDict([('SN','1'),('Name','John'),('City','Washington')])
OrderedDict([('SN','2'),('Name','Eric'),('City','Los Angeles')])
OrderedDict([('SN','3'),('Name','Brad'),('City','Texas')])

 

*注意:在python 3的情况下,DictReader()默认情况下使用OrderedDict。OrderedDict是一个字典子类,它保存了添加其内容的顺序。

2. 用Python编写CSV文件

 

将数据写入不同类型的CSV文件

在Python中,我们使用csv.writer()模块将数据写入csv文件。该模块类似于csv.reader()模块。

 

在现有文件上书写

我们有一个people.csv包含以下数据的文件。

SN, Name, City
1, John, Washington
2, Eric, Los Angeles
3, Brad, Texas

现在,我们要修改people.csv文件。

 

示例1:修改people.csv的现有行

import csv

row = ['2', ' Marie', ' California']

with open('people.csv', 'r') as readFile:
reader = csv.reader(readFile)
lines = list(reader)
lines[2] = row

with open('people.csv', 'w') as writeFile:
    writer = csv.writer(writeFile)
    writer.writerows(lines)

readFile.close()
writeFile.close()

 

当我们people.csv用文本编辑器打开文件时,它会显示:

SN, Name, City
1, John, Washington
2, Marie, California
3, Brad, Texas

在上面的程序中,我们修改了第三行people.csv并保存了结果。首先,我们people.csv使用csv.reader()函数读取文件。然后,我们使用list()功能将所有的CSV数据转换列表中并存储线。在那之后,我们改变了CSV文件的第三排与lines[2] = row。最后,我们将列表的值写入people.csv文件。

有时,我们可能需要在现有的csv文件中添加新行。因此,我们将向people.csv示例1中使用的文件附加一个新行。

 

示例2:将新行添加到people.csv文件中

import csv

row = ['4', ' Danny', ' New York']

with open('people1.csv', 'a') as csvFile:
    writer = csv.writer(csvFile)
    writer.writerow(row)

csvFile.close()

 

当我们people.csv用文本编辑器打开文件时,它会显示:

SN, Name, City
1, John, Washington
2, Marie, California
3, Brad, Texas
4, Danny, New York

在上面的程序中,我们添加了一个新行people.csv。为此,我们以'a'追加模式打开了csv文件。然后,我们在文件的最后一行之后写入的值people.csv

 

普通CSV文件

我们使用writer()具有默认分隔符的csv模块的方法创建普通的csv文件comma(,)

 

示例3:将python列表写入person.csv文件

import csv

csvData = [['Person', 'Age'], ['Peter', '22'], ['Jasmine', '21'], ['Sam', '24']]

with open('person.csv', 'w') as csvFile:
    writer = csv.writer(csvFile)
    writer.writerows(csvData)

csvFile.close()

当我们用文本编辑器打开person.csv文件时,它会显示:

Person,Age
Peter,22
Jasmine,21
Sam,24

在上面的程序中,我们使用csv.writer()函数将列表csvData中的数据写入csv文件person.csv

注意:该writerow()方法一次写入一行。如果需要一次写入所有数据,可以使用writerows()方法。

 

带引号的CSV文件

通过使用csv.register_dialect()csv模块类注册新dialects,我们可以用引号编写csv文件。

 

示例4:写入person1.csv文件

import csv

person = [['SN', 'Person', 'DOB'],
['1', 'John', '18/1/1997'],
['2', 'Marie','19/2/1998'],
['3', 'Simon','20/3/1999'],
['4', 'Erik', '21/4/2000'],
['5', 'Ana', '22/5/2001']]

csv.register_dialect('myDialect',
quoting=csv.QUOTE_ALL,
skipinitialspace=True)

with open('person1.csv', 'w') as f:
    writer = csv.writer(f, dialect='myDialect')
    for row in person:
        writer.writerow(row)

f.close()

当我们打开person1.csv文件时,我们得到以下输出:

"SN","Person","DOB"
"1","John","18/1/1997"
"2","Marie","19/2/1998"
"3","Simon","20/3/1999"
"4","Erik","21/4/2000"
"5","Ana","22/5/2001"

在上面的程序中,我们注册了一个名为myDialect的dialect。在里面myDialect我们quoting=csv.QUOTE_ALL用来写所有值的双引号。

 

带自定义分隔符的CSV文件

分隔符是用于分隔字段的字符串。默认值为comma(,)

我们可以通过在帮助下注册新dialect来编写具有自定义分隔符的csv文件csv.register_dialect()

 

示例5:使用自定义分隔符作为管道(|)进行写入

import csv

person = [['SN', 'Person', 'DOB'],
['1', 'John', '18/1/1997'],
['2', 'Marie','19/2/1998'],
['3', 'Simon','20/3/1999'],
['4', 'Erik', '21/4/2000'],
['5', 'Ana', '22/5/2001']]

csv.register_dialect('myDialect',
delimiter = '|',
quoting=csv.QUOTE_NONE,
skipinitialspace=True)

with open('dob.csv', 'w') as f:
    writer = csv.writer(f, dialect='myDialect')
    for row in person:
        writer.writerow(row)

f.close()

 

当我们打开dob.csv文件时,我们得到以下输出:

SN|Person|DOB
1|John|18/1/1997
2|Marie|19/2/1998
3|Simon|20/3/1999
4|Erik|21/4/2000
5|Ana|22/5/2001

在上面的程序中,我们注册了一个带有分隔符的dialectpipe(|)。然后我们将列表写入csv文件dob.csv

 

带有Lineterminator的CSV文件

lineterminator是一个用于终止writer生成的行的字符串。默认值为\r\n

通过使用csv.register_dialect()csv模块类注册新dialect,我们可以在Python中使用lineterminator编写csv文件

 

示例6:使用lineterminator编写csv文件

import csv

csvData = [['Fruit', 'Quantity'], ['Apple', '5'], ['Orange', '7'], ['Mango', '8']]

csv.register_dialect('myDialect', delimiter = '|', lineterminator = '\r\n\r\n')

with open('lineterminator.csv', 'w') as f:
    writer = csv.writer(f, dialect='myDialect')
    writer.writerows(csvData)

f.close()

当我们打开lineterminator.csv文件时,我们得到以下输出:

Fruit|Quantity
Apple|5
Orange|7
Mango|8

在上面的代码中,我们注册了一个新的dialects:myDialect。然后,我们使用delimiter='|'|被认为是列分隔符的地方。之后,我们使用lineterminator='\r\n\r\n'每两行后每行分隔的位置。

注意:Python的CSV模块只接受\r\n\n\r作为lineterminator。

 

带引号的CSV文件

我们可以使用自定义引号字符编写csv文件,方法是使用csv.register_dialect()csv模块注册新dialects。

 

示例7:使用quotechars编写CSV文件

import csv

csvData = [['SN', 'Items'], ['1', 'Pen'], ['2', 'Book'], ['3', 'Copy']]

csv.register_dialect('myDialect',
delimiter = '|',
quotechar = '"',
quoting=csv.QUOTE_ALL,
skipinitialspace=True)

with open('quotechars.csv', 'w') as csvFile:
    writer = csv.writer(csvFile, dialect='myDialect')
    writer.writerows(csvData)

print("writing completed")

csvFile.close()

输出:

"SN"|"Items"
"1"|"Pen"
"2"|"Book"
"3"|"Copy"

在上面的程序中,我们注册了一个名为myDialect的方言。然后我们使用delimiter as pipe(|)和quotechar作为doublequote '"'

 

将CSV文件写入字典

使用DictWriter()csv模块类,我们可以将csv文件写入字典。它与该writer()函数类似,但创建了一个将数据映射到字典的对象。键由fieldnames参数给出。

 

示例8:将字典写入peak.csv文件

import csv

data = [{'mountain' : 'Everest', 'height': '8848'},
      {'mountain' : 'K2 ', 'height': '8611'},
      {'mountain' : 'Kanchenjunga', 'height': '8586'}]

with open('peak.csv', 'w') as csvFile:
    fields = ['mountain', 'height']
    writer = csv.DictWriter(csvFile, fieldnames=fields)
    writer.writeheader()
    writer.writerows(data)

print("writing completed")

csvFile.close()

当我们打开peak.csv文件时,它将包含以下输出:

mountain,height
Everest,8848
K2,8611
Kangchenjunga,8586

在上面的程序中,我们使用fieldnamescsv文件中每列的标题。然后,我们使用a DictWriter()将字典数据写入peak.csv文件。

 

示例9:使用自定义方言将字典写入grade.csv文件

import csv

csv.register_dialect('myDialect', delimiter = '|', quoting=csv.QUOTE_ALL)

with open('grade.csv', 'w') as csvfile:
    fieldnames = ['Name', 'Grade']
    writer = csv.DictWriter(csvfile, fieldnames=fieldnames, dialect="myDialect")
    writer.writeheader()
    writer.writerows([{'Grade': 'B', 'Name': 'Alex'},
                 {'Grade': 'A', 'Name': 'Bin'},
                 {'Grade': 'C', 'Name': 'Tom'}])

print("writing completed")

当我们打开grade.csv文件时,它将包含以下输出:

"Name"|"Grade"
"Alex"|"B"
"Bin"|"A"
"Tom"|"C"

 

在上面的程序中,我们使用pipe(|)as分隔符创建一个名为myDialect的自定义方言。然后,使用fieldnamescsv文件中每列的标题。最后,我们使用a DictWriter()将字典数据写入grade.csv文件。

 

data = []
header = ['store_type', 'order_id', 'name', 'shipping_address', 'billing_address', 'total_price', 'created_at']

for row in rows:
    data.append(list(row.values()))

for row_index, list in enumerate(data):
    for column_index, string in enumerate(list):
        data[row_index][column_index] = data[row_index][column_index]

with open('/var/www/html/downloads/orders.csv', 'w', newline='') as f:
    writer = csv.writer(f)
    writer.writerows(data)

 

本文:python: 序列导出到excel, 序列导出到csv, 字典导出到excel, CSV文件读写, CSV File Reading and Writing,list to csv, dict to csv, tuple to csv

Leave a Reply