我有一个包含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代码可能很差,但问题是,这个代码我正在替换文本,所以文件都搞砸了.如何在不更换的情况下书写?如果您对代码有更好的想法,欢迎您...
我在这里看到两个问题:
这不太好用.从一个文件读取并写入另一个文件会更好(这样,如果程序出现问题,也不会丢失数据).例:
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 flagswhile 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进行数据输入和输出即可让您的生活更轻松.您可以自己保存文件处理,并让用户更灵活地使用您的脚本.
| 归档时间: |
|
| 查看次数: |
1338 次 |
| 最近记录: |