1

出于我的目的,在实际使用行之前,我必须知道(CSV)文件中的行数。我用谷歌搜索,发现文档说我应该创建一个迭代器(CSV.reader)两次(第一次用于计数,第二次用于处理行)。这是唯一的方法,还是有一些棘手的方法可以做到这一点?

感谢您的回答。

4

2 回答 2

1

如果您的文件不是很大,您可以尝试:

from csv import reader

def proceed(size):
    with open(filename) as f:
        data = list(csv.reader(f))
        if len(data) > size:
            return
        else:
            for line in data:
                #do action


weights = {'user1': 4, 'user2': 5}  
for k,v in weights.iteritems():
    proceed(v)

或者如@georgesl 建议的那样,以防您有一个非常大的文件:

def proceed(size):
    if sum(1 for row in csv.reader(open(filename))) > size:
        return
    else:
        for line in csv.reader(open(filename)):
            #do action
于 2012-11-07T08:52:10.263 回答
1

我不知道不读取文件的方法,但是根据瓶颈所在的位置,您可以只处理N行,如果有更多则丢弃它们,例如:

count = 0
for line in reader:
    count += 1
    if count > N:  # Over the limit so stop processing
        break
    else:
        processed_data += process(line)
else:
    # This block only runs if the loop completed naturally, i.e. count <= N
    return processed_data

如果process(line)价格昂贵,那么您最好的选择可能是使用问题中描述的两个循环。

于 2012-11-07T08:48:43.747 回答