答土子美
读取CSV文件
# importing csv module
import csv
# csv file name
filename = "aapl.csv"
# initializing the titles and rows list
fields = []
rows = []
# reading csv file
with open(filename, 'r') as csvfile:
# creating a csv reader object
csvreader = csv.reader(csvfile)
# extracting field names through first row
fields = csvreader.next()
# extracting each data row one by one
for row in csvreader:
rows.append(row)
# get total number of rows
print("Total no. of rows: %d"%(csvreader.line_num))
# printing the field names
print('Field names are:' + ', '.join(field for field in fields))
# printing first 5 rows
print('\nFirst 5 rows are:\n')
for row in rows[:5]:
# parsing each column of a row
for col in row:
print("%10s"%col),
print('\n') 复制代码在IDE上运行
上述程序的输出如下所示:
📷
以上示例使用CSV文件aapl.csv,可以从此处下载。
使用同一目录中的aapl.csv文件运行此程序。
让我们试着理解这段代码。
使用open(filename,'r')作为csvfile: csvreader = csv.reader(csvfile)
在这里,我们首先在READ模式下打开CSV文件。文件对象名为csvfile。文件对象将转换为csv.reader对象。我们将csv.reader对象保存为csvreader。
fields = csvreader.next()
csvreader是一个可迭代的对象。因此,.next()方法返回当前行并将迭代器前进到下一行。由于我们的csv文件的第一行包含标题(或字段名称),因此我们将它们保存在名为fields的列表中。
对于csvreader中的行: rows.append(行)
现在,我们使用for循环遍历剩余的行。每行都附加到名为rows的列表中。如果您尝试打印每一行,可以发现该行只是一个包含所有字段值的列表。
print(“行的总数:%d”%(csvreader.line_num))
csvreader.line_num只是一个计数器,它返回已迭代的行数。
写入CSV文件
# importing the csv module
import csv
# field names
fields = ['Name', 'Branch', 'Year', 'CGPA']
# data rows of csv file
rows = [ ['Nikhil', 'COE', '2', '9.0'],
['Sanchit', 'COE', '2', '9.1'],
['Aditya', 'IT', '2', '9.3'],
['Sagar', 'SE', '1', '9.5'],
['Prateek', 'MCE', '3', '7.8'],
['Sahil', 'EP', '2', '9.1']]
# name of csv file
filename = "university_records.csv"
# writing to csv file
with open(filename, 'w') as csvfile:
# creating a csv writer object
csvwriter = csv.writer(csvfile)
# writing the fields
csvwriter.writerow(fields)
# writing the data rows
csvwriter.writerows(rows)复制代码在IDE上运行
让我们尝试分解上面的代码。
字段和行已经定义。fields是包含所有字段名称的列表。rows是列表的列表。每行都是包含该行的字段值的列表。
使用open(filename,'w')作为csvfile: csvwriter = csv.writer(csvfile)
在这里,我们首先以WRITE模式打开CSV文件。文件对象名为csvfile。文件对象将转换为csv.writer对象。我们将csv.writer对象保存为csvwriter。
csvwriter.writerow(场)
现在我们使用writerow方法编写第一行,它只是字段名称。
csvwriter.writerows(行)
我们使用writerows方法一次写入多行。
将字典写入CSV文件
# importing the csv module
import csv
# my data rows as dictionary objects
mydict =[{'branch': 'COE', 'cgpa': '9.0', 'name': 'Nikhil', 'year': '2'},
{'branch': 'COE', 'cgpa': '9.1', 'name': 'Sanchit', 'year': '2'},
{'branch': 'IT', 'cgpa': '9.3', 'name': 'Aditya', 'year': '2'},
{'branch': 'SE', 'cgpa': '9.5', 'name': 'Sagar', 'year': '1'},
{'branch': 'MCE', 'cgpa': '7.8', 'name': 'Prateek', 'year': '3'},
{'branch': 'EP', 'cgpa': '9.1', 'name': 'Sahil', 'year': '2'}]
# field names
fields = ['name', 'branch', 'year', 'cgpa']
# name of csv file
filename = "university_records.csv"
# writing to csv file
with open(filename, 'w') as csvfile:
# creating a csv dict writer object
writer = csv.DictWriter(csvfile, fieldnames = fields)
# writing headers (field names)
writer.writeheader()
# writing data rows
writer.writerows(mydict) 复制代码在IDE上运行
在此示例中,我们将字典mydict写入CSV文件。
使用open(filename,'w')作为csvfile: writer = csv.DictWriter(csvfile,fieldnames = fields)
这里,文件对象(csvfile)被转换为DictWriter对象。
在这里,我们将fieldnames指定为参数。
writer.writeheader()
writeheader方法使用预先指定的字段名简单地写入csv文件的第一行。
writer.writerows(mydict)
writerows方法只是写入所有行,但在每一行中,它只写入值(而不是键)。
所以,最后,我们的CSV文件如下所示:
📷
重点:
在csv模块中,可以给出可选的dialect参数,该参数用于定义特定于特定CSV格式的一组参数。默认情况下,csv模块使用excel方言,使其与excel电子表格兼容。您可以使用register_dialect方法定义自己的方言。 这是一个例子:
csv.register_dialect(
'mydialect',
delimiter = ',',
quotechar = '"',
doublequote = True,
skipinitialspace = True,
lineterminator = '\r\n',
quoting = csv.QUOTE_MINIMAL)
现在,在定义csv.reader或csv.writer对象时,我们可以像
这样指定方言:
csvreader = csv.reader(csvfile, dialect='mydialect')
现在,考虑一个CSV文件在纯文本中看起来像这样:
📷
我们注意到分隔符不是逗号而是分号。此外,行由两个换行符而不是一行换行。在这种情况下,我们可以指定分隔符和行终止符,如下所示:
csvreader = csv.reader(csvfile, delimiter = ';', lineterminator = '\n\n')
因此,这是关于如何在python程序中加载和解析CSV文件的简短而简洁的讨论。