2015-05-11 28 views
1

我有兩個文件,源文件和dest文件。我想將這個源文件中的內容複製到dest文件中,但是不是整個內容只有源文件中存在且不存在於dest文件中的那部分。如何僅將內容的差異從一個文件複製到另一個文件?

我試圖搜索和遇到shutil模塊,但我找不到任何功能,只複製從一個文件內容的差異到其他。

如何在Python中做到這一點?我們有任何庫函數來完成這個嗎?

實施例:

source.txt:  dest.txt 
a    a 
b    c 
c    e 
d    f 
e 

期望的操作後,它應該是:

source.txt:  dest.txt 
a    a 
b    c 
c    e 
d    f 
e    b 
       d 

注意,行的順序並不重要。

+1

爲什麼Python的? 'Git'服務器的目的更好! – ZdaR

+0

你能提供一些輸入和輸出樣本嗎?你想複製任何差異,只是差異本身,或者你想複製整個行在一些不同的點,... – Exceen

+0

但git,svn,或類似實際上將合併這兩個文件,並在正確的位置。這個問題的例子明確地表明你想要在之前的內容之後有所不同。爲什麼你更喜歡這個,我不知道,但是普通的工具不會這樣做,因爲它們是用於文本的地方,比如...文本,代碼或二進制文件 – Henrik

回答

1

如果您可以將您的文件排列成行列表,我們可以非常輕鬆地完成此操作。

if len(lineList1) > len(lineList2): 
    src = lineList1 
    dst = lineList2 
else 
    src = lineList2 
    dst = lineList1 
for x in range(len(src)): 
    if src[x] != dst[x] 
     dst[x] = scr[x] 

這段代碼找到最長的列表,遍歷兩者,如果目標上的行不相同,它將被複制。儘管我不確定這種方法在複製文件方面的好處,練習除外。

編輯

我想我明白。試試這個片斷:

output = dst + [x for x in src if x not in dst] 

這遍歷每一行,如果它不是在dst它添加在末尾。

0

使用difflib

import difflib 
 
file1 = "PATH OF FILE 1" 
 
file1 = open(file1, "r") 
 
file2 = "PATH OF FILE 2" 
 
file2 = open(file2, "r") 
 
diff = difflib.ndiff(file1.readlines(), file2.readlines()) 
 
file1.close() 
 
file2.close() 
 
delta = ''.join(x[2:] for x in diff if x.startswith('- ')) 
 
fh = open("PATH OF FILE 2", "a") 
 
fh.write(delta) 
 
fh.close 
 
fh = open("PATH OF FILE 2","r") 
 
print fh.read() 
 
fh.close()

相關問題