使用python在文件中添加文本(不替换它)

chu*_*use 7 python

我有一个包含ID和信息的文件,如下所示:

1oMZgkoaz3o 2011-12-29T01:23:00.000Z 9 503 ApolloIsMyCoPilot
nUW1TomCSQg 2011-12-29T01:23:15.000Z 9 348 grea7stuff
tJuLnRrAcs0 2011-12-29T01:26:20.000Z 9 123 AdelGaming
tyi5g0mnPIs 2011-12-29T01:28:07.000Z 9 703 PreferredGaming
Run Code Online (Sandbox Code Playgroud)

我想在某些行上添加一个标志,所以如果我有一本字典

flags = {'1oMZgkoaz3o': flag1, 'tJuLnRrAcs0': flag2}
Run Code Online (Sandbox Code Playgroud)

我想要的结果是

1oMZgkoaz3o 2011-12-29T01:23:00.000Z 9 503 ApolloIsMyCoPilot flag1
nUW1TomCSQg 2011-12-29T01:23:15.000Z 9 348 grea7stuff
tJuLnRrAcs0 2011-12-29T01:26:20.000Z 9 123 AdelGaming flag2
tyi5g0mnPIs 2011-12-29T01:28:07.000Z 9 703 PreferredGaming
Run Code Online (Sandbox Code Playgroud)

所以我制作了这段代码

l = True
while l is True:
    a = f.readline()
    try a.split(' ')[0] in flags.iterkeys():
        f.seek(-1,1)
        f.write(' '+str(flags[a.split(' ')[0]])+'\n')
        del flags[a.split(' ')[0]]
    except IndexError:
        l = False
Run Code Online (Sandbox Code Playgroud)

所以,我的Python代码可能很差,但问题是,这个代码我正在替换文本,所以文件都搞砸了.如何在不更换的情况下书写?如果您对代码有更好的想法,欢迎您...

Mat*_*ttH 9

您无法写入文件并"插入".最好的方法是读取您的文件并通过修改新文件写出内容,然后根据需要重命名.


Nik*_* B. 6

我在这里看到两个问题:

从/向同一文件读取和写入

这不太好用.从一个文件读取并写入另一个文件会更好(这样,如果程序出现问题,也不会丢失数据).例:

input_file = open('infile.txt', 'r')
output_file = open('outfile.txt', 'w')
for line in input_file:
    line += "transformed"
    output_file.write(line)
Run Code Online (Sandbox Code Playgroud)

句法/语义错误

您的代码段中有一个语法错误

try a.split(' ')[0] in flags.iterkeys():
Run Code Online (Sandbox Code Playgroud)

是无效的(Python应该抱怨!).

其他一些注意事项:

  • in flags.iterkeys() 在语义上等同于 in flags
  • 此外,你可以使用while l而不是while l is True.更好的是,您可以l完全删除标志变量,并在break发生错误时跳出循环.

我的尝试

input_file = open('infile.txt', 'r')
output_file = open('outfile.txt', 'w')
flags = { ... }

for line in input_file:
    parts = line.strip().split()
    if parts[0] in flags:
        line = line + ' ' + flags[parts[0]]
    output_file.write(line + "\n")
Run Code Online (Sandbox Code Playgroud)

如果您知道如何使用shell,那么只需使用STDIN/STDOUT进行数据输入和输出即可让您的生活更轻松.您可以自己保存文件处理,并让用户更灵活地使用您的脚本.