-1

我需要用不同的单词替换文本文档中长度为 4 的所有单词。

例如,如果文本文档包含短语“我喜欢吃非常热的汤”,那么“喜欢”、“非常”和“汤”将被替换为“某物”

然后,它不需要覆盖原始文本文档,而是需要使用更改后的短语创建一个新文档。

这是我到目前为止所拥有的:

def replacement():  
    o = open("file.txt","a") #file.txt will be the file containing the changed phrase
    for line in open("y.txt"):  #y.txt is the original file
        line = line.replace("????","something")  #see below
        o.write(line + "\n")
    o.close()

我试过改变“????” 类似于

(str(len(line) == 4)

但这没有用

4

4 回答 4

1
with open('file.txt', 'a') as write_file:
    with open('y.txt') as read_file:
        for line in read_file.readlines():
            # Replace the needed words
            line = line.replace('????', 'something')
            write_file.write(line)
于 2012-11-09T18:29:28.757 回答
1

首先让我们创建一个函数,something如果给定一个长度为 4 的单词,则返回,否则返回:

def maybe_replace(word, length=4):
  if len(word) == length:
    return 'something'
  else:
    return word

现在让我们来看看你的 for 循环。在每次迭代中,您都有一行原始文件。让我们把它分解成单词。Python 为我们提供了split我们可以使用的函数:

   split_line = line.split()

默认是在空格上分割,这正是我们想要的。如果您需要,还有更多文档。

现在我们想要获取maybe_replace在每个单词上调用我们的函数的列表:

  new_split_line = [maybe_replace(word) for word in split_line]

join现在我们可以使用以下方法将这些备份连接在一起:

  new_line = ' '.join(new_split_line)

并将其写回我们的文件:

  o.write(new_line + '\n')

所以我们的最终功能将是:

def replacement():  
  o = open("file.txt","a") #file.txt will be the file containing the changed phrase
  for line in open("y.txt"):  #y.txt is the original file
    split_line = line.split()
    new_split_line = [maybe_replace(word) for word in split_line]
    new_line = ' '.join(new_split_line)
    o.write(new_line + '\n')
  o.close()
于 2012-11-09T18:31:27.580 回答
1

这将保留您拥有的额外空间,因为使用的其他解决方案str.split()不会。

import re

exp = re.compile(r'\b(\w{4})\b')
replaceWord = 'stuff'
with open('infile.txt','r') as inF, open('outfile.txt','w') as outF:
    for line in inF:
        outF.write(exp.sub(replaceWord,line))

这使用正则表达式来替换文本。这里使用的正则表达式有三个主要部分。第一个匹配单词的开头:

\b

第二部分完全匹配四个字母(所有字母数字字符和_):

(\w{4})

最后一部分和第一部分一样,它匹配一个单词的结尾

\b
于 2012-11-09T19:22:42.970 回答
0

这似乎是家庭作业,所以这里有一些关键概念。

当你读取一个文件时,你会lines得到strings. 您可以使用名为 的字符串方法将a 拆分line为 a ,就像这样。 . 这将创建一个单词列表。 list.split()words = line.split()

现在, alist可迭代的,这意味着您可以在其上使用 for 循环,并一次对其中的一项进行操作list。你想检查它有多长word,所以你必须迭代words你的循环,并用它做一些事情。您已经接近弄清楚如何使用len(word).

您还需要一个地方来存储您的最终信息。在循环之外,您需要创建一个listfor 结果,以及.append()您在进行过程中检查过的单词。

最后,您需要对line文件中的每个都执行此操作,这意味着第二个for 循环遍历文件。

于 2012-11-09T18:27:51.303 回答