所以我正在创建一个函数来检查文件中的单词列表,并获取以某个字母开头的所有单词,然后将它们放入一个新文件中。到目前为止,这是我的代码: -
def getListBegin(c,ifile,ofile):
for word in ifile:
if word.startswith(c):
ofile.write(word)
它已经内置了两个文件的打开和关闭功能。这个当前函数列出了以字符'c'开头的所有单词,但我没有通过测试,因为它说“你的程序不应该以换行结束”
答案 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
。