Python 3如何从CSV列中读取不同长度的字符集合?
从CSV文件读取长度不同的列数据(Python 3)
嘿Rhein,很高兴你能享受Python的学习过程!看你现在在处理犯罪数据的CSV文件,想从里面提取不同长度的列,我来给你梳理下正确的做法~
你当前用readline(8)按固定字符数读取的方式,显然不适合列长度不一致的场景——CSV文件本质是用**分隔符(通常是逗号)**来区分列的,不是按固定宽度排版的,手动截取字符很容易出错,比如会不小心截到下一列的内容。
Python标准库自带的csv模块就是专门解决这类问题的,用它能轻松处理任意长度的列,下面给你两种常用的实现方式:
方式一:用csv.DictReader(推荐,可读性强)
如果你的CSV文件第一行是列名(比如id,case_number,...),用DictReader会自动把每一行转换成字典,直接通过列名就能获取对应的值,完全不用管列的长度:
import csv # 打开CSV文件,注意指定编码和newline参数避免换行问题 with open('C:/Users/aferdous/python-works/data-set/crime-data/crime_data-windows-1000.csv', 'r', newline='', encoding='utf-8') as crime_data: # 初始化DictReader,自动识别表头作为字典的键 crime_reader = csv.DictReader(crime_data) # 遍历每一行数据 for row in crime_reader: # 直接通过列名提取数据 id_value = row['id'] # 替换成你实际的列名 case_number = row['case_number'] # 替换成你实际的列名 # 打印或处理数据 print(f"ID: {id_value}, 案件编号: {case_number}")
方式二:用csv.reader(适合无表头的情况)
如果你的CSV文件没有表头,就用csv.reader,通过列的索引位置来提取数据:
import csv with open('C:/Users/aferdous/python-works/data-set/crime-data/crime_data-windows-1000.csv', 'r', newline='', encoding='utf-8') as crime_data: crime_reader = csv.reader(crime_data) # 如果有表头,先跳过第一行(没有的话就删掉这行) next(crime_reader) for row in crime_reader: # 假设ID是第0列,案件编号是第1列,按实际索引调整 id_value = row[0] case_number = row[1] print(f"ID: {id_value}, 案件编号: {case_number}")
为什么不用手动截取?
CSV文件里可能存在包含分隔符的内容(比如某列内容是"Doe, John"),手动截取字符根本无法正确识别这种情况,但csv模块会自动处理带引号的特殊内容,保证每一列数据的准确性。
继续加油做你的项目呀,Python的标准库总能帮你省不少力气!
内容的提问来源于stack exchange,提问作者roger
相关产品推荐
相关产品推荐

