【问题标题】:Alternative to finding files on an ftp server?替代在 ftp 服务器上查找文件?
【发布时间】:2017-09-12 07:19:08
【问题描述】:

所以我有这种在 ftp 上查找特定 jpg 的非常粗暴的方法。 它在我拥有的 excel 上查找文件并检查 ftp。 你们将如何让这个更正确更快/更容易/更普遍?

ftp = FTP("ftp.helmethouse.com")
g=ftp.login(user ='username',passwd = 'password')

wb = openpyxl.load_workbook(r'C:\Users\aaron\Documents\HustleHardRacing\Shoei HJC Colors only.xlsx')
sheet = wb.get_sheet_by_name('Shoei HJC full colors and sizes')

def check_line_for_img(line):
    for i in range(2,143):
        x = sheet.cell(row =i, column = 3).value
        k = ['r.jpg', 'top.jpg', 't.jpg', 'rer.jpg', 'rt.jpg']
        line = line[56:]
        if x is None:
            pass
        else:
            for i in range(len(k)):
                y = (x[:-2]+'03'+k[i])
                print(y)
                if line == y:
                    print(line)
                elif y is None:
                    print ('Error!')
                    pass
                else:
                    pass
k = ftp.retrlines('LIST', check_line)

【问题讨论】:

  • 定义“更通用”
  • 注意:如果此代码没有以某种方式损坏,请尝试在此处询问 codereview.stackexchange.com/tour
  • 我想问“一般来说,搜索项目列表以获取特定值的最佳做法是什么。”但我可能自己去找那个
  • 除了嵌套的 for 循环(其中有两个 i 变量)之外,我不确定您认为您的方法有什么问题。
  • 您可以在循环之外定义k...您可以使用Pandas 而不是openpyxl 作用于整个列而不是单元格...

标签: python list python-3.5 openpyxl ftplib


【解决方案1】:

您可以使用set() 进行操作,例如:

from openpyxl.workbook.workbook import Workbook as _Workbook

def normalize(l, has_ext=False):
    for i in range(len(l)):
        if has_ext: l[i] = l[i][:-4]
        l[i] = l[i][:-2]
    return l

wb = _Workbook()
ws = wb.worksheets[0]
data = [['', '', 'Images'], ['', '', 'r01'], ['', '', 'top01'], ['', '', 't01'], ['', '', 'rer01'], ['', '', 'rt01']]
for row, rData in enumerate(data, 1): ws.append(rData)

x = [c[0].value for c in ws['C2:C6']]
print('x=%s' % str(x))

k = ['r03.jpg', 'top03.jpg', 't03.jpg', 'rer03.jpg', 'rt03.jpg', 'rr03.jpg']

x_set = set( normalize(x) )
k_set = set( normalize(k, True) )
print('x_set=%s\nk_set=%s' % (x_set, k_set))

x_diff = k_set.difference(x_set)
if x_diff:
    print('x_set missing:%s' % (x_diff))

k_diff = x_set.difference(k_set)
if k_diff:
    print('k_set missing:%s' % (k_diff))
else:
    print('k_set missing None')

输出
x=['r01', 'top01', 't01', 'rer01', 'rt01']
x_set={'top', 'r', 'rer', 't', 'rt'}
k_set={'top', 'rer', 't', 'r', 'rt', 'rr'}
x_set 缺失:{'rr'}
k_set 缺失 无

用 Python:3.4.2 测试 - openpyxl:2.4.1

【讨论】:

    猜你喜欢
    • 2014-04-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-15
    • 2012-08-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多