1

テキストファイルに値を含むこれらの異なる行があります

sample1:1
sample2:1
sample3:0
sample4:15
sample5:500

「:」の後の数字を時々更新したいのですが、「:」で名前を分割して、2 つの値を持つリストを取得できることがわかっています。

f = open("test.txt","r")
lines = f.readlines()
lineSplit = lines[0].split(":",1)
lineSplit[1] #this is the value I want to change

書き込み関数で lineSplit[1] 値を更新する方法がよくわかりません

4

4 に答える 4

0

文字列は不変です。つまり、インデックスによって文字列内に新しい値を割り当てることはできません。ただし、ファイル全体を行のリストに分割し、個々の行 (文字列) を完全に変更することができます。これは lineSplit[1] = A_NEW_INTEGER で行っていることです

with open(filename, 'r') as f:
    lines = f.read().splitlines()
for i, line in enumerate(lines):
    if condition:
        lineSplit = line.split(':')
        lineSplit[1] = new_integer
        lines[i] = ':'.join(lineSplit)
with open(filename, 'w') as f:
    f.write('\n'.join(lines)
于 2013-06-21T20:05:33.853 に答える
0

fileinput同じファイルを変更しようとしている場合は、モジュールを使用できます。

>>> strs = "sample4:15"

シーケンスのアンパックを利用して、分割後に結果を変数に格納します。

>>> sample, value = strs.split(':')
>>> sample
'sample4'
>>> value
'15'

コード:

import fileinput
for line in fileinput.input(filename, inplace = True):
    sample, value = line.split(':')
    value = int(value)     #convert value to int for calculation purpose
    if some_condition: 
           # do some calculations on sample and value
           # modify sample, value if required 

    #now the write the data(either modified or still the old one) to back to file
    print "{}:{}".format(sample, value)
于 2013-06-21T20:07:16.307 に答える
0

:たぶんそのようなものです(前の最初の各要素が実際にキーであると仮定します):

from collections import OrderedDict

with open('fin') as fin:
    samples = OrderedDict(line.split(':', 1) for line in fin)

samples['sample3'] = 'something else'

with open('output') as fout:
    lines = (':'.join(el) + '\n' for el in samples.iteritems())
    fout.writelines(lines)
于 2013-06-21T20:09:14.013 に答える