gpt4 book ai didi

python - 如何打印位于文本文件中的不正确单词的行号?

转载 作者:太空宇宙 更新时间:2023-11-04 09:20:48 24 4
gpt4 key购买 nike

我有这段代码只打印不正确单词的行号。我希望它打印 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

这是打印字符所在的位置而不是它所在的行

我想让它打印行号,那么我应该在我的代码中更改什么?????

最佳答案

您可以完全重写这段代码来完成您提到的事情——这段代码的结构与您的要求没有任何关系。

由于您需要“文本文件中的行号”,因此您需要一个表示文本文件的对象(作为内存中的行列表,或作为打开的文件对象)。你说你有一个叫做 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 的细节是次要的——选择是将它们保留为函数还是仅将它们的代码内联嵌入到主要控制流中也是次要的.

关于python - 如何打印位于文本文件中的不正确单词的行号?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2892161/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com