无法使用python更新另一个文件中的数据
我已经用python编写了一个脚本。现在,我打开了现有的文件,并用另一个值替换它的值。值在其他文件中被替换但不更新无法使用python更新另一个文件中的数据,python,Python,我已经用python编写了一个脚本。现在,我打开了现有的文件,并用另一个值替换它的值。值在其他文件中被替换但不更新 with open ("VAdminTool.properties", "r+") as propfile: data1=propfile.read().splitlines() listin1 = len (data1) for line1 in data1: line2 = line1.split('=') line2[0] = line2
with open ("VAdminTool.properties", "r+") as propfile:
data1=propfile.read().splitlines()
listin1 = len (data1)
for line1 in data1:
line2 = line1.split('=')
line2[0] = line2[0].strip()
if line2[0] == 'YPSAddress':
line2[1] = line1.replace(line2[1],yps_url)
print line2[1]
propfile.write(line2[1])
propfile.close()
在这样修改文件时必须非常小心。修改后的文本必须与原始文本的大小完全相同,否则会造成混乱。如果替换文本的大小不正确,文件中的以下字节将不会神奇地移动 但是如果不查看数据,就无法判断代码是否存在问题 但是,您的代码没有在正确的位置写入新文本,这是一个问题。你不能只在当前位置写新的文本,你需要找到正确的位置。下面的代码显示了两种稍微不同的处理方法。它可以在f:loop中的for行中完成,但我认为使用简单的while-True:loop做起来更简洁 输出
我不确定这是否一定是问题所在,但因为您使用了with来打开文件,所以最后不应调用propfile.close,而with部分已经为您完成了这一操作。如果没有看到一些输入和所需的输出,则无法回答您的问题
#!/usr/bin/env python
""" Inplace file update demo
Written by PM 2Ring 2015.08.20
See http://stackoverflow.com/q/32096531/4014959
"""
def create(fname):
data = 'zero one two three four five six seven eight nine'
with open(fname, 'w') as f:
for s in data.split():
f.write(s + '\n')
def modify0(fname):
with open(fname, 'r+') as f:
fpos = 0
for line in f:
print repr(line)
outline = line[:2].upper() + line[2:]
f.seek(fpos)
f.write(outline)
fpos += len(line)
f.seek(fpos)
def modify1(fname):
with open(fname, 'r+') as f:
while True:
fprev = f.tell()
line = f.readline()
if not line:
break
print repr(line)
f.seek(fprev)
outline = line[:2].upper() + line[2:]
f.write(outline)
def show(fname):
with open(fname, 'r') as f:
for line in f:
print repr(line)
modify = modify1
fname = 'testfile.txt'
create(fname)
modify(fname)
print '\n' + 20*' - ' + '\n'
show(fname)
'zero\n'
'one\n'
'two\n'
'three\n'
'four\n'
'five\n'
'six\n'
'seven\n'
'eight\n'
'nine\n'
- - - - - - - - - - - - - - - - - - - -
'ZEro\n'
'ONe\n'
'TWo\n'
'THree\n'
'FOur\n'
'FIve\n'
'SIx\n'
'SEven\n'
'EIght\n'
'NIne\n'