【问题标题】:Text file Converter (replacing unknown words)文本文件转换器(替换生词)
【发布时间】:2022-11-25 20:26:40
【问题描述】:

我大约在 3 周前开始玩 Python 和编程,所以要温柔点;)

我尝试做的是按照我希望的方式转换文本文件,文本文件具有相同的模式,但我想替换的词是未知的。所以程序必须首先找到它们,设置一个模式然后将它们替换为我想要的单词。

For example:
xxxxx
xxxxx
Line3 - word - xxxx xxxx
xxxxx xxxx
word
word
xxxx word

Legend:
xxxxx = template words, present in every file
word = random word, our target

我能够本地化单词的第一次出现,因为它总是出现在文件的同一个地方,从那时起它随机出现。

我的代码:


f1 = open('test.txt', 'r')
f2 = open('file2.txt', 'w')

pattern = ''
for line in f1.readlines():
    if line.startswith('Seat 1'):
        line = line.split(' ', 3)
        pattern = line[2]
        line = ' '.join(line)
        f2.write(line)
    elif pattern in line.strip():
        f2.write(line.replace(pattern, 'NewWord'))
    else:
        f2.write(line)
f1.close()
f2.close()

这段代码不起作用,怎么了?

【问题讨论】:

    标签: python text replace converters


    【解决方案1】:

    欢迎来到 Python 的世界!

    我相信您走在正确的轨道上并且非常接近正确的解决方案,但是我看到了一些可能导致您的程序无法按预期运行的潜在问题。

    1. 如果你想看看一个字符串是否等于另一个,我会使用==而不是is(更多信息参见this答案)
    2. 读取文件时,行以 结尾,这意味着您的变量 line 可能永远不会匹配您的单词。要解决此问题,您可以使用 strip,它会自动删除前导和尾随的“空格”字符(如空格或换行符)
      elif line.strip() == pattern:
      
      1. 这不是一个真正的问题,而是一个建议,因为您才刚刚起步。处理文件时,强烈建议使用 Python 提供的 with 语句(参见 question 和/或 tutorial

      更新:

      我看到您可能将单词 be 包含在该行中,而不是按照第 1 点中的建议使用 ==,您可以使用 in,但您需要颠倒顺序,即

      elif pattern in line:
      

    【讨论】:

      【解决方案2】:

      抱歉耽搁了,有一些私人问题。

      用过这个: elif pattern in line.strip(): f2.write(line.replace(pattern, 'NewWord'))

      它在文本的某些地方有效,而在其他地方则无效。 例如,在一行中,它会在句子的每个字母和空格之间随机放置“新词”。

      Original sentence:
      Car is running.
      After:
      NewWordCNewWordaNewWordrNewWordiNewWords...
      

      更新了原始帖子中的代码。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-01-30
        • 1970-01-01
        • 2014-11-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多