我有一些数据以这种格式存储在.txt文件中:
----------|||||||||||||||||||||||||-----------|||||||||||
1029450386abcdefghijklmnopqrstuvwxy0293847719184756301943
1020414646canBeFollowedBySpaces 3292532113435532419963
不要问......
我有很多这样的行,我需要一种方法来在特定行的末尾添加更多数字。
我已经编写代码来找到我想要的行,但我很难过如何在它的末尾添加11个字符。我环顾四周,这个网站对我遇到的其他一些问题很有帮助,但我似乎无法找到我需要的东西。
重要的是,该行保留其在文件中的位置,并以当前顺序保存其内容。
使用python3.1,你会怎么做:
1020414646canBeFollowedBySpaces 3292532113435532419963
到
1020414646canBeFollowedBySpaces 329253211343553241996301846372998
答案 0 :(得分:6)
作为一般原则,没有在文本文件中间“插入”新数据的快捷方式。您需要在新文件中复制整个原始文件,并在途中修改所需的文本行。
例如:
with open("input.txt") as infile:
with open("output.txt", "w") as outfile:
for s in infile:
s = s.rstrip() # remove trailing newline
if "target" in s:
s += "0123456789"
print(s, file=outfile)
os.rename("input.txt", "input.txt.original")
os.rename("output.txt", "input.txt")
答案 1 :(得分:4)
查看fileinput模块,它可以对文件进行“就地”编辑。虽然我认为临时文件仍然涉及内部流程。
import fileinput
for line in fileinput.input('input.txt', inplace=1, backup='.orig'):
if line.startswith('1020414646canBeFollowedBySpaces'):
line = line.rstrip() + '01846372998' '\n'
print(line, end='')
print
现在打印到文件而不是控制台。
您可能需要在编辑前备份原始文件。
答案 2 :(得分:2)
target_chain = '1020414646canBeFollowedBySpaces 3292532113435532419963'
to_add = '01846372998'
with open('zaza.txt','rb+') as f:
ch = f.read()
x = ch.find(target_chain)
f.seek(x + len(target_chain),0)
f.write(to_add)
f.write(ch[x + len(target_chain):])
在这种方法中,绝对必须以二进制模式'b'打开文件,因为某些原因与Python对行结尾的处理有关(参见Universal Newline,默认启用)< / p>
模式'r +'是允许写作和阅读
在此方法中,文件中target_chain之前的内容保持不变。在target_chain向前移动之后是什么。正如格雷格·休吉尔(Greg Hewgill)所说,没有可能将硬盘上的位移动到中间插入新位。
显然,如果文件非常大,读取 ch 中的所有内容可能会消耗太多内存,然后应该更改算法:逐行读取直到包含target_chain的行,然后在插入之前读取下一行,然后继续执行“读取下一行 - 在当前行上重写”直到文件结束,以便逐步从与添加相关的行中移动内容。 / p>
你明白我的意思......
答案 3 :(得分:0)
逐行将文件复制到另一个文件。当你到达需要额外字符的行时,在写入之前添加它们。