首页 > 解决方案 > 蟒蛇 | 一致地重新格式化文本文件中的每一行

问题描述

我已经制作了自己的拼写错误单词的语料库

misspellings_corpus.txt

English, enlist->Enlish
Hallowe'en, Halloween->Hallowean

我的格式有问题。值得庆幸的是,它至少是一致的。

当前格式:

correct, wrong1, wrong2->wrong3

所需格式:

wrong1,wrong2,wrong3->correct

失败的尝试:

with open('misspellings_corpus.txt') as oldfile, open('new.txt', 'w') as newfile:
    for line in oldfile:
      correct = line.split(', ')[0].strip()
      print(correct)
      W = line.split(', ')[1].strip()
      print(W)
      wrong_1 = W.split('->')[0] # however, there might be loads of wrong words
      wrong_2 = W.split('->')[1]
      newfile.write(wrong_1 + ', ' + wrong_2 + '->' + correct)

输出new.txt(不工作):

enlist, Enlish->EnglishHalloween, Hallowean->Hallowe'en

解决方案:(受@alexis 启发)

with open('misspellings_corpus.txt') as oldfile, open('new.txt', 'w') as newfile:
  for line in oldfile:
    #line = 'correct, wrong1, wrong2->wrong3'
    line = line.strip()
    terms = re.split(r", *|->", line)
    newfile.write(",".join(terms[1:]) + "->" + terms[0] + '\n')

输出new.txt

enlist,Enlish->English
Halloween,Hallowean->Hallowe'en

标签: pythonpython-3.xlisttextslice

解决方案


假设所有逗号都是单词分隔符。为方便起见,我将用逗号箭头分隔每一行:

import re

line = 'correct, wrong1, wrong2->wrong3'
terms = re.split(r", *|->", line)
new_line = ", ".join(terms[1:]) + "->" + terms[0]
print(new_line)

您可以将其放回文件读取循环中,对吗?


推荐阅读