-2

私は2つのテキストファイルを持っています:

1)citys.txt

San Francisco
Los Angeles
Seattle
Dallas

2)master.txt

Atlanta is chill and laid-back.
I love Los Angeles.
Coming to Dallas was the right choice.
New York is so busy!
San Francisco is fun.
Moving to Boston soon!
Go to Seattle in the summer.

output.txtを取得しようとしています

<main><beg>I love</beg><key>Los Angeles</key><end></end></main>
<main><beg>Coming to</beg><key>Dallas</key><end>was the right choice</end></main>
<main><beg></beg><key>San Francisco</key><end>is fun</end></main>
<main><beg>Go to</beg><key>Seattle</key><end>in the summer</end></main>

citys.txtの各エンティティは<キー>です。master.txtファイルははるかに長く、特定の都市がないすべての行は無視する必要があります。彼らは秩序がありません。出力は、<key>および<beg>&<end>コンテキスト(存在する場合)の都市を出力します。

これは私が持っているものです:

with open(master.txt) as f:
    master = f.read()
working = []
with open(cities.txt) as f:
    for i in (word.strip() for word in f):
        if i in master:
            print "<key>", i, "</key>"

2つのテキストファイルをチェックする方法を知っています(「master」で「city」を見つけてください)...しかし、都市を見つけたら、master.txtでとコンテキストを印刷する方法の一部に固執しています!

4

2 に答える 2

1

これも機能するはずです。Python2.6でテストします。

cities_dict = {}
with open('master.txt', 'r') as master_in:
    with open('cities.txt') as city_in:
        for city in city_in:
            cities_dict[city.strip()] = '</beg><key>'+city.strip()+'</key><end>'

    for line in master_in:
        for key,val in cities_dict.iteritems():
            if key in line:
                line_out= '<main><beg>'+line.replace(key,val).replace('!','.').replace('.','').strip('\n')+'</end></main>'
                print line_out

出力:

<main><beg>I love </beg><key>Los Angeles</key><end></end></main>
<main><beg>Coming to </beg><key>Dallas</key><end> was the right choice</end></main>
<main><beg></beg><key>San Francisco</key><end> is fun</end></main>
<main><beg>Go to </beg><key>Seattle</key><end> in the summer</end></main>
于 2013-02-04T23:17:48.403 に答える
1

以下は、あなたが望むものに役立つはずです。これは、Python2 と Python3 の両方で機能します。

#!/usr/bin/python

import os

def parse(line, city):
    start = line.find(city)
    end = start + len(city)
    # Following is a simple implementation. I haven't parsed for spaces
    # and punctuations around tags.
    return '<main><beg>' + line[:start] + '</beg><key>' + city + '</key><end>' \
           + line[end:] + '</end></main>'

master = [line.strip() for line in open(os.getcwd() + '/master.txt', 'r')]
cities = [line.strip() for line in open(os.getcwd() + '/cities.txt', 'r')]
data = []

for line in master:
    for city in cities:
        if city in line:
            data.append(parse(line, city))

# Following would overwrite output.txt file in the current working directory
with open(os.getcwd() + '/output.txt', 'w') as foo:
    for output in data:
        foo.write(output + '\n')
于 2013-02-04T22:09:02.657 に答える