2024-05-19 07:42:31 发布
网友
我需要一种方法来获取CSV的特定项(字段)。假设我有一个100行2列的CSV(逗号分隔)。第一列是电子邮件,第二列是密码。例如,我想获取第38行电子邮件的密码。所以我只需要第二列第38行的项目。。。
假设我有一个csv文件:
aaaaa@aaa.com,bbbbb ccccc@ccc.com,ddddd
例如,我怎样才能只得到“ddddd”?
我是新来的语言和尝试了一些东西与csv模块,但我不明白。。。
#!/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]
$ python print-csv-field.py input.csv 2 2 ddddd
注意:list(csv.reader(f))将整个文件加载到内存中。要避免使用itertools:
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]
关于csv.reader()对象,有一点很有意思。csv.reader对象不是list类型,并且不可订阅。
list
这是有效的:
for r in csv.reader(file_obj): # file not closed print r
这不会:
r = csv.reader(file_obj) print r[0]
因此,您首先必须转换为列表类型才能使上述代码正常工作。
r = list( csv.reader(file_obj) ) print r[0]
import csv mycsv = csv.reader(open(myfilepath)) for row in mycsv: text = row[1]
根据对SO问题here的评论,最好的、更健壮的代码是:
import csv with open(myfilepath, 'rb') as f: mycsv = csv.reader(f) for row in mycsv: text = row[1] ............
更新:如果操作实际需要的是csv文件最后一行中的最后一个字符串,则有几个不需要csv的实例。例如
fulltxt = open(mifilepath, 'rb').read() laststring = fulltxt.split(',')[-1]
这对于很大的文件不好,因为您可以将完整的文本加载到内存中,但对于小文件则可以。请注意,laststring可以包含换行符,因此在使用前将其删除。
laststring
最后,如果OP想要的是第n行中的第二个字符串(对于n=2):
更新2:这与J.F.Sebastian的答案中的代码相同。(功劳归他):
import csv line_number = 2 with open(myfilepath, 'rb') as f: mycsv = csv.reader(f) mycsv = list(mycsv) text = mycsv[line_number][1] ............
示例
注意:
list(csv.reader(f))
将整个文件加载到内存中。要避免使用itertools
:关于csv.reader()对象,有一点很有意思。csv.reader对象不是
list
类型,并且不可订阅。这是有效的:
这不会:
因此,您首先必须转换为列表类型才能使上述代码正常工作。
根据对SO问题here的评论,最好的、更健壮的代码是:
更新:如果操作实际需要的是csv文件最后一行中的最后一个字符串,则有几个不需要csv的实例。例如
这对于很大的文件不好,因为您可以将完整的文本加载到内存中,但对于小文件则可以。请注意,
laststring
可以包含换行符,因此在使用前将其删除。最后,如果OP想要的是第n行中的第二个字符串(对于n=2):
更新2:这与J.F.Sebastian的答案中的代码相同。(功劳归他):
相关问题 更多 >
编程相关推荐