如何获取csv文件的特定字段?

Jok*_*oko 25 python csv

我需要一种方法来获取CSV的特定项目(字段).假设我有一个包含100行和2列的CSV(逗号分隔).第一列电子邮件,第二列密码.例如,我想在第38行获取电子邮件的密码.所以我只需要第2列第38行的项目......

说我有一个csv文件:

aaaaa@aaa.com,bbbbb
ccccc@ccc.com,ddddd
Run Code Online (Sandbox Code Playgroud)

我怎么才能得到'ddddd'呢?

我是这个语言的新手,并尝试了一些csv模块的东西,但我没有得到它...

joa*_*uin 29

import csv
mycsv = csv.reader(open(myfilepath))
for row in mycsv:
   text = row[1]
Run Code Online (Sandbox Code Playgroud)

这里对SO问题的评论之后,最好的,更强大的代码将是:

import csv
with open(myfilepath, 'rb') as f:
    mycsv = csv.reader(f)
    for row in mycsv:
        text = row[1]
        ............
Run Code Online (Sandbox Code Playgroud)

更新:如果什么OP真正想要的是CSV文件的最后一行的最后一个字符串,有几个aproaches不是necesarily需要CSV.例如,

fulltxt = open(mifilepath, 'rb').read()
laststring = fulltxt.split(',')[-1]
Run Code Online (Sandbox Code Playgroud)

这对于非常大的文件并不好,因为您在内存中加载了完整的文本,但对于小文件可能没问题.请注意,laststring可能包含换行符,因此请在使用前将其删除.

最后,如果OP想要的是第n行中的第二个字符串(对于n = 2):

更新2:现在这与JFSebastian的答案中的代码相同.(功劳归于他):

import csv
line_number = 2     
with open(myfilepath, 'rb') as f:
    mycsv = csv.reader(f)
    mycsv = list(mycsv)
    text = mycsv[line_number][1]
    ............
Run Code Online (Sandbox Code Playgroud)


jfs*_*jfs 8

#!/usr/bin/env python
"""Print a field specified by row, column numbers from given csv file.

USAGE:
    %prog csv_filename row_number column_number
"""
import csv
import sys

filename = sys.argv[1]
row_number, column_number = [int(arg, 10)-1 for arg in sys.argv[2:])]

with open(filename, 'rb') as f:
     rows = list(csv.reader(f))
     print rows[row_number][column_number]
Run Code Online (Sandbox Code Playgroud)

$ python print-csv-field.py input.csv 2 2
ddddd
Run Code Online (Sandbox Code Playgroud)

注意:list(csv.reader(f))将整个文件加载到内存中.为了避免这种情况你可以使用itertools:

import itertools
# ...
with open(filename, 'rb') as f:
     row = next(itertools.islice(csv.reader(f), row_number, row_number+1))
     print row[column_number]
Run Code Online (Sandbox Code Playgroud)


Sur*_*rya 8

有一点你需要了解csv.reader()对象.csv.reader对象不是list类型,也不是可订阅的.

这有效:

for r in csv.reader(file_obj): # file not closed
    print r
Run Code Online (Sandbox Code Playgroud)

这不是:

r = csv.reader(file_obj) 
print r[0]
Run Code Online (Sandbox Code Playgroud)

因此,您首先必须转换为列表类型才能使上述代码正常工作.

r = list( csv.reader(file_obj) )
print r[0]          
Run Code Online (Sandbox Code Playgroud)


Tur*_*ute 6

import csv

def read_cell(x, y):
    with open('file.csv', 'r') as f:
        reader = csv.reader(f)
        y_count = 0
        for n in reader:
            if y_count == y:
                cell = n[x]
                return cell
            y_count += 1

print (read_cell(4, 8)) 
Run Code Online (Sandbox Code Playgroud)

本示例在Python 3中打印单元4、8。