我在文本文件
中有这些不同的行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
我不太确定如何使用write函数
更新lineSplit [1]值答案 0 :(得分: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)
答案 1 :(得分: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)
答案 2 :(得分: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)
答案 3 :(得分:0)
另一种选择是使用csv
模块(:
在您的情况下是列分隔符。)
假设有test.txt
个文件,其中包含以下内容:
sample1:1
sample2:1
sample3:0
sample4:15
sample5:500
你需要增加每个值。这是你如何做到的:
import csv
# read the file
with open('test.txt', 'r') as f:
reader = csv.reader(f, delimiter=":")
lines = [line for line in reader]
# write the file
with open('test.txt', 'w') as f:
writer = csv.writer(f, delimiter=":")
for line in lines:
# edit the data here
# e.g. increment each value
line[1] = int(line[1]) + 1
writer.writerows(lines)
现在test.txt
的内容是:
sample1:2
sample2:2
sample3:1
sample4:16
sample5:501
但是,无论如何,fileinput
听起来更合乎逻辑(编辑同一个文件)。
希望有所帮助。