辽阳制作网站,网站速度诊断 慢,专门建立网站的公司吗,河南省重点项目建设网站目录 专栏导读 1. CSV文件格式简介
2 csv模块的使用方法
3 读写CSV文件的示例
3.1 读取CSV文件示例
3.2 写入CSV文件示例
4 CSV文件的常用数据处理
4.1 读取CSV文件的特定列
4.2 读取CSV文件的特定行
5 csv 文件的特殊处理
5.1 处理包含逗号、换行符、引号的字段
5.…目录 专栏导读 1. CSV文件格式简介
2 csv模块的使用方法
3 读写CSV文件的示例
3.1 读取CSV文件示例
3.2 写入CSV文件示例
4 CSV文件的常用数据处理
4.1 读取CSV文件的特定列
4.2 读取CSV文件的特定行
5 csv 文件的特殊处理
5.1 处理包含逗号、换行符、引号的字段
5.2 处理非ASCII字符
5.3 处理空字段
5.3.1 读取空字段
5.3.2 指定参数处理空字段 专栏导读 专栏订阅地址https://blog.csdn.net/qq_35831906/category_12375510.html 1. CSV文件格式简介 CSV逗号分隔值是一种常见的文本文件格式用于存储表格数据。每行代表一条记录每个字段之间使用逗号或其他特定分隔符进行分隔。CSV文件可以使用纯文本编辑器打开也可以用电子表格软件如Microsoft Excel、Google Sheets进行编辑。
2 csv模块的使用方法
Python中的csv模块提供了处理CSV文件的功能。它包含用于读取和写入CSV文件的各种方法和对象如csv.reader、csv.writer、csv.DictReader和csv.DictWriter等。
3 读写CSV文件的示例
3.1 读取CSV文件示例
假设我们有一个名为data.csv的CSV文件内容如下
Name,Age,City
John,30,New York
Jane,25,San Francisco
Mike,35,Chicago我们可以使用csv.reader来读取并处理这个CSV文件
import csv# 读取CSV文件并处理数据
with open(data.csv, r, newline) as file:csv_reader csv.reader(file)# 遍历每一行数据for row in csv_reader:print(row)输出
[Name, Age, City]
[John, 30, New York]
[Jane, 25, San Francisco]
[Mike, 35, Chicago]3.2 写入CSV文件示例
现在假设我们有一组字典数据我们想将其写入到一个新的CSV文件output.csv中
import csv# 要写入的数据
data [{Name: Alice, Age: 28, City: London},{Name: Bob, Age: 32, City: Paris},{Name: Eve, Age: 24, City: Berlin}
]# 写入CSV文件
with open(output.csv, w, newline) as file:fieldnames [Name, Age, City]csv_writer csv.DictWriter(file, fieldnamesfieldnames)# 写入表头csv_writer.writeheader()# 写入数据csv_writer.writerows(data)print(Data has been written to output.csv.)输出
Name,Age,City
Alice,28,London
Bob,32,Paris
Eve,24,Berlin4 CSV文件的常用数据处理
4.1 读取CSV文件的特定列 通过csv.reader或csv.DictReader读取CSV文件后仅保留所需的列数据进行处理。我们可以通过列索引或列名来指定特定的列。
示例 假设我们有一个名为data.csv的CSV文件内容如下
Name,Age,City
John,30,New York
Jane,25,San Francisco
Mike,35,Chicago我们将展示两种方法来读取CSV文件的特定列
方法一使用列索引
import csv# 读取CSV文件并获取特定列数据
with open(data.csv, r, newline) as file:csv_reader csv.reader(file)# 将列索引设为1第二列Agecolumn_index 1# 初始化存储特定列数据的列表specific_column_data []# 遍历每一行数据for row in csv_reader:# 获取特定列的值并添加到列表中specific_column_data.append(row[column_index])print(Specific column data:, specific_column_data)输出
Specific column data: [Age, 30, 25, 35]
方法二使用列名
import csv# 读取CSV文件并获取特定列数据
with open(data.csv, r, newline) as file:csv_reader csv.DictReader(file)# 将列名设为Agecolumn_name Age# 初始化存储特定列数据的列表specific_column_data []# 遍历每一行数据for row in csv_reader:# 获取特定列的值并添加到列表中specific_column_data.append(row[column_name])print(Specific column data:, specific_column_data)输出
Specific column data: [30, 25, 35]以上示例中我们通过csv.reader和csv.DictReader分别读取CSV文件并根据特定的列索引或列名提取所需的列数据。然后我们将特定列的数据存储在一个列表中供后续处理使用。 注意使用csv.DictReader时每行数据将被解析为一个字典其中键是CSV文件的第一行表头的列名。这样我们可以通过列名来访问特定列的值。而使用csv.reader时每行数据将被解析为一个列表我们可以通过列索引来访问特定列的值。 4.2 读取CSV文件的特定行 要读取CSV文件的特定行我们可以使用csv.reader或csv.DictReader来逐行读取CSV文件并在读取过程中判断行号是否满足特定条件。以下是使用csv.reader和csv.DictReader读取CSV文件特定行的示例
示例1使用csv.reader读取特定行
假设我们有一个名为data.csv的CSV文件内容如下
Name,Age,City
John,30,New York
Jane,25,San Francisco
Mike,35,Chicago我们可以使用csv.reader来读取CSV文件并根据特定的行号来获取对应的行数据
import csv# 读取CSV文件的特定行
def read_specific_row(csv_file, row_number):with open(csv_file, r, newline) as file:csv_reader csv.reader(file)for i, row in enumerate(csv_reader):if i row_number:return row# 读取第二行索引为1的数据
specific_row read_specific_row(data.csv, 1)
print(Specific row data:, specific_row)输出
Specific row data: [Jane, 25, San Francisco]示例2使用csv.DictReader读取特定行 如果CSV文件的第一行是列名我们可以使用csv.DictReader来读取CSV文件并根据特定条件来获取特定行的数据
import csv# 读取CSV文件的特定行
def read_specific_row(csv_file, row_number):with open(csv_file, r, newline) as file:csv_reader csv.DictReader(file)for i, row in enumerate(csv_reader):if i row_number:return row# 读取第二行索引为1的数据
specific_row read_specific_row(data.csv, 1)
print(Specific row data:, specific_row)输出
Specific row data: {Name: Jane, Age: 25, City: San Francisco}在以上示例中我们分别使用了csv.reader和csv.DictReader来读取CSV文件并通过特定的行号索引获取了相应的行数据。注意行号是从0开始的因为在Python中索引是从0开始计数。根据需要可以调整row_number参数来读取不同的行。 5 csv 文件的特殊处理
在处理CSV文件时有一些常见的特殊情况需要特别处理。以下是一些常见的特殊处理情况
5.1 处理包含逗号、换行符、引号的字段 处理包含逗号、引号和换行符的CSV文件可以使用Python的csv模块来读取和写入数据。csv模块提供了对于特殊字符的自动处理包括将包含逗号、引号和换行符的字段用引号包裹起来并在引号内的引号进行转义。
示例
假设我们要处理以下包含特殊字符的CSV文件名为data.csv
Name,Age,Description
John,30,A software, guru with 5 years of experience. Fluent in English and Español.
Jane,25,A data analyst with extensive skills.
Passionate about data visualization.
Mike,35,Project manager with experience leading international teams.
Deutsch sprechen.我们可以使用下面的代码来读取和处理这个包含特殊字符的CSV文件
import csv# 读取包含特殊字符的CSV文件并输出内容
with open(data.csv, r, newline) as file:csv_reader csv.reader(file)for row in csv_reader:print(row)输出结果
[Name, Age, Description]
[John, 30, A software, guru with 5 years of experience. Fluent in English and Español.]
[Jane, 25, A data analyst with extensive skills.\nPassionate about data visualization.]
[Mike, 35, Project manager with experience leading international teams.\nDeutsch sprechen.]在输出结果中我们可以看到csv.reader模块正确处理了包含逗号、引号和换行符的字段并将其解析为正确的数据。
如果要将数据写入到包含特殊字符的CSV文件中可以使用以下示例代码
import csv# 要写入的数据包含特殊字符的字段
data [[Name, Age, Description],[John, 30, A software, guru with 5 years of experience. Fluent in English and Español.],[Jane, 25, A data analyst with extensive skills.\nPassionate about data visualization.],[Mike, 35, Project manager with experience leading international teams.\nDeutsch sprechen.]
]# 写入CSV文件并设置引号限定符为双引号
with open(output.csv, w, newline) as file:csv_writer csv.writer(file, quotingcsv.QUOTE_MINIMAL)# 写入数据csv_writer.writerows(data)print(CSV file with fields containing special characters has been created.)在写入数据时我们使用csv.writer并设置引号限定符为csv.QUOTE_MINIMAL表示只在必要时才使用引号包裹字段确保数据的正确性。
输出文件内容
Name,Age,Description
John,30,A software, guru with 5 years of experience. Fluent in English and Español.
Jane,25,A data analyst with extensive skills.\nPassionate about data visualization.
Mike,35,Project manager with experience leading international teams.\nDeutsch sprechen.在输出文件中csv模块自动处理了包含特殊字符的字段并将其写入到CSV文件中。 在读取CSV文件时使用csv.reader并指定适当的参数可以正确地解析包含特殊字符的数据。在写入CSV文件时使用csv.writer并设置合适的引号限定符可以确保数据正确写入CSV文件。 5.2 处理非ASCII字符 在读取和写入CSV文件时可以使用 encoding参数来指定文件的编码格式。CSV文件通常使用UTF-8编码来支持包含非ASCII字符的文本数据。 import csv# 读取包含非ASCII字符的CSV文件
with open(data.csv, r, encodingutf-8) as file:csv_reader csv.reader(file)for row in csv_reader:print(row)# 写入包含非ASCII字符的CSV文件
data [[中文, English], [数据, Data]]
with open(data.csv, w, newline, encodingutf-8) as file:csv_writer csv.writer(file)csv_writer.writerows(data)
5.3 处理空字段 如果CSV文件中存在空字段可以使用空字符串或特定的值如NA或None表示空字段在读取CSV文件时可以使用 csv.reader的 skipinitialspace参数来处理前导空格 5.3.1 读取空字段
假设我们有一个名为data.csv的CSV文件内容如下
Name,Age,City,Description
John,30,New York,Software engineer with 5 years of experience. Fluent in English and Español.
Jane,,San Francisco,Data analyst with a passion for data visualization. Speaks français.
Mike,35,, Project manager with experience leading international teams. Deutsch sprechen.注意上面的CSV文件中存在空字段。 我们依然可以使用csv.reader和csv.DictReader来读取这个包含空字段的CSV文件并对空字段进行处理
示例1
import csv# 读取CSV文件并输出内容
with open(data.csv, r, newline) as file:csv_reader csv.reader(file)for row in csv_reader:# 处理空字段processed_row [field.strip() if field.strip() else None for field in row]print(processed_row)输出
[Name, Age, City, Description]
[John, 30, New York, Software engineer with 5 years of experience. Fluent in English and Español.]
[Jane, None, San Francisco, Data analyst with a passion for data visualization. Speaks français.]
[Mike, 35, None, Project manager with experience leading international teams. Deutsch sprechen.]解释 第一行是CSV文件的标题行直接输出。 第二行中的Age字段为空我们处理为空值None。 第三行中的City字段为空我们处理为空值None。 第四行中的Description字段不为空输出不变。 在处理空字段时我们使用列表推导式来遍历每一行中的字段。field.strip()用于去除字段两侧的空白字符包括换行符、空格等然后我们使用条件表达式来判断是否为空字段。如果字段不为空则保持原值如果字段为空则将其处理为None表示空值。最终我们得到了处理后的每一行数据。 示例2 可以使用csv.reader来读取这个包含空字段和前导空格的CSV文件并使用skipinitialspaceTrue来处理前导空格
import csv# 读取CSV文件并输出内容
with open(data.csv, r, newline) as file:csv_reader csv.reader(file, skipinitialspaceTrue)for row in csv_reader:print(row)输出
[Name, Age, City, Description]
[John, 30, New York, Software engineer with 5 years of experience.]
[Jane, , San Francisco, Data analyst with a passion for data visualization.]
[Mike, 35, , Project manager with experience leading international teams.]在示例中我们使用csv.reader来读取CSV文件并使用skipinitialspaceTrue来处理前导空格。结果显示字段值前的空格已被自动去除这样可以更好地处理包含前导空格的数据。在第二行和第三行中字段Age和City的值包含前导空格但在输出中已经去除了这些前导空格。 5.3.2 指定参数处理空字段 处理空字段在CSV文件中通常需要根据具体情况来决定。CSV文件中的空字段可以使用空字符串来表示也可以使用特定的值如NA或None来表示。在处理空字段时需要根据数据的组织和要求来决定最合适的方式。 在Python的csv模块中可以使用csv.writer和csv.DictWriter的quoting参数来指定如何处理空字段。
处理空字段的选项 csv.QUOTE_MINIMAL默认 如果字段为空字段将被写入为一个空字符串。在读取CSV文件时空字符串会被解析为空值。 csv.QUOTE_ALL 如果字段为空字段将被写入为双引号包裹的空字符串。在读取CSV文件时空字符串会被解析为空值。 csv.QUOTE_NONNUMERIC 如果字段为空字段将被写入为一个空字符串。在读取CSV文件时空字符串会被解析为None或空值。 csv.QUOTE_NONE 如果字段为空字段将被写入为一个空字符串。在读取CSV文件时空字符串会被解析为空字符串本身而不是空值。 示例
假设我们有一个包含空字段的CSV文件名为data.csv内容如下
Name,Age,City,Description
John,30,New York,
Jane,,San Francisco,Data analyst with a passion for data visualization.
Mike,35,,Project manager我们将使用csv.writer和csv.DictWriter来处理这个包含空字段的CSV文件并演示不同选项的效果。
import csv# CSV文件处理选项
quoting_options [csv.QUOTE_MINIMAL, csv.QUOTE_ALL, csv.QUOTE_NONNUMERIC, csv.QUOTE_NONE]
output_files [output_minimal.csv, output_all.csv, output_nonnumeric.csv, output_none.csv]# 处理CSV文件
for quoting, output_file in zip(quoting_options, output_files):# 要写入的数据包含空字段data [[John, 30, New York, ],[Jane, , San Francisco, Data analyst with a passion for data visualization.],[Mike, 35, , Project manager]]# 写入CSV文件with open(output_file, w, newline) as file:csv_writer csv.writer(file, quotingquoting)# 写入数据csv_writer.writerows(data)print(CSV files with different quoting options have been created.)在以上示例中我们分别使用不同的quoting选项来处理包含空字段的CSV文件并将处理后的数据写入不同的输出文件。 我们创建了四个输出文件分别使用不同的quoting选项即csv.QUOTE_MINIMAL、csv.QUOTE_ALL、csv.QUOTE_NONNUMERIC和csv.QUOTE_NONE。你可以查看各个输出文件观察不同选项对于空字段的处理效果。 结果如下