制作一个没有“最后一行”的单词列表的程序

时间:2016-05-04 16:18:58

标签: python

所以我正在创建一个函数来检查文件中的单词列表,并获取以某个字母开头的所有单词,然后将它们放入一个新文件中。到目前为止,这是我的代码: -

def getListBegin(c,ifile,ofile):
   for word in ifile:
      if word.startswith(c):
          ofile.write(word)

它已经内置了两个文件的打开和关闭功能。这个当前函数列出了以字符'c'开头的所有单词,但我没有通过测试,因为它说“你的程序不应该以换行结束”

4 个答案:

答案 0 :(得分:0)

当你这样做时

 for word in ifile:

你抓住每一条线。例如,也许你正在抓住

 word = "charlatan\n"

如果要求在将文字写入文件之前从文字中删除换行符,则应删除空格。

for word in ifile:
    word = word.strip()
    ...

如果您应该保留所有换行符(因此单词在不同的行上)并且只从最终条目中删除换行符,那么会更复杂一些。最简单的方法可能就是做你正在做的事情,然后在你读取文件的地方做第二遍,然后在没有最终字符的情况下写回来。

更新

根据您的评论,您只能从最后一个单词中删除换行符,将所有单词加载到列表中,然后只修改最后一个单词可能很有用:

 words = ifile.readlines()

 # now iterate through the list, keeping only the words you want

 # after words only contains the words you want, strip the newline from the final word
 words[-1] = words[-1].strip()

答案 1 :(得分:0)

您接近问题的方式是正确的。但是,编写代码的方式是检查行而不是单词。

def getListBegin(c,ifile,ofile):
    for line in ifile:
        words = line.rstrip('\n').split[' ']
        for word in words:
            if word.startswith(c):
                ofile.write(word)

答案 2 :(得分:0)

以下面的文字为例:

text = (
    "Lorem ipsum dolor sit amet, consectetur adipiscing elit. "
    "Vestibulum faucibus pulvinar congue. Donec malesuada "
    "scelerisque ex, at cursus ipsum. Sed eros ex, molestie "
    "eget vulputate in, cursus vitae odio. Duis eu nisi dolor. "
    "Suspendisse elit quam, tincidunt in odio in, rutrum dictum ipsum."
)

我们编写此函数来提取以给定字符开头的所有单词:

def starts_with(text, char):
    import re
    pattern = re.compile(r"\b[.{}]\w+".format(char))
    return pattern.findall(text)

以下是输出的外观:

>>> print(starts_with(text, 'i'))
['ipsum', 'ipsum', 'in', 'in', 'in', 'ipsum']

以下是单词列表中的相同内容:

>>> words_list = text.split()
>>> print(starts_with(str.join(' ', words_list), 'i'))
['ipsum', 'ipsum', 'in', 'in', 'in', 'ipsum']

如果要在文件中写入这些内容,可以按如下方式进行:

selected_word = starts_with(text, 'i')

with open('my_file.txt', 'w') as file:
    for word in selected words:
        print(word, file=file, end='\n')

这会将每个单词放在一个新行中。您可以将end='\n'替换为您喜欢的任何内容,例如空格,标签等。

您也可以考虑用CSV编写单词。将来管理起来会更容易。

没有print功能:

要在没有print功能的情况下进行编写,您可以执行以下操作:

found = starts_with(text, 'i')

file = open("foo.txt", "w")
file.seek(0, 0)
file.write(str.join('\n', found))

现在让我们测试一下:

file = open("foo.txt", "r")
file.seek(0, 0)
for index, __ in enumerate(found):
   line = file.readline()
   print ("Line No %d - %s" % (index+1, line))

file.close()

显示器:

Line No 1 - ipsum
Line No 2 - ipsum
Line No 3 - in
Line No 4 - in
Line No 5 - in
Line No 6 - ipsum

没有额外的行。

请注意,此处的关键是使用str.join('\n', found)准备将内容保存到文件中。

答案 3 :(得分:0)

正如其他人所说,你正在抓取换行终止的行并将它们写入你的outfile,所以预计该文件将以换行符结束。将解决方案定义为“在除了最后一行之外的每行末尾添加换行符”会出现问题:但是您不知道您写的任何给定单词是否是最后一个。相反,您可以尝试使用它:在除第一个之外的每一行的开头处添加换行符。

这不是最优雅的,但它得到了重点:

def getListBegin(c,ifile,ofile):
    newline = ''
    for word in ifile:
        if word.startswith(c):
            ofile.write(newline + word.strip())
            newline = '\n'

第一次写单词时,newline将为空白,您只需将单词写入文件而不带任何分隔符。之后,您编写的其他单词将添加\n