使用文件列表创建数组?

时间:2018-05-14 15:44:07

标签: python arrays file numpy dictionary

所以我有一组制表符描述的文件,格式如下:

enter image description here

我想创建一个制表符描述的文件/表格,根据它们是出现在哪些特定文件中显示每个值的频率(在本例中为水果):

enter image description here

我对此问题的初步处理方法是将每个水果存储在defaultdict中,并将文件名和频率计数附加到文件中,如下所示:

import glob, os
from collections import defaultdict

file_list = glob.glob(input_directory + '*.txt')

master_list = defaultdict(list)
for file in file_list:
    shortname = os.path.basename(file)
    with open(file) as input:
        for line in file:
            info = line.rstrip().split('\t')
            fruit,frequency = info[0],info[1]
            master_list[fruit].append((shortname,frequency))

但是在收集了所有这些信息之后,我对于如何检查特定水果是否存在于某个文件中并输出它没有太多想法。

我最初考虑使用numpy数组作为我的数据结构,因为你可以修改数组中的各个元素(我相信)。

有没有办法检查特定水果是否作为每个文件中的相关频率值,如果是,那么最好的方法是什么以及导出该信息?

1 个答案:

答案 0 :(得分:0)

Imho看起来你想要使用pandas。您可以定义一个DataFrame并将每个文件的频率附加为列。

import pandas as pd

master_list = pd.DataFrame(index=['Apples', 'Oranges', 'Pears', 'Bananas'])
for file in file_list:
    shortname = os.path.basename(file)
    master_list = master_list.join(
        pd.DataFrame(index=master_list.index,
                     data={file: np.zeros(master_list.index.size)}))
    with open(file) as input:
        for line in file:
            info = line.rstrip().split('\t')
            fruit, frequency = info[0], info[1]
            master_list[file][fruit] += frequency

如果不计算频率,则需要将最后一行master_list[file][fruit] += frequency替换为master_list[file][fruit] = frequency