我需要一种方法来获取CSV的特定项目(字段)。假设我有一个包含100行和2列的CSV(逗号分隔)。第一列电子邮件,第二列密码。例如,我想在第38行获取电子邮件的密码。所以我只需要第2列第38行的项目......
说我有一个csv文件:
aaaaa@aaa.com,bbbbb
ccccc@ccc.com,ddddd
我怎样才能获得'ddddd'例如?
我是该语言的新手,并尝试过使用csv模块的一些东西,但我不明白......
答案 0 :(得分:28)
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]
............
更新:如果OP真正想要的是csv文件最后一行中的最后一个字符串,那么有几个aproach不一定需要csv。例如,
fulltxt = open(mifilepath, 'rb').read()
laststring = fulltxt.split(',')[-1]
这对于非常大的文件并不好,因为您在内存中加载了完整的文本,但对于小文件可能没问题。请注意,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]
............
答案 1 :(得分: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]
$ python print-csv-field.py input.csv 2 2
ddddd
注意: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]
答案 2 :(得分:8)
关于csv.reader()对象,您需要了解一个有趣的观点。 csv.reader对象不是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]
答案 3 :(得分:4)
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))
此示例在Python 3中打印单元格4,8。
答案 4 :(得分:0)
最后我明白了!
regardless of the order
“贝特·戴维斯”
答案 5 :(得分:-1)
import csv
inf = csv.reader(open('yourfile.csv','r'))
for row in inf:
print row[1]