Python 按键删除一个文件中不存在的行
我有两个文本文件,如下所示:Python 按键删除一个文件中不存在的行,python,Python,我有两个文本文件,如下所示: 1000="Some stringA" 1001="Some stringB" 1004="Some stringE" 1005="Some stringF" 1007="Some stringH" ... 文件1: STR_ape, 1000 STR_banana, 1001 STR_orange, 1004 STR_strawber
1000="Some stringA"
1001="Some stringB"
1004="Some stringE"
1005="Some stringF"
1007="Some stringH"
...
文件1:
STR_ape, 1000
STR_banana, 1001
STR_orange, 1004
STR_strawberry, 1005
STR_gooseberry, 1007
...
文件2:
1000="Some stringA"
1001="Some stringB"
1002="Some stringC"
1003="Some stringD"
1004="Some stringE"
1005="Some stringF"
1006="Some stringG"
1007="Some stringH"
...
因此,File1中的一些字符串ID:s映射到File2中的一些字符串。我想做的是删除File2中的所有字符串,这些字符串在File1中不存在。这意味着文件2应该如下所示:
1000="Some stringA"
1001="Some stringB"
1004="Some stringE"
1005="Some stringF"
1007="Some stringH"
...
换句话说,数字不在File1中的字符串应该被删除。当然可以通过计数器和for循环来实现,但我想知道在Python3.X中是否有一些内置函数或一种简单的方法来实现这一点?Python 3.X with
io
模块是目前推荐的读/写文件的方法,执行一点循环以消除不存在的ID:
s1=\
"""
STR_ape,1000
Stru_香蕉,1001
STR_orange,1004
斯特鲁草莓,1005
STR_醋栗,1007
"""
s2=\
"""
1000=“一些stringA”
1001=“一些字符串B”
1002=“一些字符串C”
1003=“一些弦”
1004=“一些细线”
1005=“一些字符串f”
1006=“一些字符串”
1007=“一些字符串”
"""
输入io
#以io.open(“文件1”、“r”)作为f:
#s1=f.read().strip()
#以io.open(“文件2”、“r”)作为f:
#s2=f.read().strip()
s1=s1.strip()
s2=s2.strip()
#进程文件1
items=s1.拆分(“\n”)
ids=[]
对于项目中的项目:
如果len(item.strip())==0:
继续#跳过空行,可能有
id=item.split(“,”[1]。strip()
附加(id)
打印(ID)
#进程文件2
items=s2.拆分(“\n”)
行=[]
对于项目中的项目:
如果len(item.strip())==0:
持续
id=item.split(“=”[0]。strip()
如果id中有id:
行。追加(项)
text=“\n”。连接(行)
打印(文本)
#将文本保存回文件,避免写入原始文件2
以io.open(“文件3”,“w”)作为f:
f、 书写(文本)
我认为这是完成这项任务最简单、最清晰的方法:
首先从file1获取所有密钥,然后从file2获取所有匹配行,最后用匹配行覆盖file2
file1 = 'file1.txt'
file2 = 'file2.txt'
keys = []
with open(file1, 'r') as fp:
for l in fp.readlines():
key = l.split(',')[1].strip()
keys.append(key)
new_lines = []
with open(file2, 'r') as fp:
for l in fp.readlines():
key = l.split('=')[0].strip()
if key in keys:
new_lines.append(l)
with open(file2, 'w') as fp:
fp.writelines(new_lines)
这回答了你的问题吗?