从fi获取N行

2024-04-25 18:00:05 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个10万条记录的主列表,每条记录都属于一个公司编号。我试图通过选择每个公司编号中的2个来创建一个示例数据。“def Company”遍历数据并返回唯一的公司编号和每个公司编号的计数。你知道吗

我的脚本只输出列表中第一个公司的2条记录并停止,如何使每个公司的循环输出2条?你知道吗

数据如下所示(列[0]是公司编号):

'54', '000054', '14571', '        0000010023'
'54', '000054', '14571', '        0000010033'
'4', '000054', '14571', '        0000010024'
'4', '000054', '14571', '        0000010023'
'433', '000054', '14571', '        000001023423'
'433', '000054', '14571', '        00000101563'
'433', '000054', '14571', '        00000100234523'
'433', '000054', '14571', '        00000100657823'
'433', '000054', '14571', '        0000010SDF023'
'78', '000054', '14571', '        000001002PIWEUR3'
'78', '000054', '14571', '        00000100J23'
'78', '000054', '14571', '        00000100222223'
'78', '000054', '14571', '        000001002445'
'12', '000054', '14571', '        0000010256'
'12', '000054', '14571', '        000001005666'




import os
import sys
import csv
from collections import Counter
masterlist = open('P:/20140408.txt', 'rb')
data = csv.reader(masterlist, delimiter=",", quotechar='"')

def Company():
    masterlist.seek(0)
    cnt = Counter()
    for row in data:
        cnt[row[0]] +=1

    return cnt


def maintest():
    companylist = Company().keys()
    masterlist.seek(0)
    s = 2


    for rows in data:
        if rows[0] in companylist and s > 0:
            print rows
            s -=1
maintest()

Tags: csv数据inimport列表datadef记录
2条回答

我将保留一个简单的公司ID映射,而不是使用counter,它是您在循环中看到的次数:

seen = dict()
for row in data:
    n = seen.setdefault(row[0], 0)
    if n < 2:
        print row
    seen[row[0]] += 1

如果您正在寻找一个真正的“示例”,而不是前两个,并且如果您可以将所有数据保存在内存中,则可以执行以下操作:

import csv
from collections import defaultdict
from random import sample

data=defaultdict(list)

with open('/tmp/data.csv') as f:
    reader=csv.reader(f, skipinitialspace=True, quotechar="'")
    for line in reader:
        data[line[0]].append(line[1:])

for k in data:
    print k, sample(data[k], 2)  

将示例数据作为csv文件打印:

54 [['000054', '14571', '        0000010023'], ['000054', '14571', '        0000010033']]
12 [['000054', '14571', '        0000010256'], ['000054', '14571', '        000001005666']]
78 [['000054', '14571', '        000001002445'], ['000054', '14571', '        00000100J23']]
4 [['000054', '14571', '        0000010023'], ['000054', '14571', '        0000010024']]
433 [['000054', '14571', '        00000100234523'], ['000054', '14571', '        000001023423']]

相关问题 更多 >