1

したがって、次の内容のテキスト ファイルがあります。

NUM,123
FRUIT
DRINK
FOOD,BACON
CAR
NUM,456
FRUIT
DRINK
FOOD,BURGER
CAR
NUM,789
FRUIT
DRINK
FOOD,SAUSAGE
CAR

「BURGER」という単語を「PIZZA」に置き換えています

with open('input.txt','r') as f:
    data = f.readlines()
    for i, line in enumerate(data):
        if '456' in line:
            field = ','.join(data[i+3].split(',')[1])
            field = field.replace(field,'PIZZA')

すべてを新しいファイルに書き戻して、新しいファイルに次のものが含まれるようにするにはどうすればよいですか。

NUM,123
FRUIT
DRINK
FOOD,BACON
CAR
NUM,456
FRUIT
DRINK
FOOD,PIZZA
CAR
NUM,789
FRUIT
DRINK
FOOD,SAUSAGE
CAR

ありがとう!

4

5 に答える 5

2

あなたはかなり近いです、次のことを試してください:

with open('input.txt','r') as f:
    data = f.readlines()

with open('output.txt','w') as f:
    for i, line in enumerate(data):
        if '456' in line:
            fields = data[i+3].split(',')
            fields[-1] = 'PIZZA\n'
            data[i+3] = ','.join(fields)
        f.write(line)
于 2012-08-22T23:21:07.647 に答える
2

これは、すでに持っているコードで機能します。データを更新する行を追加し、それをすべてファイルに書き込むコードを追加するだけです。

# read the data
with open('data.txt') as f:
    data = f.readlines()

# process data
for i, line in enumerate(data):
    if "456" in line:
        field = ','.join(data[i+3].split(',')[1])
        field = field.replace(field,'PIZZA')
        data[i+3] = '{},{}\n'.format(data[i+3].split(',')[0],field) # added 

# write data to file
with open('result.txt', 'w') as outfp: # to write out data 
    outfp.write(''.join(data))
于 2012-08-22T23:23:22.827 に答える
0

このソリューションは、行の後のフィールドが 3 つ未満の場合でも壊れないため、少し安全です'456'。また、中間リストの作成を回避し、各入力行を出力ファイルに直接書き込むだけです。

with open('output.txt', 'w') as outfile:
    with open('input.txt', 'r') as infile:
        index = -1
        for line in infile:
            if index >= 0:
                index += 1
                if index == 3:
                    line = '%s,PIZZA\n' % line.rstrip().split(',')[0]
                    index = -1
            elif '456' in line:
                index = 0
            outfile.write(line)
于 2012-08-23T02:06:44.633 に答える
0

ファイルを追加モードで開き、単語を置き換えます。

于 2012-08-22T23:16:55.367 に答える
0

ある文字列を別の文字列に置き換えるだけなら、なぜ行ごとに処理するのでしょうか? そのようなものはうまくいくはずです:

with open('input.txt', 'r') as f:
    with open('output.txt', 'w') as target:
        target.write(f.readline().replace("BURGER","PIZZA"))
于 2012-08-23T09:22:47.957 に答える