我正在使用此代码获取文本文件作为输入,并将其转换为csv文件作为输出。 csv文件有两列,一列用于单词,另一列用于单词计数。
from collections import Counter
file = open(r"/Users/abdullahtammour/Documents/txt/1984/1984.txt", "r", encoding="utf-8-sig")
wordcount={}
wordcount = Counter((file.read().split()))
for item in wordcount.items():
print("{}\t{}".format(*item), file=open("/Users/abdullahtammour/Documents/txt/1984/1984.csv", "a"))
file.close()
我想增强代码并添加两个功能: 第一(也是最重要的),我只想要输出文件中的单词,没有数字,没有诸如(*&-//。,!?)之类的字符,等等。 2将输出文件中的所有单词都转换为小写。
任何帮助将不胜感激。
答案 0 :(得分:1)
您可以使用字符串方法 isalpha()来检查单词中是否只有字母字符,还可以使用 lower()将其转换为小写案件。我假设您也不想在单词中使用撇号或其他标点符号,但是如果可以的话,可以使用replace去除此类字符,如下所示:
word.replace("'",'').isalpha()
打开一个文件比打开和关闭文件一千次更好,这是通过在循环主体中打开文件来完成的。如果涉及缓冲,它不仅效率低下,而且可能会产生奇怪的结果。
我用一个'with'子句重写了它,大致等于在该子句的开头打开文件,然后在结尾将其关闭。
不那么重要,但是您可以在 print()中使用'sep'关键字,而不是像这样手动插入标签:
print(arg1, arg2, sep='\t')
修改您的代码:
from collections import Counter
file = open(r"/Users/abdullahtammour/Documents/txt/1984/1984.txt", "r", encoding="utf-8-sig")
wordcount={}
wordcount = Counter((file.read().split()))
file.close()
with open("/Users/abdullahtammour/Documents/txt/1984/1984.csv", "w") as file:
for word, count in wordcount.items():
if word.isalpha():
print(word.lower(), count, sep='\t', file=file)