需要在Python中读取csv文件(当csv文件是多个输入文件时)

  • 本文关键字:文件 csv Python 读取 python csv
  • 更新时间 :
  • 英文 :


我有一个学校作业,要求我写一个程序,首先读取输入文件的名称,然后使用csv.reader()方法读取该文件。该文件包含一个以逗号分隔的单词列表。程序应该输出单词及其频率(每个单词在文件中出现的次数),没有任何重复。我已经能够弄清楚如何为一个特定的输入文件做到这一点,但程序需要能够读取多个输入文件。这是我目前所看到的:

with open('input1.csv', 'r') as input1file:
    csv_reader = csv.reader(input1file, delimiter = ',')
    for row in csv_reader:
        new_row = set(row)
        
    for m in new_row:
        count = row.count(m)
        print(m, count)

这是我得到的:

woman 1
man 2
Cat 1
Hello 1
boy 2
cat 2
dog 2
hey 2
hello 1 

这对input1文件(几乎)有效,除了每次运行它时它都会改变顺序。我还需要它为另外两个输入文件工作吗?

样本CSV

hello,cat,man,hey,dog,boy,Hello,man,cat,woman,dog,Cat,hey,boy

请看下面的示例代码,我已经注释了它,以便您理解它的作用和原因。

至于你们执行的订单不同是因为使用了set。根据定义,set是无序的。

还要注意,在您的实现中,您将传递两次行,一次将其转换为集合,另一次用于计数。除此之外,如果文件包含不止一行,那么逻辑就会失败,因为只有在读取文件的最后一行时才会到达计数部分。

import csv

def count_things(filename):
    with open(filename) as infile:
        csv_reader = csv.reader(infile, delimiter = ',')
        result = {}
        for row in csv_reader:
            # go over the row by element
            for element in row:
                # does it exist already?
                if element in result:
                    # if yes, increase count
                    result[element] += 1
                else:
                    # if no, add and set count to 1
                    result[element] = 1
    # sorting, explained in detail here:
    # https://stackoverflow.com/a/613218/9267296
    return {k: v for k, v in sorted(result.items(), key=lambda item: item[1], reverse=True)}
    # you could just return unsorted result by using:
    # return result

for key, value in count_things("input1.csv").items():
    # iterate over items() by key/value pairs
    # see this link:
    # https://www.w3schools.com/python/python_dictionaries_access.asp
    print(key, value)

相关内容

  • 没有找到相关文章

最新更新