Python在将行更新到文件后追加

Python在将行更新到文件后追加,python,python-2.7,Python,Python 2.7,我有一个包含以下内容的文本文件: pb333u$Paul Barron $20001:24001:26001:28001$30001:34001:36001:38001$40001:44001:46001:48001:: pk7319$Patrick Val $20002:24002:26002:28002$30002:34002:36002:38002$40002:44002:46002:48002:: pb348u$Victor Ataler$20003:24003:260

我有一个包含以下内容的文本文件:

pb333u$Paul Barron   $20001:24001:26001:28001$30001:34001:36001:38001$40001:44001:46001:48001::

pk7319$Patrick Val      $20002:24002:26002:28002$30002:34002:36002:38002$40002:44002:46002:48002::

pb348u$Victor Ataler$20003:24003:26003:28003$30003:34003:36003:38003$40003:44003:46003:48003::
我想在文件中附加另一行,例如:

th3674$Tom Harry$20004:24004:26004:28004$30004:34004:36004:38004$40004:44004:46004:48004::
基本上,使用新的id和名称;每增加一个数字

我编写这个python程序是为了实现上述目标:

def parse_file1():
   id_dict = {'at_id':'th3674','full_name':'Tom Harry'}
   f=open('ports.dat','a+')
   lines = f.readlines()
   if lines:
       last = lines[-1]
       last = last.replace(last.split('$')[0],id_dict['at_id'])
       last = last.replace(last.split('$')[1],id_dict['full_name'])
       split_colon(last)
       f.write('\n')
       f.write(last)

def split_colon(line):
    for i in range(2,5): 
        key = line.split('$')[i]
        for j in range(4):
            v = key.split(':')[j]
            line = line.replace(v, str(int(v) + 00001))

if __name__=='__main__':
    parse_file1()
我得到的结果是:

pb333u$Paul Barron   $20001:24001:26001:28001$30001:34001:36001:38001$40001:44001:46001:48001::

pk7319$Patrick Val      $20002:24002:26002:28002$30002:34002:36002:38002$40002:44002:46002:48002::

pb348u$Victor Ataler$20003:24003:26003:28003$30003:34003:36003:38003$40003:44003:46003:48003::

th3674$Tom Harry$20003:24003:26003:28003$30003:34003:36003:38003$40003:44003:46003:48003::

我无法将最后一行中的数字增加1。还有,有没有更好的方法来实现上述目标?我觉得我的程序有点不通用。

问题是字符串是不可变的,在
split\u colon()
函数中

line = line.replace(v, str(int(v) + 00001))
这不会更改
parse_file1()
函数中的实际
last
字符串。您需要返回更改后的
,并将其设置回
last
变量,然后再将其写入文件。范例-

def parse_file1():
   id_dict = {'at_id':'th3674','full_name':'Tom Harry'}
   f=open('ports.dat','a+')
   lines = f.readlines()
   if lines:
       last = lines[-1]
       last = last.replace(last.split('$')[0],id_dict['at_id'])
       last = last.replace(last.split('$')[1],id_dict['full_name'])
       last = split_colon(last)
       f.write('\n')
       f.write(last)

def split_colon(line):
    for i in range(2,5): 
        key = line.split('$')[i]
        for j in range(4):
            v = key.split(':')[j]
            line = line.replace(v, str(int(v) + 1))
    return line

if __name__=='__main__':
    parse_file1()

另外,只需向其添加
1
,无需将数字定义为-
00001
(在Python2.x中,当一个数字以0开头时,它会变成一个八进制文字,尽管这不会影响您的程序)。

问题是字符串是不可变的,在
split_colon()
函数中,当您执行-

line = line.replace(v, str(int(v) + 00001))
这不会更改
parse_file1()
函数中的实际
last
字符串。您需要返回更改后的
,并将其设置回
last
变量,然后再将其写入文件。范例-

def parse_file1():
   id_dict = {'at_id':'th3674','full_name':'Tom Harry'}
   f=open('ports.dat','a+')
   lines = f.readlines()
   if lines:
       last = lines[-1]
       last = last.replace(last.split('$')[0],id_dict['at_id'])
       last = last.replace(last.split('$')[1],id_dict['full_name'])
       last = split_colon(last)
       f.write('\n')
       f.write(last)

def split_colon(line):
    for i in range(2,5): 
        key = line.split('$')[i]
        for j in range(4):
            v = key.split(':')[j]
            line = line.replace(v, str(int(v) + 1))
    return line

if __name__=='__main__':
    parse_file1()

另外,只需向其添加
1
,无需将数字定义为-
00001
(在Python2.x中,当一个数字以0开头时,它会变成一个八进制文字,尽管这不会影响您的程序)。

问题是字符串是不可变的,在
split_colon()
函数中,当您执行-

line = line.replace(v, str(int(v) + 00001))
这不会更改
parse_file1()
函数中的实际
last
字符串。您需要返回更改后的
,并将其设置回
last
变量,然后再将其写入文件。范例-

def parse_file1():
   id_dict = {'at_id':'th3674','full_name':'Tom Harry'}
   f=open('ports.dat','a+')
   lines = f.readlines()
   if lines:
       last = lines[-1]
       last = last.replace(last.split('$')[0],id_dict['at_id'])
       last = last.replace(last.split('$')[1],id_dict['full_name'])
       last = split_colon(last)
       f.write('\n')
       f.write(last)

def split_colon(line):
    for i in range(2,5): 
        key = line.split('$')[i]
        for j in range(4):
            v = key.split(':')[j]
            line = line.replace(v, str(int(v) + 1))
    return line

if __name__=='__main__':
    parse_file1()

另外,只需向其添加
1
,无需将数字定义为-
00001
(在Python2.x中,当一个数字以0开头时,它会变成一个八进制文字,尽管这不会影响您的程序)。

问题是字符串是不可变的,在
split_colon()
函数中,当您执行-

line = line.replace(v, str(int(v) + 00001))
这不会更改
parse_file1()
函数中的实际
last
字符串。您需要返回更改后的
,并将其设置回
last
变量,然后再将其写入文件。范例-

def parse_file1():
   id_dict = {'at_id':'th3674','full_name':'Tom Harry'}
   f=open('ports.dat','a+')
   lines = f.readlines()
   if lines:
       last = lines[-1]
       last = last.replace(last.split('$')[0],id_dict['at_id'])
       last = last.replace(last.split('$')[1],id_dict['full_name'])
       last = split_colon(last)
       f.write('\n')
       f.write(last)

def split_colon(line):
    for i in range(2,5): 
        key = line.split('$')[i]
        for j in range(4):
            v = key.split(':')[j]
            line = line.replace(v, str(int(v) + 1))
    return line

if __name__=='__main__':
    parse_file1()

另外,只需向其添加
1
,无需将数字定义为-
00001
(在Python2.x中,当数字以0开头时,它将变成八进制文字,尽管这不会影响您的程序)。

这真的是您最新的代码吗?我希望
split\u colon(last)
崩溃,因为
def split\u colon():
不接受任何参数。谢谢。我在复制粘贴时不知怎么错过了。这真的是你最新的代码吗?我希望
split\u colon(last)
崩溃,因为
def split\u colon():
不接受任何参数。谢谢。我在复制粘贴时不知怎么错过了。这真的是你最新的代码吗?我希望
split\u colon(last)
崩溃,因为
def split\u colon():
不接受任何参数。谢谢。我在复制粘贴时不知怎么错过了。这真的是你最新的代码吗?我希望
split\u colon(last)
崩溃,因为
def split\u colon():
不接受任何参数。谢谢。我在复制粘贴时不知怎么错过了。谢谢!这就解决了我的问题。我们有没有更好的方法来重新编写代码?我不确定有没有更好的方法来重新编写代码,您是否在寻找更通用的方法?如果是这样的话,事情会变得比这复杂得多。谢谢!这就解决了我的问题。我们有没有更好的方法来重新编写代码?我不确定有没有更好的方法来重新编写代码,您是否在寻找更通用的方法?如果是这样的话,事情会变得比这复杂得多。谢谢!这就解决了我的问题。我们有没有更好的方法来重新编写代码?我不确定有没有更好的方法来重新编写代码,您是否在寻找更通用的方法?如果是这样的话,事情会变得比这复杂得多。谢谢!这就解决了我的问题。我们有没有更好的方法来重新编写代码?我不确定有没有更好的方法来重新编写代码,您是否在寻找更通用的方法?如果是这样的话,它将变得比这复杂得多。