如何打印位于文本文件中的错误单词的行号?

时间:2010-05-23 14:46:10

标签: python

我有这段代码只打印错误单词的行号。 我希望它打印txt文件中不正确的单词的亚麻布。 我可以修改此代码吗?

# text1 is my incorrect words
# words is my text file where my incorrect word are in 

from collections import defaultdict
d = defaultdict(list)
for lineno, word in enumerate(text1):
    d[word].append(lineno)
print(d)

我现在已经完成了这个但是这会打印出它所在位置的字符,而不是字符的位置。 这是代码

import sys
import string

text = []
infile = open(sys.argv[1], 'r').read()
for punct in string.punctuation:
    infile = infile.replace(punct, "")
    text = infile.split()

dict = open(sys.argv[2], 'r').read()
dictset = []
dictset = dict.split()

words = []
words = list(set(text) - set(dictset))
words = [text.lower() for text in words]
words.sort()

def allwords(line):
    return line.split()
def iswrong(word):
    return word in words
for i, line in enumerate(text):
    for word in allwords(line):
        if iswrong(word):
            print(word, i))

该代码的输出为

millwal    342

这是打印角色所在的位置

我希望它能打印行号,以便我在代码中更改?????

1 个答案:

答案 0 :(得分:5)

你可以完全重写这段代码来做你提到的 - 这段代码的结构与你需要的东西没有任何关系。

由于您需要“来自文本文件的行号”,因此您需要一个表示文本文件的对象(作为内存中的行列表或作为打开的文件对象)。你说你有一个叫words(不清楚这是文件名还是Python变量标识符):将文本放在一个文件中(例如,作为变量)words和(不正确)名为text1的(某种类型的集合)中的单词是一个真正可怕的名称选择,可能是我在几十年中看到的最糟糕的 - 具有误导性。使用与变量含义更匹配的变量名称,除非您尝试让自己和其他人混淆。

给出输入文本的明确命名变量,例如text = open('thefile.txt'),以及确定单词是否不正确的一种不错的方法,比如函数def iswrong(word):...,编码所需内容的方式变得清晰:

for i, line in enumerate(text):
    for word in allwords(line):
        if iswrong(word):
            print word, i

allwords功能可能只是:

def allwords(line):
    return line.split()

如果你没有标点符号(用空格分隔的单词)或

import re

def allwords(line):
    return re.findall(r'\w+', line)

使用正则表达式。

如果是badwords是一组错误的字词,

def iswrong(word):
    return word in badwords

或反之,如果goodwords是所有正确单词的集合,

def iswrong(word):
    return word not in goodwords

iswrongallwords的详细信息是次要的 - 选择是将它们保留为函数还是仅将其代码嵌入到主要控制流中。