我正在尝试将字符串行从file2复制到file1,如果file1中不存在此行。我使用的是symmetric_difference,但它给了我无序的结果。此示例中的文件内容不是实际的。我的实际文件中没有数字,只有字符串,但我使用数字来显示问题。我可以将数字添加到文件2并将其排序为列表,但文件2随机从其他程序获取信息,我不熟悉,并且不想干涉。
file1的内容:
'1 \ n', '2 \ n', '3 \ N'
file2的内容:
'1 \ n', '2 \ n', '3 \ n', '4 \ n'`,' 5 \ n ' '6 \ n', '7 \ n',' 8 \ n ”, '9 \ n', '10 \ N'
它只是每一行的字符串
diff = set(file1).symmetric_difference(file2)
set(['8 \ n','10 \ n','9 \ n','6 \ n','7 \ n','4 \ n','5 \ n'])< / p>
我的目标是
set(['4 \ n','5 \ n','6 \ n','7 \ n','8 \ n','9 \ n','10 \ n'])< / p>
答案 0 :(得分:1)
使用join()和split()
line1 = "'1\n','2\n','3\n'"
line2 = "'1\n','2\n','3\n','4\n'`,'5\n','6\n','7\n','8\n','9\n','10\n'"
''.join([i for i in line2.split(',') if i not in line1.split(',')])
答案 1 :(得分:1)
您可以从symmetic_difference获取的集合中执行此操作:
a_list = list(set_instance)
a_list.sort()
然后你有一个排序列表,你可以追加到file1
答案 2 :(得分:1)
如果你还没有和python结婚,可以使用comm
Unix可执行文件轻松完成(如果你是基于Unix的系统):
$ comm -13 file1.txt file2.txt
4
5
6
7
8
9
10
这假定文件已预先排序。
您可以轻松call this from Python。
答案 3 :(得分:0)
目前我正在使用
with open("file2") as f:
with open("file1", "r+") as f1:
for line in f:
if line not in f1:
f1.write(line)
答案 4 :(得分:0)
如果将列表转换为集合,则元素的顺序将丢失。这是完全正常的,因为在数学上,顺序对于集合来说是没有意义的。 如果您使用set.symmetric_difference,则必须在之后重新排序。如果这不会给你一个满意的结果,那么你应该编写自己的算法。