为什么打印文件中所有单词的代码不起作用?

时间:2017-06-22 06:27:23

标签: python

我不想一次打印文件的所有内容,因为我稍后会收集这些文字。这是我的代码:

file = open('file analysis.txt', 'r')
chars = ''
for line in file:
    for ch in file:
        chars = chars + ch
        if ch == ' ':
            print(chars)
file.close()

将在学校停留几个小时,因此可能无法立即回答问题。

2 个答案:

答案 0 :(得分:0)

你得到的几乎是正确的,如果你想迭代文件的行,然后遍历一行中的每个字符,请将你的第二个for更改为for ch in line:

正如kuro在评论中提到的那样,您当前只在遇到空格字符而不是换行符时打印读取的单词。您print现在的工作方式是在每个空格后打印所有读取的单词,因此示例输出可能如下所示:

Lorem 
Lorem ipsum 
Lorem ipsum dolor 
Lorem ipsum dolor sit 
Lorem ipsum dolor sit amet, 
Lorem ipsum dolor sit amet, consetetur 
Lorem ipsum dolor sit amet, consetetur sadipscing 

如果您只想打印遇到的每个新单词,可能需要在打印后重置​​chars = ''。要在每个单词后删除换行符,您可以使用print(chars, end='')

with语句中打开文件也更安全,这样就可以为您处理关闭文件。

然后你的代码看起来像这样:

with open('file analysis.txt', 'r') as file:
    chars = ''
    for line in file:
        for ch in line:
            chars = chars + ch
            if ch == ' ':
                print(chars, end='')
                chars = ''

这将提供以下输出:

Lorem ipsum dolor sit amet, consetetur sadipscing

请注意,您只能在空格处打印,因此当您的最后一个单词后面没有空格时,它将被读取但不会被打印。

答案 1 :(得分:0)

一些事情。

首先,而不是使用file.open()file.close(),您应该使用

with open('file analysis.txt', 'r') as f:

会自动为您关闭文件。 另外,您应该使用for ch in line:而不是for ch in file: 因为要打印行中的每个字符,而不是文件中的每一行两次。 同样,您希望每次打印后将chars变量重置为空字符串,这样就不会多次打印相同的字词。 最后,python的print()函数默认在每个print语句后创建一个换行符。您可以通过使用空字符串替换行尾字符的print(string, end='')来避免这种情况。

考虑到所有这些因素,您的代码变为:

with open('file analysis.txt', 'r') as f:
chars = ''
for line in f:
    for ch in line:
        chars += ch
        if ch == ' ':
            print(chars, end='')
            chars = ''

如果您有兴趣详细了解print(string, end='')功能,请查看positional arguments vs keyword arguments有关with ... as语句的详细信息,请查看here