我的Python技能很生疏,我看过StackOverflow和在线,但我想做的比大多数都复杂,不包括第三个文件。
基本上,我有两个文件,其中有一些相同的字段(标题)和常见但不相同(链接)。我想从一个文件中的链接中获取ISBN(唯一编号),并将其替换/替换在另一个文件的链接字段中。起初我尝试检查标题然后更新该链接字段,但这似乎太复杂了。每个标题都有一个链接字段和一个ISBN。
这个当前代码从第一个文件中获取ISBN,我只是坚持如何将它附加到另一个文件中的链接字段。谢谢!
#This code compares two .txt files, matches on titles, and copies ISBN into the link
title = "title: "
link = "856"
isbn = ""
with open("test-original.txt", "r") as file, open("test-change.txt", "a") as change:
for line in file:
if link in line:
isbn = line.strip("856 http://www.example.com/")
print change.write(line.replace("com/", "com/" + isbn))
#for line in change:
#if title in line:
#print line.strip("title: ")
答案 0 :(得分:0)
这里至少有两件事可以指。你说你想"追加/替换"从第一个文件到第二个文件的修改行。
如果您的意思是"追加",您已经做到了这一点。
如果您的意思是"替换",那么您必须解释您尝试更换的内容。为简单起见,我将假设线条处于锁定步骤:test-original
的第20行与test-change
的第20行匹配,因此它的第20行你想要替换的test-change
。 (如果"对应的行"你要替换的东西是不同的,那么你可能必须将文件读入内存,搜索它,使用linecache
等;而不知道究竟是什么打算通过"对应",我不知道怎么写它......)
此外,您无法就地替换文本文件中的行。文本文件只是一个字符流;如果你用80个字符的行覆盖一个60个字符的行,你只是覆盖了下一行的前20个字符。
所以,你要做的是写一个 new 文件 - 通常,你写一个临时文件,然后在你完成后将它移到原始文件之上。所以:
with tempfile.NamedTemporary("w", dir=".", delete=False) as tmp:
with open("test-original.txt", "r") as file, open("test-change.txt", "r") as change:
for origline, changeline in zip(file, change):
if link in origline:
isbn = origline.strip("856 http://www.example.com/")
tmp.write(origline.replace("com/", "com/" + isbn))
else:
tmp.write(changeline)
os.replace(tmp.name, "test-change.txt")
请注意os.replace
需要Python 3.3,而您的代码看起来像Python 2.x.不幸的是,以安全和原子的方式替换文件甚至在Windows上工作是非常痛苦的(这正是添加os.replace
的原因)。如果您不担心原子性,而不是os.replace
,请执行以下操作:
os.remove("test-change.txt")
os.rename(tmp.name, "test-change.txt")