Python 替换文件内第行中的字符

Python 替换文件内第行中的字符,python,file,Python,File,我在一个文本文件中有这些带值的不同行 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

我在一个文本文件中有这些带值的不同行

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]值,因为字符串是不可变的,这意味着不能按索引在字符串中分配新值。 但您可以将整个文件拆分为一个行列表,并完全更改单个行(字符串)。这就是您在lineSplit[1]=一个新的整数中所做的

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)

如果要修改同一文件,可以使用
fileinput
模块:

>>> strs = "sample4:15"
利用序列解包,在拆分后将结果存储在变量中

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

可能是这样的(假设
之前的第一个元素确实是一个键):


另一个选项是使用
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
在您的案例中使用(编辑相同的文件)听起来更符合逻辑


希望有帮助。

您是想写回文件还是?是的,只是想用一个新的数字来替换这个数字,真的吗?我可以用这个来更新一些行,而不是全部行吗?@user2117821您可以添加一个简单的
if
条件来检查是否要修改数据。
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)
sample1:2
sample2:2
sample3:1
sample4:16
sample5:501