Portál AbcLinuxu, 13. května 2025 02:53
Potrebujem kratky skript, ktory stiahne subor zo serveru a potom ho na vzdialenom serveri presunie do novovytvoreneho adresara. Vsetko funguje ako ma, ale pri pokuse o presun dostanem:
Traceback (most recent call last):
File "./ftpdownload.py", line 31, in <module>
ftp.rename(item, newpath/item)
TypeError: unsupported operand type(s) for /: 'str' and 'str'
Co v tom robim zle?
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
import os
import datetime
from ftplib import FTP
path = 'recordings'
try:
os.mkdir(path)
except OSError:
pass
os.chdir(path)
ftp = FTP('some.domain.name')
ftp.login('tester', 'testerPassword')
list = ftp.nlst()
count = len(list)
now = datetime.datetime.now().strftime('%Y%m%d%H%M%S')
newpath = 'downloaded_on_' + now
ftp.mkd(newpath)
for item in list:
file = open(item, 'wb')
ftp.retrbinary("RETR " + item, file.write)
print(count, 'files to download.')
count -= 1
ftp.rename(item, newpath/item)
ftp.close()
Python si myslí, že chceš podělit řetězec řetězcem.
Možná jsi na tom řádku chtěl napsat spíš newpath + '/' + item anebo ještě lépe os.path.join(newpath, item).
A ještě něco. Hodilo by se vymyslet jiné názvy pro proměnné „list“ a „file“, aby se nepřepsal jejich původní význam.
Aj za tieto pripomienky dakujem, neuvedomil som si, ze si vytvaram blby navyk.
ftp.rename(item, newpath + '/' + item)
Funguje presne ako ma, dakujem.
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.