我有一个名为'users.txt'的文件,其结构如下: username:info_about_the_user.
这样的事情:
users.txt:
mark:stuffabouthim
anthony:stuffabouthim
peter:stuffabouthim
peterpeter:stuffabouthim
peterpeterpeter:stuffabouthim
peterpeterpeterpeter:stuffabouthim
脚本的以下部分需要更改一行(更改有关用户的信息),但是当字符串重复时(peter - peterpeter)我遇到了问题,我不知道如何修复它。
def test():
fn = 'users.txt'
f = open(fn)
output = []
changeuser = 'peterpeter'
userinfo = 'HeIsTall'
for line in f:
if not changeuser+":" in line:
output.append(line)
f.close()
f = open(fn, 'w')
f.writelines(output)
f.close()
f = open("users.txt", "a")
f.write(changeuser + ":" + userinfo+"\n")
f = open("users.txt", "a")
test()
这是我的输入:
输入:users.txt:
标记:stuffabouthim
anthony:stuffabouthim
peter:stuffabouthim
peterpeter:HesAwesome
peterpeterpeter:stuffabouthim
peterpeterpeterpeter:stuffabouthim
我想更改有关peterpeter的信息并输出以下内容:
我希望输出:users.txt:
标记:stuffabouthim
anthony:关于他的东西
彼得:stuffabouthim
peterpeter:HeIsTall
peterpeterpeter:stuffabouthim
peterpeterpeterpeter:stuffabouthim
但这是我的输入。 peterpeter背后的所有行都被删除了。
标记:stuffabouthim
安东尼:stuffabouthim
彼得:stuffabouthim
peterpeter:HeIsTall
任何人都可以帮我提供下面的代码以获得所需的输出吗?感谢。
答案 0 :(得分:3)
您可以使用fileinput
模块轻松实现:
import fileinput
def test():
fn = 'users.txt'
changeuser = 'peterpeter'
newinfo = 'HeIsTall'
for line in fileinput.input(fn, inplace=1):
user, oldinfo = line.split(':')
print '%s:%s' % (user, newinfo if user == changeuser else oldinfo.replace('\n', ''))
if __name__ == "__main__":
test()
答案 1 :(得分:2)
试试这个:
def test():
fn = 'users.txt.txt'
f = open(fn)
output = []
changeuser = 'peterpeter'
userinfo = 'HeIsTall'
for line in f:
if line.strip().split(':')[0]!=changeuser:
output.append(line)
else:
output.append(changeuser + ":" + userinfo+"\n")
f.close()
f = open(fn, 'w')
f.writelines(output)
f.close()
test()
<强>输出:强>
mark:stuffabouthim
anthony:stuffabouthim
peter:stuffabouthim
peterpeter:HeIsTall
peterpeterpeter:stuffabouthim
peterpeterpeterpeter:stuffabouthim
答案 2 :(得分:2)
if
- 子句中存在逻辑错误,其中 DELETES 所有peters *,唯一剩下的是您附加到文件的那个。
for line in f:
if not changeuser+":" in line: #THAT MEANS ALL PETERS ARE IGNORED!
output.append(line)
通常更容易理解积极的条款然后否定:
for line in f:
if changeuser+":" in line:
output.append('%s:%s\n' %(changeuser,userinfo))
else:
output.append(line)
好的代码很容易阅读。尝试编写代码,就像尝试编写报告一样!这会导致自动将代码拆分为较小的部分,如函数。 e.g:
lines = read_all_lines_from_file(filename)
change_user_info(lines, user, userinfo)
save_lines_to_file(lines, filename)
您的代码被分成更小的部分,如果发生错误,您可以将其固定为几行代码而不必处理多个页面。 ; - )