如何将文本文件中的列表与目录中的列表进行比较并打印差异?

2024-10-04 01:32:23 发布

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

现在它返回的是目录中所有文件的列表,而不是目录和文本文件之间的差异。有什么想法吗?你知道吗

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()

Tags: pathtext目录newosfilesusersold
1条回答
网友
1楼 · 发布于 2024-10-04 01:32:23

这里的问题是,当您使用^{}时,您会得到一个包含行尾的行列表。你知道吗

所以你得到了这样的回报:

>>> 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)

相关问题 更多 >