0

我在 Python 中有以下脚本,旨在查找其中包含两个或多个元音的单词并将结果输出到 txt 文件。该脚本当前正在运行,但输出文件为空。我尝试了几种不同的方法都无济于事,知道为什么输出文件是空白的吗?我正在使用(重新)导入将输入视为正则表达式。

#!C:\Python33\python.exe

import re

file = open("Text of Steve Jobs' Commencement address (2005).htm");
output = open('twoVoweledWordList.txt', 'w');

for word in file.read():
   if len(re.findall('[aeiouy]', word)) >= 2:
      match == True;
      while True :
        output.write(word, '\n');

        file.close()
        output.close()
4

3 回答 3

5

您要求一次阅读一个单词的更好方法。干得好:

with open(input_file_name, "rt") as f:
    for line in f:
        for word in line.split():
            # do something with each word here

注释:

  • 一般来说,我尽量避免使用内置的 Python 功能作为变量名。由于file它是 Python 2.x 中的内置程序,因此语法着色文本编辑器会将其标记为不同的颜色……还不如只f用于变量名。
  • 最好使用with语句。很清楚,在所有版本的 Python 中,它都会确保您的文件在完成后正确关闭。(在这里没关系,但这确实是最佳实践。)
  • open()返回一个可以在for循环中使用的对象。您将一次从文件中获得一行输入。
  • line.split()使用任何“空白”(空格、制表符等)将行拆分为单词

我不知道你是否见过生成器函数,但是你可以将上面的双重嵌套for循环包装成一个生成器函数,如下所示:

def words(f):
    for line in f:
        for word in line.split():
            yield word

with open(input_file_name, "rt") as f:
    for word in words(f):
        # do something with word

我喜欢像这样隐藏机器。如果你需要让分词更复杂,复杂的部分与实际处理单词的部分很好地分开。

于 2013-10-29T01:24:57.130 回答
1

当您使用with语句时,您不必担心显式关闭文件。而且y不是元音,我相信。所以,我从我的答案中删除了它。

import re

with open("Input.txt") as inputFile, open("Output.txt", "w") as output:
    for line in inputFile:
        for word in line.split():
            if len(re.findall('[aeiou]', word)) >= 2:
                output.write(word + '\n')
于 2013-10-29T01:31:51.153 回答
0

虽然 steveha 说得很好,但以防万一你更喜欢 for 循环:-

import re

file = open("Text of Steve Jobs' Commencement address (2005).htm")
output = open('twoVoweledWordList.txt', 'w')

for line in file:
    for word in line.split():
       if len(re.findall('[aeiouy]', word)) >= 2:
          output.write(word + '\n')
于 2013-10-29T01:31:05.617 回答