Я пытаюсь запустить скрипт Python, который сохраняет имена папок на FTP (глубиной 1 подпапка) в CSV, но сохраняет в CSV только имя одной папки, а затем останавливается без ошибок. p>
Я не использую root-логин для подключения, так как не предполагал, что мне это нужно. Я просто пытаюсь выяснить, нужно ли мне исправить скрипт или мои разрешения FTP.
import time
from ftplib import FTP, error_perm
import csv
import socket
# --- FTP Configuration ---
ftp_host = "XXX"
ftp_user = "XXX"
ftp_pass = "XXX"
# --- FTP Connection Parameters ---
timeout = 60 # seconds
passive_mode = True # Set to True to use passive mode
# --- Connect to FTP ---
try:
ftp = FTP(ftp_host, timeout=timeout)
ftp.login(ftp_user, ftp_pass)
if passive_mode:
ftp.set_pasv(True) # Enable passive mode
except socket.timeout:
print("Error: Connection timed out.")
exit()
except Exception as e:
print(f"Error connecting to FTP: {e}")
exit()
def get_folders(path):
"""
Retrieves a list of folders and their immediate subfolders
from the given path on the FTP server.
Args:
path (str): The base path on the FTP server.
Returns:
list: A list of tuples, where each tuple contains
the folder path and a list of its subfolders.
"""
folders = []
try:
ftp.cwd(path)
items = ftp.nlst()
for item in items:
try:
ftp.cwd(f"{path}/{item}")
ftp.cwd(path)
subfolders = []
for subitem in ftp.nlst(f"{path}/{item}"):
try:
ftp.cwd(f"{path}/{item}/{subitem}")
ftp.cwd(f"{path}/{item}")
subfolders.append(subitem)
except error_perm:
pass # Not a folder
folders.append((item, subfolders))
print(f"Processed folder: {path}/{item}")
time.sleep(0.1)
except error_perm:
pass # Not a folder
except Exception as e:
print(f"Error processing folder {path}: {e}")
return folders
# --- Get the folder structure ---
folder_data = get_folders("/") # Start from the root
# --- Save data to CSV ---
with open("ftp_folders.csv", "w", newline="", encoding="utf-8") as csvfile:
writer = csv.writer(csvfile)
writer.writerow(["Folder", "Subfolders"])
for folder, subfolders in folder_data:
writer.writerow([folder, ", ".join(subfolders)])
print(f"Wrote folder to CSV: {folder}")
# --- Close the FTP connection ---
try:
ftp.quit()
except Exception as e:
print(f"Error closing FTP connection: {e}")
print("Folder data extracted and saved to ftp_folders.csv")
Подробнее здесь: https://stackoverflow.com/questions/792 ... ith-python
Просмотр содержимого FTP-сервера с помощью Python ⇐ Python
Программы на Python
-
Anonymous
1734307234
Anonymous
Я пытаюсь запустить скрипт Python, который сохраняет имена папок на FTP (глубиной 1 подпапка) в CSV, но сохраняет в CSV только имя одной папки, а затем останавливается без ошибок. p>
Я не использую root-логин для подключения, так как не предполагал, что мне это нужно. Я просто пытаюсь выяснить, нужно ли мне исправить скрипт или мои разрешения FTP.
import time
from ftplib import FTP, error_perm
import csv
import socket
# --- FTP Configuration ---
ftp_host = "XXX"
ftp_user = "XXX"
ftp_pass = "XXX"
# --- FTP Connection Parameters ---
timeout = 60 # seconds
passive_mode = True # Set to True to use passive mode
# --- Connect to FTP ---
try:
ftp = FTP(ftp_host, timeout=timeout)
ftp.login(ftp_user, ftp_pass)
if passive_mode:
ftp.set_pasv(True) # Enable passive mode
except socket.timeout:
print("Error: Connection timed out.")
exit()
except Exception as e:
print(f"Error connecting to FTP: {e}")
exit()
def get_folders(path):
"""
Retrieves a list of folders and their immediate subfolders
from the given path on the FTP server.
Args:
path (str): The base path on the FTP server.
Returns:
list: A list of tuples, where each tuple contains
the folder path and a list of its subfolders.
"""
folders = []
try:
ftp.cwd(path)
items = ftp.nlst()
for item in items:
try:
ftp.cwd(f"{path}/{item}")
ftp.cwd(path)
subfolders = []
for subitem in ftp.nlst(f"{path}/{item}"):
try:
ftp.cwd(f"{path}/{item}/{subitem}")
ftp.cwd(f"{path}/{item}")
subfolders.append(subitem)
except error_perm:
pass # Not a folder
folders.append((item, subfolders))
print(f"Processed folder: {path}/{item}")
time.sleep(0.1)
except error_perm:
pass # Not a folder
except Exception as e:
print(f"Error processing folder {path}: {e}")
return folders
# --- Get the folder structure ---
folder_data = get_folders("/") # Start from the root
# --- Save data to CSV ---
with open("ftp_folders.csv", "w", newline="", encoding="utf-8") as csvfile:
writer = csv.writer(csvfile)
writer.writerow(["Folder", "Subfolders"])
for folder, subfolders in folder_data:
writer.writerow([folder, ", ".join(subfolders)])
print(f"Wrote folder to CSV: {folder}")
# --- Close the FTP connection ---
try:
ftp.quit()
except Exception as e:
print(f"Error closing FTP connection: {e}")
print("Folder data extracted and saved to ftp_folders.csv")
Подробнее здесь: [url]https://stackoverflow.com/questions/79283396/listing-contents-of-an-ftp-server-with-python[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия