[英]python - Ftp upload file in directory structure per /year/month/day
[英]Creating year / month / day folder structure with Python in FTP
我正在尋找使用 Python ftplib 模塊創建年/月/日文件夾結構的選項
聯系:
ftp = ftplib.FTP(ftp_servidor, ftp_usuario, ftp_clave)
加載變量:
ftp_raiz = 'TEST/'
filename = '2019-10-01T00-00-00.txt'
功能:
def cdTree(ftp, filename=None, path=None):
if filename is not None:
date = datetime.datetime.strptime(filename, '%Y-%m-%dT%H-%M-%S.txt')
path = ftp_raiz + date.strftime('%Y') + '/' + date.strftime('%m') + '/' + date.strftime('%d')
print filename
if path != "":
try:
ftp.cwd(path)
except error_perm as e:
print e, ", creating folder"
print path
cdTree(ftp, path="/".join(path.split("/")[:-1]))
ftp.mkd(path)
ftp.cwd(path)
cdTree(ftp, filename, 'TEST')
最后我沒有創建文件夾結構,它拋出了以下錯誤:
2018-10-18T00-00-00.txt
550 Failed to change directory. , creating folder
2018/10/18
550 Failed to change directory. , creating folder
2018/10
Traceback (most recent call last):
File "ftp2.py", line 34, in <module>
cdTree(ftp, filename)
File "ftp2.py", line 30, in cdTree
cdTree(ftp, path="/".join(path.split("/")[:-1]) )
File "ftp2.py", line 31, in cdTree
ftp.mkd(path)
File "C:\python27\lib\ftplib.py", line 589, in mkd
resp = self.sendcmd('MKD ' + dirname)
File "C:\python27\lib\ftplib.py", line 251, in sendcmd
return self.getresp()
File "C:\python27\lib\ftplib.py", line 226, in getresp
raise error_perm, resp
ftplib.error_perm: 550 Create directory operation failed.
注意:執行只創建一個文件夾的測試,它可以工作!
你的代碼對我來說沒有多大意義。
我相信你想要這個:
def cdTree(ftp, path):
print "entering folder {0}".format(path)
try:
ftp.cwd(path)
except:
print "failed to enter, creating"
cdTree(ftp, path="/".join(path.split("/")[:-1]))
ftp.mkd(path)
ftp.cwd(path)
ftp_raiz = 'TEST/'
filename = '2019-10-01T00-00-00.txt'
date = datetime.datetime.strptime(filename, '%Y-%m-%dT%H-%M-%S.txt')
path = ftp_raiz + date.strftime('%Y/%m/%d')
cdTree(ftp, path)
我不確定這是否有幫助,但在 HDFS 文件系統上嘗試了相同的方法,它幫助我解決了我的要求。可以在函數 generateDateFromThisYear() 中更改所需的輸出
import datetime as d
import subprocess
def run_cmd(args_list):
"""
run linux commands
"""
# import subprocess
print('Running system command: {0}'.format(' '.join(args_list)))
proc = subprocess.Popen(args_list, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
s_output, s_err = proc.communicate()
s_return = proc.returncode
return s_return, s_output, s_err
def hdfsMakedir(hdfs_file_path):
(ret, out, err) = run_cmd(['hdfs', 'dfs', '-mkdir','-p', hdfs_file_path])
def make_necessary_dirs(dir_to_create: str):
# print(pathExists(dir_to_create))
if pathExists(dir_to_create) == 1:
hdfsMakedir(dir_to_create)
return dir_to_create
else:
return "the folder already exists"
list_of_dates =[]
def generateDateFromThisYear(year) :
months = [1,2,3,4,5,6,7,8,9,10,11,12]
dt = "" #str(d.date(2012, 1, 1))
for month in months:
no_of_days = monthrange(year, month)[1] # Taking only second Value as it returns number of weeks and no of days
for day in range(1,no_of_days+1) :
x = d.date(year,month,day)
y= x.strftime("%Y")+'/'+x.strftime("%m")+'/'+x.strftime("%d")
list_of_dates.append(y)
for i in list_of_dates:
make_necessary_dirs(i)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.