我有一个任务要做,我被卡住了,因为无论我做什么,它似乎都不起作用。
所以我必须保存csv文件。首先调用persons_file,它包含标题行: id、姓名、姓氏。以及包含id、person_id、site的visits_file。我必须编写一个名为merge的函数,它将文件作为参数(都是StrionIO类型)并返回每个用户的访问次数的字典列表:
[ {
"id": (person's id),
"name": (person's name),
"surname": (person's surname),
"visits": (number of visits)
} ]
我想出了这个,我不知道我的错误在哪里。
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()
如果有人能帮我,我会很高兴的。
发布于 2019-05-31 01:41:23
问题出在哪里?是输出不是你所期望的,还是你得到了一个异常?您的代码看起来应该可以达到您想要的结果,但我有几个建议可以简化事情。
collections.Counter
,然后可以调用count_of_visits_by_person_id = Counter(list_of_person_ids)
获得以下形式的结果:{person_id: number_of_visits, ...}
。然后,您可以使用它在下一个for循环中简单地查找访问次数。例如: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)
with
语句。下面是一个例子: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])
https://stackoverflow.com/questions/56382173
复制相似问题