Py学习  »  Python

尝试运行python脚本来清点ftp门户

ryguy72 • 5 年前 • 1285 次点击  

昨天,我请求帮助编写一个python脚本来遍历文件夹,检查每个文件夹的内容,并打印出一份报告,其中包含这些文件夹中文件的一些基本统计信息。martin prikryl给我指出了几个月前他开发的一些代码的方向。我试过了,没有任何错误,但也没有任何结果。这是密码。

from ftplib import *
global ftp
import ftplib
import io
from io import StringIO
import string
import pandas as pd
from pandas.compat import StringIO
from collections import Counter

from ssl import SSLSocket

class FtpFile:

    def __init__(self, ftp, name):
        self.ftp = ftp
        self.name = name
        self.size = ftp.size(name)
        self.pos = 0

    def seek(self, offset, whence):
        if whence == 0:
            self.pos = offset
        if whence == 1:
            self.pos += offset
        if whence == 2:
            self.pos = self.size + offset
        print("seek {}".format(self.pos))

    def tell(self):
        print("tell {}".format(self.pos))
        return self.pos

    def read(self, size = None):
        if size == None:
            size = self.size - self.pos
        print("read {}".format(size))
        data = ""

        # based on FTP.retrbinary 
        # (but allows stopping after certain number of bytes read)
        ftp.voidcmd('TYPE I')
        cmd = "RETR {}".format(self.name)
        conn = ftp.transfercmd(cmd, self.pos)
        try:
            while len(data) < size:
                buf = conn.recv(min(size - len(data), 8192))
                if not buf:
                    break
                data += buf
            # shutdown ssl layer (can be removed if not using TLS/SSL)
            if SSLSocket is not None and isinstance(conn, SSLSocket):
                conn.unwrap()
        finally:
            conn.close()
        ftp.voidresp()
        print("read {}".format(len(data)))
        return data

# And then you can use it like:
ftp = FTP(portal, user_name, password)
ftp.cwd('/emm/') # folder that I'm trying to query

zipstring = StringIO()
print(zipstring)
name = "C:/Users/ryans/OneDrive/Desktop/archive.zip"
print(name)
size = ftp.size(name)
print(size)
ftp.retrbinary("RETR " + name, zipstring.write, rest = size - 1000*2024)

zip = zipfile.ZipFile(zipstring)

print(zip.namelist())

我希望结果会在某个地方打印出来,或者是文本文件,或者是csv文件,但是我没有看到任何打印出来的东西。而且,代码运行得非常,非常慢,而且从未真正完成。 再说一次,我在任何地方都看不到任何结果。我看到的ftp门户大约是7.6gb,它有705个文件夹和文件。我想要获取文件名,添加/更改文件的日期,每个文件的大小,如果可能的话,每个文件中的记录计数。也许最后一件事太难做了。我认为其他的事情是可行的。

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/43364
 
1285 次点击  
文章 [ 1 ]  |  最新文章 5 年前