2015-11-16 28 views
0

现在它从目录中返回整个文件列表,而不是目录和文本文件之间的区别。有任何想法吗?如何将文本文件中的列表与目录中的列表进行比较并显示差异?

import os, sys 
path = "C:\\Users\\INstokes\\Desktop\\CityPts\\" 

old_files = "C:\\Users\\INstokes\\Desktop\\CityPts\\file.txt" 
new_files = os.listdir(path) 


text_file = open(old_files, "r") 
old_list = text_file.readlines() 


s = set(old_list) 
temp3 = [x.strip() for x in new_files if x.strip() not in old_list] 
print temp3 

text_file.close() 
+0

如何在'''old_files''文件名'格式化?他们是否包含整个文件路径或仅包含名称? – wnnmaw

回答

0

这里的问题是,当你使用text_file.readlines()时,你会得到包括行尾的行的列表。

所以,你得到像这样回:

>>> old_list 
['This is 1st line\n', 'This is 2nd line\n', 
'This is 3rd line\n', 'This is 4th line\n', 
'This is 5th line\n'] 

然后在这行:

temp3 = [x.strip() for x in new_files if x.strip() not in old_list] 

您比较在new_files每个文件路径,剥离,那些在old_list它们都具有换行符最后,它们当然永远不会匹配(你也不会使用创建的集合s,尽管这更多的是性能问题)。

你真的想从old_list剥离,不new_files

old_list = text_file.readlines() 
s = set(item.rstrip() for item in old_list) 
temp3 = [x for x in new_files if x not in s] 

全部放在一起,并凝结了一下:

import os 
import os  

def diff_dir_with_filelist(directory, filepath): 
    new_files = os.listdir(directory) 
    with open(filepath, 'r') as text_file: 
     old_list = text_file.readlines() 

    old_files = set(item.rstrip() for item in old_list) 
    return [x for x in new_files if x not in old_files] 

results = diff_dir_with_filelist("C:\\Users\\INstokes\\Desktop\\CityPts\\", "C:\\Users\\INstokes\\Desktop\\CityPts\\file.txt") 
print(results) 
+0

我试着用指定的os.listdir(path)来运行这个脚本,尽管它没有返回错误,但它在打印差异时也没有打印任何东西。有任何想法吗? –

+0

该函数将所需目录和文件路径作为输入,以对其内容进行区分并返回目录中的列表,但不返回给定文件中文件列表中的列表。如果你想看到他们,你必须打印出返回的结果。还会更新 – lemonhead

+0

,刚刚发现了一个'NameError',其代码可能会导致意外的行为。你可以再试一次吗? – lemonhead

相关问题