繁体   English   中英

在文件的各行中找到一个单词,并将其分为两行

[英]Find a word in the lines in file and split it into two lines

我的输入文件(i.txt)如下:

പ്രധാനമന്ത്രി മന്‍മോഹന്‍സിംഗ്  നാട്ടില്‍ എത്തി  .  
അദ്ദേഹം മലയാളി അല്ല  കാരണം അദ്ദേഹത്തെ പറ്റി പറയാന്‍  വാക്കുകല്ളില്ല . 

我的连接词在列表中:

connectives=['കാരണം','അതുകൊണ്ട്‌ ','പക്ഷേ','അതിനാല്‍','എങ്കിലും','എന്നാലും','എങ്കില്‍','എങ്കില്‍പോലും',
'എന്നതുകൊണ്ട്‌ ','എന്ന']  

我想要的输出是(outputfile.txt):

പ്രധാനമന്ത്രി മന്‍മോഹന്‍സിംഗ്  നാട്ടില്‍ എത്തി  .  
അദ്ദേഹം മലയാളി അല്ല . 
അദ്ദേഹത്തെ പറ്റി പറയാന്‍  വാക്കുകല്ളില്ല . 

如果有2个连接词,则将其拆分。 我的代码是:

fr = codecs.open('i.txt', encoding='utf-8') 
fw = codecs.open('outputfile.txt', 'w')
for line in fr:
    line_data=line.split()
for x, e in list(enumerate(line_data)):
    if e in connectives:
        line_data[x]='.' 

代码未完成。

我认为您只是有一些缩进问题。 由于我使用的是python 2.7,因此我还向u''添加了u''以指定unicode。

您可能需要在加上回车符. 如果您希望将现有的线分为两行...

这是一个开始(但不是最终的):

import codecs

connectives=[u'കാരണം',u'അതുകൊണ്ട്‌ ',u'പക്ഷേ',u'അതിനാല്‍',u'എങ്കിലും',u'എന്നാലും',u'എങ്കില്‍',u'എങ്കില്‍പോലും',
u'എന്നതുകൊണ്ട്‌ ',u'എന്ന']  

fr = codecs.open('i.txt', encoding='utf-8') 
# fw = codecs.open('outputfile.txt', 'w')
for line in fr:
    line_data=line.split()
    for x, e in list(enumerate(line_data)):
        if e in connectives:
            line_data[x]='.\n'

    print " ".join(line_data).lstrip()

生成此输出(多余的空间,因为拆分位于一行的中间)。

പ്രധാനമന്ത്രി മന്‍മോഹന്‍സിംഗ് നാട്ടില്‍ എത്തി .
അദ്ദേഹം മലയാളി അല്ല .
 അദ്ദേഹത്തെ പറ്റി പറയാന്‍ വാക്കുകല്ളില്ല .

这是您可以执行的一种方法,一个字一个字地建立一个字符串,并在适当的地方添加.\\n

#!/usr/bin/python
# -*- coding: utf-8 -*-

connectives=set(['കാരണം','അതുകൊണ്ട്‌ ','പക്ഷേ','അതിനാല്‍','എങ്കിലും','എന്നാലും',
                 'എങ്കില്‍','എങ്കില്‍പോലും','എന്നതുകൊണ്ട്‌ ','എന്ന', '.'])

s=""

with open('i.txt') as file:
    for line in file:
        for word in line.split():
            if word in connectives:                
                s += '.\n'
            else:
                s += '{} '.format(word)

print s

请注意,我添加了'.' connectives列表的末尾,并使其成为set 集合是一种集合类型,可用于快速成员资格测试,例如代码if word in connectives: 我还决定使用str.formatword放入字符串中。 如果愿意,可以将word + ' '更改为此选项。

输出:

പ്രധാനമന്ത്രി മന്‍മോഹന്‍സിംഗ് നാട്ടില്‍ എത്തി .
അദ്ദേഹം മലയാളി അല്ല .
അദ്ദേഹത്തെ പറ്റി പറയാന്‍ വാക്കുകല്ളില്ല .

与其他答案不同,在第一行之后的每一行开始处的前导空格没有问题。

顺便说一句,如果您愿意使用列表推导 ,可以将代码压缩为:

#!/usr/bin/python
# -*- coding: utf-8 -*-

connectives=set(['കാരണം','അതുകൊണ്ട്‌ ','പക്ഷേ','അതിനാല്‍','എങ്കിലും','എന്നാലും',
                 'എങ്കില്‍','എങ്കില്‍പോലും','എന്നതുകൊണ്ട്‌ ','എന്ന', '.'])

with open('i.txt') as file:
    s = ''.join(['.\n' if word in connectives else '{} '.format(word) 
                 for line in file 
                 for word in line.split()])

print s

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM