删除文件中的特定项目

时间:2014-05-15 05:33:39

标签: python list file

我的输入文件是:

അദ്ദേഹം --> മന്‍മോഹന്‍സിംഗ്  
അദ്ദേഹത്തെ --> അദ്ദേഹം --> മന്‍മോഹന്‍സിംഗ് 
അവന്‍ --> രാമന്‍ 
അവള്‍ക്ക് --> സീതയെ 
അവള്‍ --> അവള്‍ക്ക് --> സീതയെ 
അത്‌ --> പൂവ്‌ 
അവര്‍ --> അവള്‍ക്ക് --> സീതയെ , അവന്‍ --> രാമന്‍ , ലക്ഷ്മണന്‍
അവിടെ --> കോട്ടയത്ത്‌ 
അവര്‍ക്ക്‌ --> മന്‍മോഹന്‍സിംഗ് , അവള്‍ക്ക് --> സീതയെ , ലക്ഷ്മണന്‍ , അവന്‍ --> രാമന്‍ 
അവിടെ --> അവിടെ --> കോട്ടയത്ത്‌ 
അവന്‍ --> ലക്ഷ്മനനെ 
അവനെ --> ലക്ഷ്മണന്‍ 
അവള്‍ക്ക്‌ --> സീതയെ 
അവന്‍ --> രാമന്‍ 

我想要的输出文件包含:

അദ്ദേഹം --> മന്‍മോഹന്‍സിംഗ്  
അദ്ദേഹത്തെ --> മന്‍മോഹന്‍സിംഗ് 
അവന്‍ --> രാമന്‍ 
അവള്‍ക്ക് --> സീതയെ 
അവള്‍ --> സീതയെ 
അത്‌ --> പൂവ്‌ 
അവര്‍ --> സീതയെ,രാമന്‍ ,ലക്ഷ്മണന്‍
അവിടെ --> കോട്ടയത്ത്‌ 
അവര്‍ക്ക്‌ --> മന്‍മോഹന്‍സിംഗ് ,സീതയെ,ലക്ഷ്മണന്‍ ,രാമന്‍ 
അവിടെ --> കോട്ടയത്ത്‌ 
അവന്‍ --> ലക്ഷ്മനനെ 
അവനെ --> ലക്ഷ്മണന്‍ 
അവള്‍ക്ക്‌ --> സീതയെ 
അവന്‍ --> രാമന്‍ 

即,如果有超过1' - >'字符,线需要修改。所以我的代码从列表中的位置2开始,因为第一个' - >'需要。并检查列表中的当前和下一个项目。但它不起作用。 我的代码是:

fq = codecs.open('resolvedanaphora.txt', encoding='utf-8')
lines = fq.readlines()
fq.close()
for line in lines:
if ',' in line:
    words=[]    
    words=line.split()  
    for i in range(2,len(words)):
        if '-->' in words[i+1]:
            print 'yes'
            words[i]=''
            words[i+1]=''
    for w in words:
        fa.write(w)
    while len(words) > 0 : words.pop()

    else:
        fa.write(line)
    fa.write('\n')

fa.close()

我有一个空白的输出文件。终端显示错误。错误是

if '-->' in words[i+1]:  
IndexError: list index out of range

4 个答案:

答案 0 :(得分:1)

import codecs
with codecs.open('out.txt', 'w') as fa:
    with open('in.txt') as fhandle:
        for line in fhandle:
            i = line.find('-->') + 3
            line = line[:i] + re.sub(r'\b\w+\s*-->', '', line[i:])
            fa.write(line)

你的角色设定对我不起作用。所以,我尝试了输入:

a-->b
def-->hij-->klm
123-->456 ,789-->qwe,rty, uio-->pas

输出结果为:

a-->b
def-->klm
123-->456 ,qwe,rty, pas

上述代码的工作原理是查找-->的第一次出现。所有文本(包括第一次出现的-->)都保持不变。在随后的文本中,进行了替换:删除了-->之后出现的任何单词。然后将生成的行写入文件。

虽然这里无害,但file是保留字。因此,新代码使用fhandle代替file

原始代码注释

  • line.split()空格上拆分线。由于(a)逗号,并且(b)-->字符并不总是被空格包围,因此对您的输入不起作用。

  • 循环for w in words: fa.write(w)将所有单词串起来,没有空格。

答案 1 :(得分:0)

而不是那种方法试试这个替换所有 - >除了第一次出现

for s in lines:
        substr = "-->"
        try:
            first_occurrence = s.index(substr) + len(substr)
        except ValueError:
            pass
        else:
            s = s[:first_occurrence] + re.sub(r'\b\w+\s*-->', '', s[first_occurrence:])
        print s
input
a-->b
b-->c,b-->d,b-->e
c->d

output

a-->b
b-->c,d,e
c-->d

答案 2 :(得分:0)

split在空格上分裂。

>>> line = 'അവര്‍-->അവള്‍ക്ക്-->സീതയെ,അവന്‍-->രാമന്‍ ,ലക്ഷ്മണന്‍'
>>> line.split()
['അവര്‍-->അവള്‍ക്ക്-->സീതയെ,അവന്‍-->രാമന്‍', ',ലക്ഷ്മണന്‍']

您可能希望基于逗号进行拆分,然后根据' - >'进行拆分。如果您获得两个以上的元素,请保留第一个和最后一个元素,然后加入' - >'。

>>> line.split(',')
['അവര്‍-->അവള്‍ക്ക്-->സീതയെ', 'അവന്‍-->രാമന്‍', 'ലക്ഷ്മണന്‍']

我不知道你想对其他元素做什么,但我们只看第一个子元素。

>>> sub = 'അവര്‍-->അവള്‍ക്ക്-->സീതയെ'
>>> links = sub.split('-->')
>>> links
['അവര്‍', 'അവള്‍ക്ക്സീ', 'തയെ']

>>> if len(links) > 2:
...    collapsed = [links[0], links[-1]]

>>> collapsed
['അവര്‍', 'തയെ']

我们可以使用' - >'加入数组中的元素。将它们分开:

>>> link = '-->'.join(collapsed)
>>> link
'അവര്‍-->തയെ'

如果您想加入其他元素:

>>> ' ,'.join([link, 'അവന്‍-->രാമന്‍', 'ലക്ഷ്മണന്‍'])
'അവര്‍-->തയെ ,അവന്‍-->രാമന്‍ ,ലക്ഷ്മണന്‍'

答案 3 :(得分:0)

我得到了正确的输出。我将研究上面给出的答案。我的代码如下。

import codecs
fq = codecs.open('resolvedanaphora.txt', encoding='utf-8')
lines = fq.readlines()
fq.close()
fa = codecs.open('resolvedana.txt', 'w')
for i in lines:
    words=i.split()
    for i in range(2,len(words)):
            if words[i]=='-->':
                words[i]=''
                words[i-1]= ''
    for w in words:
        if w!='':
            fa.write(w.encode('UTF-8'))
            fa.write(' ')
    fa.write('\n')
fa.close()  

如果列表中的项目是“ - >”然后将当前项目和前一项目替换为''。由于''不需要在输出文件中写入,因此会被忽略。

输出结果为:

അദ്ദേഹം --> മന്‍മോഹന്‍സിംഗ്
അദ്ദേഹത്തെ --> മന്‍മോഹന്‍സിംഗ്
അവന്‍ --> രാമന്‍
അവള്‍ക്ക് --> സീതയെ
അവള്‍ --> സീതയെ
അത്‌ --> പൂവ്‌
അവര്‍ --> സീതയെ , രാമന്‍
അവിടെ --> കോട്ടയത്ത്‌
അവര്‍ക്ക്‌ --> സീതയെ , രാമന്‍
അവിടെ --> കോട്ടയത്ത്‌
അവന്‍ --> ലക്ഷ്മനനെ
അവനെ --> ലക്ഷ്മണന്‍
അവള്‍ക്ക്‌ --> സീതയെ
അവന്‍ --> രാമന്‍