2

我有一个名为“users.txt”的文件,其结构如下;username:info_about_the_user.

像这样的东西:

用户.txt:

马克:关于他的事情 安东尼:关于他的
事情
彼得:关于他的事情 peterpeter:关于他
的事情 peterpeterpeter
:关于他的事情 peterpeterpeterpeter:关于
他的事情

脚本的以下部分需要更改一行(更改有关用户的信息)但是当字符串重复时我遇到问题(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:

马克:关于他的事 安东尼:关于他的

彼得:关于
他的事 彼得彼得:他真棒 peterpeterpeter
:关于他的事 peterpeterpeterpeter
:关于他的事

我想更改有关 peterpeter 的信息并具有以下输出:

我想要的输出:users.txt:

马克:关于他的事 安东尼:关于他的事 彼得:关于他的事peterpeter:HeIsTall peterpeter:
关于他的事 peterpeterpeterpeter:关于他的事




但这是我的输入。彼得彼得背后的所有台词都被删除了。

马克:关于他的事 安东尼:关于他的事 彼得:关于他的事 彼得彼得:
HeIsTall


任何人都可以通过下面的代码帮助我获得所需的输出吗?谢谢。

4

3 回答 3

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()
于 2012-07-06T09:55:42.017 回答
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
于 2012-07-06T09:36:55.377 回答
2

您在 - 子句中遇到了一个逻辑错误if,它删除了所有 peter*,唯一剩下的 peter 是您附加到文件的那个。

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)

好的代码很容易阅读。尝试像编写报告一样编写代码!这会自动将您的代码拆分为更小的部分,例如函数。例如:

lines = read_all_lines_from_file(filename)
change_user_info(lines, user, userinfo)
save_lines_to_file(lines, filename)

您的代码被分成更小的部分,如果发生错误,您可以将其固定在几行代码中,而不必在几页上工作。;-)

于 2012-07-06T09:56:25.120 回答