Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/324.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 按键删除一个文件中不存在的行_Python - Fatal编程技术网

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)

这回答了你的问题吗?