首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >编写代码从电子表格中检索数据

编写代码从电子表格中检索数据
EN

Stack Overflow用户
提问于 2020-11-13 16:01:11
回答 2查看 95关注 0票数 1

我在挪威的水产养殖电子表格上工作。其中每一行包含特定公司的不同信息(目标、种类、地址等)。我正在写一段代码,打印出从事每一种海洋生物工作的公司数量。到目前为止,这就是我所拥有的

代码语言:javascript
复制
import csv

species = []

with open('Akvakulturregisteret.csv', newline='', encoding='iso-8859-1') as csvfile:
    akvareader = csv.reader(csvfile, delimiter=';')
    for row in akvareader:    
        try:
            specie = row[-13]
        except ValueError:
            continue
        species.append(specie)

species = list(dict.fromkeys(species))
species.remove("")
species.remove("ART")

companies = []


with open('Akvakulturregisteret.csv', newline='', encoding='iso-8859-1') as csvfile:
    akvareader = csv.reader(csvfile, delimiter=';')
    for i in range(len(species)):
        for row in akvareader:
            if row[-13] == species[i]:
                company = row[2]
                companies.append(company)
                             
companies = list(dict.fromkeys(companies))         
print(len(companies))

其中第一个打开部分创建了所有不同物种的列表。“‘Regnbue”,“rret”,“Laks”,.然而,第二部分只给出了在名单的第一个元素上工作的公司的数量。它似乎在第一个元素之后停止,并且不会遍历整个列表。如有任何帮助或反馈,将不胜感激。

CSV文件如下所示(这是一列)

代码语言:javascript
复制
A A 0001;969159570;NORGES MILJØ- OG BIOVITENSKAPELIGE;POSTBOKS 5003;1432;ÅS;03-10
1991;;3021;ÅS;Kommersiell;MATFISK;Regnbueørret;000;TN;10362;NERFJØSET;3021;ÅS;LAND;FERSKVANN;6

你可以在这里看到整个事情,https://www.fiskeridir.no/Akvakultur/Registre-og-skjema/Akvakulturregisteret。如果你一直向下滚动,就会有一个链接

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-11-13 16:49:09

那么,您可以使用defaultdictcollections和使用物种作为键和set()作为您的默认值,然后添加公司到它。最后,把len()放在公司上,你就有了(我想)你想要的。

下面是操作步骤:

代码语言:javascript
复制
import collections
import csv


with open("Akvakulturregisteret.csv", newline="", encoding="iso-8859-1") as f:
    reader = csv.reader(f, delimiter=";")
    next(reader, None)
    next(reader, None)
    output = collections.defaultdict(set)
    for row in reader:
        company, species = row[2], row[12]
        output[species].add(company)

for species, companies in dict(output).items():
    print(f"{species} - {len(companies)}")

这印出了处理它的公司的种类和数量。

代码语言:javascript
复制
Laks - 315
Ørret - 306
Regnbueørret - 305
Rognkjeks (felles) - 48
Gressgylt - 15
Tunge - 9
Grønngylt - 15
Trepigget stingsild - 6
Rødspette - 15
Gapeflyndre - 3
Havabbor - 4
Sandflyndre - 4
Piggvar - 17
Berggylt - 32
Bergnebb - 18
and so on...

如果你想要解决这个问题,就用这个:

代码语言:javascript
复制
import collections
import csv

with open("Akvakulturregisteret.csv", newline="", encoding="iso-8859-1") as f:
    reader = csv.reader(f, delimiter=";")
    next(reader, None)
    next(reader, None)
    output = collections.defaultdict(set)
    for row in reader:
        company, species = row[2], row[12]
        output[species].add(company)

data = {
    k: len(v) for k, v in
    sorted(output.items(), key=lambda x: len(x[1]), reverse=True)
}

for species, companies in data.items():
    print(f"{species} - {companies}")

输出:

代码语言:javascript
复制
Laks - 315
Ørret - 306
Regnbueørret - 305
Torsk - 56
Sukkertare - 55
Butare - 50
Blåskjell - 49
Rognkjeks (felles) - 48
Fingertare - 45
Søl - 40
Østers - 37
Havsalat - 33
Berggylt - 32
Kamskjell - 31
Røye - 27
Kveite - 25
Stortare - 24
Hummer - 22
Fjærehinne uspes - 21
...
票数 0
EN

Stack Overflow用户

发布于 2020-11-13 17:22:08

引用您的代码,您不需要使用字典列表,您只需使用一本字典就可以将物种名称作为键保存,并将处理它们的公司数量作为值保存。

所以,在你打开的第一个文件中,你读到了物种,把它们放在字典中,并将它们初始化为零,第二个文件读取公司,并增加每个物种的价值。

代码语言:javascript
复制
import csv

species = dict()

with open('test.csv') as csvfile:
    reader = csv.reader(csvfile, delimiter=';')
    for row in reader:    
        try:
            specie = row[-13]

        except ValueError:
            continue
        species[specie] = []

print("Len {0}".format(len(species)))

with open('test.csv') as csvfile:
    reader = csv.reader(csvfile, delimiter=';')
    for row in reader:
        for key in species:
            if key == row[-13]:
                species[key].append(row[2]) 

for k, v in dict(species).items():
    print("Number of companies working on {0} is {1}".format(k, len(v)))

如果csv文件很大,我建议更改您的方法,不要读取该文件两次。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64824078

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档