python - 检查迭代中的所有项是否具有相同的属性

时间:2015-04-23 19:13:30

标签: python ftplib

我是python的新手,我正在编写一个脚本,登录到ftp服务器以获取文件列表,然后检查同一文件夹中的所有文件是否具有相同的大小,但我可以'找到一种方法来比较文件夹路径相同的大小,这是我到目前为止的地方:

import ftputil

server = 'xxxxxx'
user = 'xxxxxx'
password = 'xxxxxx'
root_folder = 'xxxxxx'

ftp = ftputil.FTPHost(server, user, password)
recursive = ftp.walk(root_folder, topdown=True, onerror=None)
for root_folder, subdir, files in recursive:
    for name in files:
        file_path = ftp.path.join(root_folder)
        file_size = ftp.stat(ftp.path.join(root_folder, name))[6]
        print(file_path, file_size)

有人可以帮我弄清楚如何比较同一目录中文件的大小吗?

2 个答案:

答案 0 :(得分:0)

假设您的大部分代码都有效。我假设你要么想要真假,当你找到第一个差异时,你想要停止迭代。例如:

same_size = None
common_size = False   # initialise

recursive = ftp.walk(root_folder, topdown=True, onerror=None)
for root_folder, subdir, files in recursive:
    for name in files:
        file_path = ftp.path.join(root_folder)
        file_size = ftp.stat(ftp.path.join(root_folder, name))[6]
        print(file_path, file_size)

        if common_size is None:      # execute on first file
            common_size = file_size
        elif common_size == file_size:
            same_size = True
        else
            same_size = False
            break

如果那里只有一个文件,你需要决定该怎么做。

答案 1 :(得分:0)

开始使用空值进行迭代,将其设置为第一项并在之后与此值进行比较。

expected_size = None
for root_folder, subdir, files in recursive:
    for name in files:
        file_size = ftp.stat(ftp.path.join(root_folder, name))[6]
        if expected_size is None:
            expected_size = file_size
        if expected_size != file_size:
            return True
    return False