【发布时间】:2016-06-23 01:06:01
【问题描述】:
我的程序查看文本文件的文件夹并生成我正在查看“SS”和“DS”的两个功能的计数以及它们出现的次数。所以我建立了一个字典,列出了这个特征以及它在文本中出现的次数。
我希望我的 SS 字典写出到一个 csv 文件,而 DS 字典写出到另一个 csv 文件。
到目前为止,这是我的代码:
import glob
import re
path = "tagged texts\*.txt"
#establish counts and dictionaries
list_SS = []
list_DS = []
SScounts = {}
DScounts = {}
#generate counts of the features
for file in glob.glob(path):
line_count = 0
with open(file, encoding='utf-8', errors='ignore') as file_in:
text = file_in.readlines()
for line in text:
word = line.split('_')
if word[2] == "SS":
list_SS.append(word[0])
elif word[2] == "DS":
list_DS.append(word[0])
#create dictionary for SS and write out results to file
file1_out = open("SS_counts.csv", "w+")
for w in list_SS:
SScounts[w] = SScounts.get(w,0) + 1
for i in sorted(SScounts, key = SScounts.get, reverse=True):
file1_out.write(str(i) + "," + str(SScounts[i]) + "\n")
#create dictionary for DS and write out results to file
file2_out = open ("DS_counts.csv", "w+")
for w in list_DS:
DScounts[w] = DScounts.get(w,0) + 1
for i in sorted(DScounts, key = DScounts.get, reverse=True):
file2_out.write(str(i) + "," + str(DScounts[i]) + "\n")
SS 字典出来就好了,这是 csv 文件中的结果:
nisha,41
rasha,19
rikusha,13
apisha,11
nishashi,8
...
问题是第二个文件,DS 文件变成空白,里面什么都没有。在对字典中的变量名进行一些摆弄之前,我会将 SS 字典的结果写到两个文件中。
在问过我的教授后,我创建了两本词典,他说可以从一本词典中完成,但使用两本会更简单。而且我想我可以为 DS 结果编写一个单独的 python 脚本,但我想在同一个脚本中做这两个。
Sooo,怎么了?为什么第二个字典没有写入第二个文件?
【问题讨论】:
-
PDB 在这种情况下是你的朋友。如果您不熟悉它,那么假设文件不是很大,我会将 list_SS.append(word[0]) 更改为 pass 并将 list_DS.append(word[0]) 更改为 print("Found DS")。如果没有任何显示,那么您知道您的问题在该行之上(我猜这些文件是不同的)。如果你打印了一些东西,那么下面的问题就是问题所在。或者,在第一个 for 语句之后 print(len(list_DS)) 查看错误在哪一半代码中。
-
您应该养成在完成文件后关闭文件的习惯,例如
file1_out.close()。更好的是,您应该养成使用with语句来使用文件的习惯: with open("filename") as f: for line in f: # ... do stuff ... -
我们可以运行一些测试用例吗?
-
@ivan7707 我使用了 print 语句,发现我的 list_DS 中没有显示任何内容。然后我意识到到底发生了什么,我通过另一个脚本运行文本文件,该脚本为项目分配了 V-SS 或 V-DS 的标签,当我创建一个额外的标签字段时,我已将 V-SS 更改为“SS”。我忘记将 V-DS 更新为 DS。因此我的 DS 没有被填充。我更改了另一个程序并对 DS 进行了更新,现在它可以正常工作了。愚蠢的错误。
标签: python csv dictionary