python中CSV模块详解
Python 中的 csv 模块用于读写 CSV(Comma-Separated Values)文件,这是一种常用的文件格式,用于存储表格数据,如电子表格或数据库中的数据。CSV 文件通常由逗号分隔的字段组成,每行代表数据表中的一行。
基本读取操作
使用 csv.reader 读取 CSV 文件时,需指定文件对象(以文本模式打开,推荐使用 newline='' 避免空行问题)。读取结果按行返回列表,每个元素对应一个字段。例如:
import csv
with open('data.csv', mode='r', encoding='utf-8-sig') as file:
csv_reader = csv.reader(file)
for row in csv_reader:
print(row) # 输出每行数据列表
基本写入操作
使用 csv.writer 将数据写入 CSV 文件。数据需以列表或元组形式组织,模块自动处理分隔符和引号。例如:
import csv
data = [['姓名', '年龄'], ['张三', 25], ['李四', 30]]
with open('output.csv', mode='w', encoding='utf-8-sig', newline='') as file:
csv_writer = csv.writer(file)
csv_writer.writerows(data) # 批量写入多行
字典形式读写
对于更直观的操作,可使用 csv.DictReader 和 csv.DictWriter,以字典形式处理数据(键为表头字段)。例如:
import csv
# 读取时
with open('data.csv', mode='r', encoding='utf-8-sig') as file:
dict_reader = csv.DictReader(file)
for row in dict_reader:
print(row['姓名'], row['年龄']) # 直接通过键访问字段
# 写入时
fieldnames = ['姓名', '年龄']
with open('output.csv', mode='w', encoding='utf-8-sig', newline='') as file:
dict_writer = csv.DictWriter(file, fieldnames=fieldnames)
dict_writer.writeheader() # 写入表头
dict_writer.writerow({'姓名': '王五', '年龄': 28})
高级参数与场景
自定义分隔符:通过 delimiter 参数指定分隔符(如制表符 \t 或分号 ;),适用于非标准 CSV 文件。
追加模式:写入时使用 mode='a' 可追加数据到文件末尾,避免覆盖原有内容。
错误处理:字段包含分隔符或换行时,模块自动用引号包裹,无需手动处理复杂情况。
注意事项
文件编码建议使用 utf-8-sig 以正确处理中文。
大文件读取时推荐逐行遍历以节省内存;小文件可一次性读取为列表。
写入模式 mode='w' 会覆盖文件,如需保留原内容应使用 mode='a'
4. 自定义分隔符和引号处理
默认情况下,csv 模块使用逗号作为分隔符,双引号作为字段的引号。你可以通过传递参数来改变这些设置:
with open('example.csv', 'w', newline='') as file:
writer = csv.writer(file, delimiter=';', quotechar="'", quoting=csv.QUOTE_MINIMAL)
writer.writerow(['Name', 'Age', 'City']) # 使用分号分隔,单引号引号字段(如果需要)
5. 处理大文件和性能优化
对于大文件,推荐使用 csv.reader 和 csv.DictReader 的迭代器功能,这样可以避免一次性将整个文件内容加载到内存中:
with open('large_file.csv', 'r') as file:
reader = csv.reader(file)
for row in reader:
# 处理每一行数据,不会一次性加载整个文件到内存中
pass
6. 处理编码问题
当处理包含非ASCII字符的CSV文件时,需要指定正确的编码:
with open('example.csv', 'r', encoding='utf-8') as file:
reader = csv.reader(file)
for row in reader:
print(row) # 使用 UTF-8 编码读取文件内容,适用于包含中文等字符的文件
通过上述方法,你可以有效地使用 Python 的 csv 模块来读写 CSV 文件。
用pandas操作csv
if __name__ == '__main__':
import pandas as pd
with open('./files/test1.csv')as file:
data = pd.read_csv(file)
print(data)
在Python的csv模块中,:ml-text-more[csv.writer]{text="csv.writer"}对象的:ml-search-more[writerow]{text="csv.writerow"}()和:ml-search-more[writerows]{text="csv.writerows"}()方法都用于将数据写入CSV文件,但它们在处理数据结构和写入方式上存在关键差异。
writerow()方法用于写入单行数据。它接受一个可迭代对象(如列表或元组)作为参数,将该可迭代对象中的所有元素作为同一行的单元格写入CSV文件。例如,如果传入列表['Alice', 25, 'Engineer'],则会在CSV中生成一行数据。
writerows()方法用于写入多行数据。它接受一个包含多个可迭代对象的可迭代结构(如二维列表或元组列表)作为参数,其中每个内部可迭代对象代表CSV文件中的一行。例如,传入[ ['Name', 'Age'], ['Alice', 25], ['Bob', 30] ]时,会将每个子列表写为CSV文件中的一行。
主要区别体现在数据结构处理上:writerow()适用于一维数据(单行),而writerows()适用于二维数据(多行)。在实际使用中,如果需要逐行写入数据,writerow()更直观;而对于批量写入多行数据,writerows()则更高效。
在Python中导入CSV文件和Excel文件的方法如下:
1.导入CSV文件:
2.首先,导入pandas库:import pandas as pd
3.然后,使用pd.read_csv()函数导入CSV文件,例如:df = pd.read_csv('文件路径.csv')
4.导入Excel文件:
5.首先,同样导入pandas库:import pandas as pd
6.然后,使用pd.read_excel()函数导入Excel文件,例如:df = pd.read_excel('文件路径.xlsx')
7.如果需要导入特定的工作表,可以设置sheet_name参数,例如:df = pd.read_excel('文件路径.xlsx', sheet_name='工作表名称')
8.如果需要设置表头或导入特定列,可以使用header和usecols参数进行设置。
参考:https://blog.csdn.net/tekin_cn/article/details/145965863

浙公网安备 33010602011771号