更改文件行Python

2024-04-25 14:23:53 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个名为的文件用户.txt'具有以下结构;username:info_about_the_user.

像这样:

用户.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()

这是我的输入:

输入:用户.txt:

mark:stuffabouthim
anthony:stuffabouthim
peter:stuffabouthim
peterpeter:HesAwesome
peterpeterpeter:stuffabouthim
peterpeterpeterpeter:stuffabouthim

我想更改有关彼得彼特的信息,并有以下输出:

我想要的输出:用户.txt:

mark:stuffabouthim
anthony:stuff about him
peter:stuffabouthim
peterpeter:HeIsTall
peterpeterpeter:stuffabouthim
peterpeterpeterpeter:stuffabouthim

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

mark:stuffabouthim
anthony:stuffabouthim
peter:stuffabouthim
peterpeter:HeIsTall

有谁能帮我完成下面的代码以获得所需的输出吗?谢谢。在


Tags: 用户txtoutputopenuserspeteranthonyfn
3条回答

您可以使用^{}模块轻松实现:

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()

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

for line in f:
        if not changeuser+":" in line:  #THAT MEANS ALL PETERS ARE IGNORED!
            output.append(line)

一般来说,肯定从句比否定句更容易理解:

^{pr2}$

好的代码容易阅读。试着像写报告一样编写代码!这会自动地将代码分割成更小的部分,比如函数。e、 g.:

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

你的代码会被分割成更小的部分,如果发生错误,你可以把它固定在几行代码上,而不是在几页上工作。;—)

试试这个:

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()

输出:

^{pr2}$

相关问题 更多 >