首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >将两个csv文件合并到字典列表中

将两个csv文件合并到字典列表中
EN

Stack Overflow用户
提问于 2019-05-31 00:32:54
回答 1查看 34关注 0票数 0

我有一个任务要做,我被卡住了,因为无论我做什么,它似乎都不起作用。

所以我必须保存csv文件。首先调用persons_file,它包含标题行: id、姓名、姓氏。以及包含id、person_id、site的visits_file。我必须编写一个名为merge的函数,它将文件作为参数(都是StrionIO类型)并返回每个用户的访问次数的字典列表:

代码语言:javascript
复制
[ {
 "id": (person's id),
 "name": (person's name),
 "surname": (person's surname),
 "visits": (number of visits)
 } ]

我想出了这个,我不知道我的错误在哪里。

代码语言:javascript
复制
import io

def merge(persons_file,visits_file):
    line_counter = 0
    return_list = []
    list_of_person_ids = []
    visits = 0

    for row in visits_file:
        if line_counter == 0:
            line_counter+=1
            continue
        list_of_person_ids.append(row.split(',')[1])

    line_counter = 0

    for row in persons_file:
        if line_counter == 0:
            line_counter+=1
            continue
        help_dict = {}
        split_row = row.split(',')
        help_dict['id'] = split_row[0]
        help_dict['name'] = split_row[1]
        help_dict['surname'] = split_row[2][:len(split_row[2])-1]
        if split_row[0] in list_of_person_ids:
            visits = list_of_person_ids.count(split_row[0])
        help_dict['visits'] = str(visits)
        return_list.append(help_dict)
        visits=0
    return return_list

file1 = open('persons_file.csv' , mode='r')
file2 = open('visits_file.csv' , mode='r')
persons_file_arg = io.StringIO(file1.read())
visits_file_arg = io.StringIO(file2.read())

list_of_visits = merge(persons_file_arg,visits_file_arg)
for i in list_of_visits:
    print(i)
file1.close()
file2.close()

如果有人能帮我,我会很高兴的。

EN

回答 1

Stack Overflow用户

发布于 2019-05-31 01:41:23

问题出在哪里?是输出不是你所期望的,还是你得到了一个异常?您的代码看起来应该可以达到您想要的结果,但我有几个建议可以简化事情。

  1. 查看collections.Counter,然后可以调用count_of_visits_by_person_id = Counter(list_of_person_ids)获得以下形式的结果:{person_id: number_of_visits, ...}。然后,您可以使用它在下一个for循环中简单地查找访问次数。例如:

代码语言:javascript
复制
from collections import Counter

...

count_of_visits_by_person_id = Counter(list_of_person_ids)

for row in persons_file:
    if line_counter == 0:
        line_counter += 1
        continue

    help_dict = {}
    split_row = row.split(',')

    help_dict['id'] = split_row[0]
    help_dict['name'] = split_row[1]
    help_dict['surname'] = split_row[2][:-1]  
   # [:len(split_row[2]) - 1] is equivalent to [:-1]
   # I assume you are stripping whitespace from the right side,
   # which can also be accomplished using split_row[2].rstrip()

    if split_row[0] in count_of_visits_by_person_id:
        visits = count_of_visits_by_person_id[split_row[0]]
    else:
        visits = 0
    help_dict['visits'] = str(visits)

    return_list.append(help_dict)

  1. 通常更简单、更安全的打开文件的方法是使用with语句。下面是一个例子:

代码语言:javascript
复制
with open('visits_file.csv', mode='r') as visits_file:
   row = visits_file.readline()
   while row:
       row = visits_file.readline()  # Skips the first line
       list_of_person_ids.append(row.split(',')[1])
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56382173

复制
相关文章

相似问题

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