如何使用Python在CSV文档中跨行索引并提取指定列数据?
如何从CSV文件中提取指定列或单个值
先说说你现有代码的问题
你写的循环里,for i in x已经在逐行遍历文件对象,此时i就是当前行的内容,但你又调用了x.readline(),这会让文件指针跳到下一行,导致只能打印出奇数行;而且你没有对每行内容做分割处理,自然只能看到整行文本。
方法一:手动分割处理(适合简单CSV)
如果你的CSV格式很规整(没有逗号嵌套、引号包裹这类复杂情况),可以直接按逗号分割每行内容,再提取目标列:
1. 批量提取所有姓名(第一列)
with open('text.csv', 'r') as f: for line in f: # 先去掉行首尾的换行符,再按逗号分割,最后给每个元素去除前后空格 columns = [col.strip() for col in line.strip().split(',')] # 第一列索引为0,直接打印 print(columns[0])
运行后输出:
John Amy Franky
2. 提取单个指定值(比如第二行第二列的数字6)
with open('text.csv', 'r') as f: # 把所有行读进列表,方便按索引定位 all_lines = f.readlines() # 第二行对应索引1,分割后取第二列(索引1) target_value = [col.strip() for col in all_lines[1].strip().split(',')][1] print(target_value)
运行后输出:6
方法二:用Python内置csv模块(推荐,适配复杂CSV)
如果CSV存在格式复杂的情况(比如单元格里有逗号、被引号包裹),手动分割会出错,这时候用官方的csv模块更稳妥:
1. 批量提取所有数字(第二列)
import csv with open('text.csv', 'r') as f: # 创建reader对象,自动处理分隔逻辑 reader = csv.reader(f) for row in reader: # 注意原文件逗号后有空格,所以row里的元素带空格,需要strip() print(row[1].strip())
输出:
3 6 2
2. 用DictReader按列名提取(更直观)
给列命名后,可以直接通过列名获取内容,不用记索引:
import csv with open('text.csv', 'r') as f: # 指定列名对应CSV的三列:姓名、数字、颜色 reader = csv.DictReader(f, fieldnames=['name', 'number', 'color']) for row in reader: # 直接通过列名取颜色列 print(row['color'].strip())
输出:
green red blue
3. 提取单个指定值(比如第三行第三列的blue)
import csv with open('text.csv', 'r') as f: reader = csv.reader(f) # 把reader转为列表,方便按索引访问 all_rows = list(reader) # 第三行索引为2,第三列索引为2,strip()去空格 print(all_rows[2][2].strip())
输出:blue
内容的提问来源于stack exchange,提问作者Jack
相关产品推荐
相关产品推荐

