from glob import glob
pattern = "D:\\report\\shakeall\\*.txt"
filelist = glob(pattern)
def countwords(fp):
with open(fp) as fh:
return len(fh.read().split())
print "There are" ,sum(map(countwords, filelist)), "words in the files. " "From directory",pattern
import os
uniquewords = set([])
for root, dirs, files in os.walk("D:\\report\\shakeall"):
for name in files:
[uniquewords.add(x) for x in open(os.path.join(root,name)).read().split()]
print "There are" ,len(uniquewords), "unique words in the files." "From directory", pattern
到目前为止,我的代码就是这个。这会计算D:\report\shakeall\*.txt
问题是,例如,此代码会识别code
code.
和code!
个不同的字词。因此,这不能解决确切数量的独特单词。
我想使用Windows文本编辑器从42个文本文件中删除特殊字符
或制定解决此问题的例外规则。
如果使用后者,我的代码怎么样?
让它直接修改文本文件?或者做一个不计算特殊字符的异常?
答案 0 :(得分:8)
import re
string = open('a.txt').read()
new_str = re.sub('[^a-zA-Z0-9\n\.]', ' ', string)
open('b.txt', 'w').write(new_str)
它会将每个非字母数字字符更改为空格。
答案 1 :(得分:1)
我很新,我怀疑这是非常优雅的,但是一个选项是在读取它们之后取出你的字符串并通过string.translate()运行它们以去除标点符号。 Here is the Python documentation for it版本2.7(我认为您正在使用)。
就实际代码而言,它可能是这样的(但也许比我更好的人可以确认/改进它):
fileString.translate(None, string.punctuation)
其中“fileString”是open(fp)读入的字符串。“None”代替转换表(通常用于将某些字符实际更改为其他字符),以及第二个参数, string.punctuation(包含所有标点符号的Python字符串常量)是一组将从字符串中删除的字符。
如果以上操作不起作用,您可以按如下方式修改它:
inChars = string.punctuation
outChars = ['']*32
tranlateTable = maketrans(inChars, outChars)
fileString.translate(tranlateTable)
我通过快速搜索找到了类似问题的其他几个答案。我也会将它们链接到这里,以防你可以从中获得更多。
Removing Punctuation From Python List Items
Remove all special characters, punctuation and spaces from string
Strip Specific Punctuation in Python 2.x
最后,如果我所说的完全错误,请发表评论并将其删除,以便其他人不会尝试我所说的内容并感到沮丧。
答案 2 :(得分:0)
import re
然后替换
[uniquewords.add(x) for x in open(os.path.join(root,name)).read().split()]
通过
[uniquewords.add(re.sub('[^a-zA-Z0-9]*$', '', x) for x in open(os.path.join(root,name)).read().split()]
这会在将每个单词添加到集合之前从每个单词中删除所有尾随的非字母数字字符。