如何从文件中删除一行?

2024-09-30 14:32:53 发布

您现在位置:Python中文网/ 问答频道 /正文

我有两个文件(file1和file2),希望将file2的每一行与file1中的所有行进行比较。如果满足此条件: (ln2[1][0] != ln1[1][0]) and (ln2[1][0] != '-') 然后我想从file2中删除file2的当前行,即ln2。 我用python编写了这段代码,但有一个错误

arr1 = []
with open('FA1.txt', 'r') as file1:
    Lines1 = file1.readlines()
    for line in Lines1:
        arr1.append(line.split())

arr2 = []
with open('a.txt', 'r') as file2:
    Lines2 = file2.readlines()
    for line in Lines2:
        arr2.append(line.split())


for ln2 in arr2:
    for ln1 in arr1:
        if (ln2[1][0] != ln1[1][0]) and (ln2[1][0] != '-'):
            text_file = open("a.txt", "a+")
            text_file.write(ln2, '')
            text_file.close()
            #ln2 = ''

另外,我没有使用最后三行代码,而是使用了:(ln2 = ''),但出现了错误:IndexError: string index out of range

文件的内容如下所示:

File1: 
010 00
001 11 
010 10

File2:
00- 0-
0-0 0-
1-- -0
-10 0-

我得到以下错误:

TypeError: write() takes exactly one argument (2 given) 

Tags: 文件textintxtfor错误lineopen
1条回答
网友
1楼 · 发布于 2024-09-30 14:32:53

重写代码会给我们带来:

with open('FA1.txt', 'r') as file1:
    arr1 = [line.split() for line in file1]

with open('a.txt', 'r') as file2:
    arr2 = [line.split() for line in file2]

with open("b.txt", "w") as text_file:
    for line2 in arr2:
        for line1 in arr1:
            if (line2[1][0] != line1[1][0]) and (line2[1][0] != '-'):
                text_file.write(' '.join(line2) + '\n')

我使用了不同的文件作为输出,因为我不想破坏我的测试数据

但是现在,由于循环,您的结果文件b.txt将包含重复的行,并且您将输出所有符合条件的行,而这些行应该被删除

00- 0-
00- 0-
0-0 0-
0-0 0-
-10 0-
-10 0-

根据您的问题,您希望将第二个文件的每一行与第一个文件的每一行进行比较,如果没有任何一行匹配,则写入数据。代码需要反映这一点,因此我们使用if not any ...

with open('FA1.txt', 'r') as file1:
    arr1 = [line.split() for line in file1]

with open('a.txt', 'r') as file2:
    arr2 = [line.split() for line in file2]

with open("b2.txt", "w") as text_file:
    for line2 in arr2:
        if not any((line2[1][0] != line1[1][0]) and (line2[1][0] != '-') for line1 in arr1):
            text_file.write(' '.join(line2))

结果是

1  -0

arr1 = [line.split() for line in file1]的简短解释。我使用列表理解来缩短代码。而且文件是可编辑的,所以我不必在这里使用readlines

相关问题 更多 >