繁体   English   中英

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

[英]Python create new column and store data in .CSV file

我已经在Python脚本中堆叠了一些文件,尝试打开.txt文件,从该文件中列出单词,计算单词出现的次数(计数器),然后将其放入.csv文件中。 我的文件的名称来自1870.txt-1892(1871,1872,1873..1892.txt)。 那里的所有内容都可以正常工作,但是我希望将每个文件放在下一列中。

def putInExcel(outputt):
    i = 1790
    while i < 1892:
        inputt = str(i) + '.txt' #Making text file name

        writefile = open(outputt)
        writer = csv.writer(writefile)

        with open(inputt) as file:      #Separating each word and storing in list
            text = file.read().lower()
            text = re.sub('[^a-z\ \']+', " ", text)
            words = list(text.split())

            for word in words:
                cnt[word] += 1
            for key, count in cnt.iteritems(): #De-dent this block
                writer.writerow([key,count]) #Output both the key and the count

        writefile.close() 
        i = i+1

该脚本正在运行,但是将其全部存储在一个列中。 有人知道吗? 谢谢!

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

____     | 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的内容进行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(...)            

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM