重新格式化文本文件

Re-formatting a text file

我是 Python 的新手。我有一个文本文件,里面全是常见的拼写错误。单词的正确拼写以 $ 字符为前缀,以及它前面单词的所有拼写错误版本;每行一个。

mispelling.txt:

$year
eyar
yera
$years
eyars
eyasr
yeasr
yeras
yersa

我想根据 mispelling.txt 创建一个新的文本文件,格式如下: new_mispelling.txt:

eyar->year
yera->year
eyars->years
eyasr->years
yeasr->years
yeras->years
yersa->years

单词的正确拼写在其错误拼写的右侧,以->分隔;在同一条线上。


问题:

如何读入文件,将 $ 作为一个新词读取,从而在我的输出文件中读取一个新行,传播输出文件并保存到磁盘?

这样做的目的是让我收集的数据与 “所有” 常见拼写错误的单词的开源维基百科条目 dataset 具有相同的格式,不包含我自己的单词和拼写错误条目。

当您逐行处理文件时,如果您找到以 $ 开头的单词,请将其设置为“当前活动的正确拼写”。然后每一行都是该单词的拼写错误,因此将其格式化为字符串并将其写入输出文件。

current_word = ""
with open("mispelling.txt") as f_in, open("new_mispelling.txt", "w") as f_out:
    for line in f_in:
        line = line.strip() # Remove whitespace at start and end 
        if line.startswith("$"):
            # If the line starts with $
            # Slice the current line from the second character to the end
            # And save it as current_word
            current_word = line[1:] 
        else:
            # If it doesn't start with $, create the string we want
            # And write it. 
            f_out.write(f"{line}->{current_word}\n")

对于您的输入文件,这会给出:

eyar->year
yera->year
eyars->years
eyasr->years
yeasr->years
yeras->years
yersa->years

f"{line}->{current_word}\n" 构造称为 f-string,用于 python 3.6+ 中的字符串插值。

正则表达式解决方案:

您可以使用模式 '$(\w+)(.*?)(?=$|$)' 并将以 $ 开头的每个值与 -> 的后续值连接起来,然后通过 \n 将所有这些值连接到组中捕获,然后最后通过 \n 加入所有这些值。确保使用 re.DOTALL 标志,因为它是一个多行字符串:

import re
txt='''$year
eyar
yera
$years
eyars
eyasr
yeasr
yeras
yersa'''

print('\n'.join('\n'.join('->'.join((v, m.group(1)))
                          for v in m.group(2).strip('\n').split('\n')) for m in
                re.finditer('$(\w+)(.*?)(?=$|$)', txt, re.DOTALL)))

输出:

eyar->year
yera->year
eyars->years
eyasr->years
yeasr->years
yeras->years
yersa->years

我要为你留下文件 read/write,假设这不是你要问的问题