昨天,我请求帮助编写一个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个文件夹和文件。我想要获取文件名,添加/更改文件的日期,每个文件的大小,如果可能的话,每个文件中的记录计数。也许最后一件事太难做了。我认为其他的事情是可行的。