【发布时间】:2021-09-29 09:10:19
【问题描述】:
我正在为缩写构建一个自定义“翻译器”。它应该接受一个字符串输入,将其拆分为单个单词并将每个单词作为缩写返回。
示例:
Input: above and aloft
Returns: abv & alft
从 txt 文件中检索缩写词,其中缩写词和关键短语由制表符分隔。每一对都在单独的行上。
import csv
# Used to lowercase the library
file = open('lib.txt', 'r')
lines = [line.lower() for line in file]
with open('lib.txt', 'w') as out:
out.writelines(sorted(lines))
# Get user input
eng = input("Plain english input:")
# Split input into separate words
words = eng.split()
# Search every word in the file, return the first word (abbreviation) in the respective line
with open('lib.txt', newline='') as lib:
lib_reader = csv.reader(lib, delimiter='\t')
lib.seek(0)
print(words)
for x in words:
print('1')
lib.seek(0)
for lib in lib_reader:
print('2')
if x in lib:
print(lib[0])
break
无论出于何种原因,它运行良好,找到第一个单词,中断,返回第一个循环并在 lib.seek(0) 上给出错误。
AttributeError: 'list' object has no attribute 'seek'
据我了解,它必须将光标重置到文件中文本的开头才能开始搜索第二个单词。 seek() 是为了防止它退出循环并继续搜索下一个参数。
【问题讨论】:
-
for lib in lib_reader:是对变量lib的赋值,将其先前的值覆盖为打开的文件对象。 -
如果您将所有数据从
lib.txt读取到内存中会更简单(并且应该运行得更快)。