-1

我有一个输出,其中每一行包含一个列表,每个列表在连字符后包含一个句子的一个单词。它看起来像这样:

['I']
['am']
['a']
['man.']
['I']
['would']
['like']
['to']
['find']
['a']
['so','lu','tion.'] 
(let's say it's hyphenated like this, I'm not a native English speaker)

etc.

现在,我想做的是将此输出写入一个新的 .txt 文件,但是每个句子(当列表中的项目包含一个点时句子结束)都必须写入一个换行符。我想将以下结果写入此 .txt 文件:

I am a man.
I would like to find a so,lu,tion.
etc.

所有这一切之前的编码如下:

with open('file.txt','r') as f:
    for line in f:
        for word in line.split():
            if h_en.syllables(word)!=[]:
                h_en.syllables (word)
            else:
                print ([word])

我想要的结果是一个每行包含一个句子的文件。句子的每个单词都由它的连字符版本表示。

有什么建议么?

十分感谢。

4

3 回答 3

2

像这样的基本东西似乎可以满足您的需求:

def write_sentences(filename, *word_lists):
  with open(filename, "w") as f:
    sentence = []
    for word_list in word_lists:
      word = ",".join(word_list) ##last edit
      sentence.append(word)
      if word.endswith("."):
        f.write(" ".join(sentence))
        f.write("\n")
        sentence = []

使用输出文件名输入write_sentences函数,然后将每个单词列表作为参数。如果您有一个单词列表列表(例如[['I'], ['am'], ...]),则可以*在调用该函数时使用来传递所有内容。

编辑:更改以使其与答案的最新编辑一起使用(单词列表中有多个单词)

于 2013-10-26T15:54:26.343 回答
1

这个简短的正则表达式在多行模式下编译时可以满足您的需求:

>>> regex = re.compile("\[([a-zA-Z\s]*\.?)\]$",re.MULTILINE)`
>>> a = regex.findall(string)
>>> a
[u'I', u'am', u'a man.', u'I', u'would like', u'to find', u'a solution.']

现在您只需操作列表,直到获得您想要的结果。下面是一个示例,但还有更多方法可以做到这一点:

>>> b = ' '.join(a)
>>> b
'I am a real man. I want a solution.'
>>> c = re.sub('\.','.\n',b)
>>> print(c)
'I am a real man.'
' I want a solution.'
>>> with open("result.txt", "wt") as f:
        f.write(c)
于 2013-10-26T16:45:36.387 回答
0
words = [['I'],['am'],['a'],['man.'],['I'],['would'],['like'],['to'],['find'],['a'],['so','lu','tion.']]

text = "".join(
    "".join(item) + ("\n" if item[-1].endswith(".") else " ") 
        for item in words)

with open("out.txt", "wt") as f:
    f.write(text)
于 2013-10-26T16:23:02.053 回答