1. 什么是CSV文件?
CSV文件是一种以逗号分隔值的文件格式,其中每行表示一条记录,每条记录由一些字段组成,用逗号分隔。CSV文件可以使用任意文本编辑器打开并编辑,也可以使用电子表格软件如Microsoft Excel或Google Sheets来打开和编辑。
在Python中,我们可使用csv模块来读写CSV文件。
2. 如何读取CSV文件?
2.1 读取CSV文件基本方法:
读取CSV文件的基本方法是使用csv模块中的reader()函数。该函数返回一个迭代器对象,通过逐行读取文件并以列表形式返回每行的值。下面是一个简单的例子:
import csv
with open('data.csv', newline='') as file:
reader = csv.reader(file)
for row in reader:
print(row)
在上述代码中,我们首先打开名为data.csv的文件,然后使用csv.reader()函数来创建一个CSV读取器对象。由于文件中的每行都以换行符结尾,因此我们在文件打开语句中使用了newline=''参数,以消除它们。
接下来,我们使用for循环遍历CSV读取器迭代器的每一行,并使用print函数打印出来。
2.2 读取具有标题的CSV文件:
有些CSV文件包含标题行,其列名描述了每列包含的数据。我们可以使用DictReader类来读取这些文件。以下是一个例子:
import csv
with open('data.csv', newline='') as file:
reader = csv.DictReader(file)
for row in reader:
print(row['Name'], row['Age'])
在上述示例中,我们在csv.reader()上使用了csv.DictReader()函数来创建一个CSV字典读取器对象。然后,我们可以通过行的列名来引用单个值,就像使用Python字典一样。
3. 如何写入CSV文件?
写入CSV文件的基本方法是使用csv.writer()函数以及文件对象。以下是一个简单的例子:
import csv
with open('output.csv', 'w', newline='') as file:
writer = csv.writer(file)
writer.writerow(['Name', 'Age'])
writer.writerow(['Alice', 25])
writer.writerow(['Bob', 30])
writer.writerow(['Charlie', 35])
在上述示例中,我们使用open()函数打开名为output.csv的文件并使用csv.writer()函数创建了一个CSV写入器对象。然后,我们使用writerow()函数逐行写入数据。注意,我们在提供列表时不必担心使用逗号分隔,因为csv.writer()函数处理了它们。
3.1 写入具有标题的CSV文件:
和读取CSV文件一样,我们可以使用csv.DictWriter类来向具有标题的CSV文件中写入数据。以下是一个例子:
import csv
with open('output.csv', 'w', newline='') as file:
fieldnames = ['Name', 'Age']
writer = csv.DictWriter(file, fieldnames=fieldnames)
writer.writeheader()
writer.writerow({'Name': 'Alice', 'Age': 25})
writer.writerow({'Name': 'Bob', 'Age': 30})
writer.writerow({'Name': 'Charlie', 'Age': 35})
在上述示例中,我们创建了一个CSV字典写入器对象并指定了列的名称。然后,我们通过writeheader()函数写入标题行,以及使用writerow()函数写入行。
4. 如何设置CSV文件分隔符?
默认情况下,CSV文件中的分隔符为逗号。但有时,我们可能需要 使用不同的分隔符,如制表符或竖杠等。这可以通过csv模块中的delimiter参数来完成。以下是一个例子:
import csv
with open('data.tsv', newline='') as file:
reader = csv.reader(file, delimiter='\t')
for row in reader:
print(row)
在上述示例中,我们指定分隔符为制表符('\t'),以读取名为data.tsv的文件。delimiter参数用于指定用于分隔列的字符。
5. 如何处理CSV文件中的空值?
CSV文件中可能会包含缺失的或空的值。默认情况下,csv模块将这些值解释为空字符串。但是,我们可以使用csv模块中的csv.QUOTE_NONNUMERIC或csv.QUOTE_ALL参数将空值写入文件,并在读回数据时将其解释为None。以下是一个例子:
import csv
with open('output.csv', 'w', newline='') as file:
writer = csv.writer(file, quoting=csv.QUOTE_NONNUMERIC)
writer.writerow(['Name', 'Age'])
writer.writerow(['Alice', ''])
writer.writerow(['Bob', 30])
writer.writerow(['Charlie', ''])
with open('output.csv', newline='') as file:
reader = csv.reader(file)
for row in reader:
print(row)
在上述例子中,我们使用csv.QUOTE_NONNUMERIC参数指定在CSV文件中使用空值。注意,在写入数据时,Age字段的值为空字符串。当我们读回数据时,csv模块将其解释为None并打印出来。
6. 如何处理CSV文件中的行尾换行符?
在某些平台上(如Windows),CSV文件的行可能以换行符(\r\n)结尾。在这种情况下,csv模块默认会将其解释为单个换行符(\n)。如果我们不想这样做,可以指定lineterminator参数为'\r\n'。以下是一个例子:
import csv
with open('data.csv', newline='') as file:
reader = csv.reader(file, lineterminator='\r\n')
for row in reader:
print(row)
在上述示例中,我们打开一个名为data.csv的文件,并在csv.reader()函数中指定lineterminator参数为'\r\n',而不是默认值'\n'。这样,我们就可以正确读取包含换行符的行。
总结
CSV文件是一种以逗号分隔值的文件格式,可以使用csv模块来读写CSV文件。读取CSV文件的基本方法是使用csv.reader()函数,写入CSV文件的基本方法是使用csv.writer()函数,可以使用csv.DictReader和csv.DictWriter类来读取和写入具有标题的CSV文件,可以使用delimiter参数来指定分隔符,可以使用csv.QUOTE_NONNUMERIC或csv.QUOTE_ALL参数来处理CSV文件中的空值,可以使用lineterminator参数来处理CSV文件中的行尾换行符。