Python在.CSV文件中创建新列并存储数据

时间:2016-05-13 22:07:12

标签: python csv io text-files counter

我已经在我的Python脚本中堆叠,我尝试打开.txt文件,从该文件中生成单词列表,计算单词出现的次数(计数器)并将其放入.csv文件中。我的文件的名字来自1870.txt - 1892(1871,1872,1873..1892.txt)。那里的一切都有效,但我希望每个文件都放在下一栏。

projectData['project-title']
projectData['process-description']
// etc.

此脚本正在运行,但它将所有内容存储在一列中。 有人有点想法吗?谢谢!

1 个答案:

答案 0 :(得分:0)

如果我理解正确,您需要一个包含每年/文件名列的表。在每列中,您需要一个数字频率计数。最左边的列是单词本身:

____     | 1790 | 1791 | 1792 | ...
Aachen       1      1     2
aardvark     1      0     0
aardwolf     0      1     0
abacus       1      2     2
acrimony     2      2     2
   :

你现在有一个相当简单的脚本,不必担心不同数据集之间的交互。当您尝试处理多个输入列表时,您必须"统一"他们不知何故。这就是为什么我在示例中显示带0的条目的原因。

我的建议是维持所有单词的setdictionary。完成后,这将是最左边的列。

对于每年/输入文件,您可以保留单独的计数。您可以将它们组织为两个并行列表:年份/文件名和计数字典:

All_words = set()
Headers = []     # 1791, 1792, ...
Word_counts = [] # {'a':1, 'baa':2}, {'a':1, 'abacus': 1}, ...

现在,当你循环遍历文件时,将文件名和空字典添加到标题/计数列表中:

for ... 1791 ...
    Headers.append(year)
    cnt = dict()
    Word_counts.append(cnt)

像现在一样计算你的话。但是当你计算一个单词时,也要将它添加到所有单词的集合中:

        cnt[word] += 1
        All_words.add(word)

最后,完成后,您必须按相同的顺序处理单词。因此,对All_words的内容进行排序并使用:

row = ['Word\Year']
row.extend(Headers)
csvfile.writerow(...)

for word in sorted(All_words):
    row = [word]  # Left column is word
    row.extend([yr.get(word, 0) for yr in Word_counts])
    csvfile.writerow(...)