所以基本上我正在编写一个程序,我需要在其中包含一个包含大写字母的文件,这些文件可能会或可能不会被空格或新行分隔,并将生成器返回到文件中的字母。
例如:
Z FM
TM CC
将返回一个输出为" Z"," F"," M"," T",&#34的发电机; M"" C"" C"
该函数应该是一个生成器,因此它一次只能加载字母而不是整个文件。
无论如何,这是我到目前为止所拥有的。有人告诉我哪里出错了?
def buildGen:
with open(filename) as sample:
for word in sample:
for ch in word:
yield ch
答案 0 :(得分:2)
您的代码存在许多问题:
您使用错误的语法定义函数(def buildGen:
< - 括号应该遵循)。
您对输出的描述意味着您需要解决空格字符。
以下输出示例中的输出(假设您的文件为stuff.txt
):
# Note `buildGen` takes now `filename`.
def buildGen(filename):
with open(filename) as sample:
for word in sample:
for ch in word:
# Only yield non-whitespace.
if ch.strip():
yield ch
print list(buildGen('stuff.txt'))
答案 1 :(得分:0)
您使用的是错误的缩进和错误的变量名称dna。你需要写这样的东西:
def buildGen:
with open(filename) as sample:
for line in sample.read().splitlines():
for ch in line.split():
yield ch
答案 2 :(得分:0)
假设输出中只包含uppercase letters
only load in letters at a time instead of the entire file
:
def buildGen():
with open(filename) as sample:
while True:
ch = sample.read(1)
if ch:
if 'A' <= ch <= 'Z':
yield ch
else:
break
答案 3 :(得分:-1)
你的逻辑是错误的,根据我的理解,你试图通过调用buildGen
函数来读取文件并生成文件中的所有字母。
当您使用with语句时,它将每次关闭文件,并且您总是仅以第一行结束。另一点是你打开文件作为样本并使用dna本身会引发错误。
您可以使用此
实现相同目标fp = open('sample.txt')
# generator for the data
data_generator = (c for c in fp.read())
for char in data_generator:
print char
def read_chars(fp):
for line in fp