Как успешно передавать данные по FTP для доступа к папкам в zip-архивах с помощью PYTHONPython

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Как успешно передавать данные по FTP для доступа к папкам в zip-архивах с помощью PYTHON

Сообщение Anonymous »

Привет всем, проблема заключается в том, что я постоянно получаю следующую ошибку:
"[WinError 10054] Существующее соединение было принудительно закрыто удаленным хостом".
Это происходит примерно в одном и том же месте в папках FTP. Я полагаю, что это как-то связано с тем, что команда RETR в конечном итоге блокирует FTP?
Я пробовал команду сна, фрагментацию и т. д. Это сработало без использования io.BytesIO, но мне нужен ftp метаданные из CSV-файлов, находящихся внутри заархивированных папок. Я бы предпочел не загружать файлы, поэтому я выбрал этот подход. Если будет оптимально загрузить его, я пересмотрю свое решение. Я тоже видел варианты временной загрузки и последующего удаления папок. Я просто не уверен, сколько времени займет этот процесс. Мне нужно обработать много файлов.
В моем примере структура папок выглядит примерно так:
202404 -> My_Project-(20240412-20240412)-20240413.zip - > Мой_проект-(20240412-20240412)-20240413.csv
У меня много папок по годам и месяцам, и в каждой из этих папок есть zip-папки на каждый день. И затем внутри каждого из этих zip-архивов находится CSV-файл.
Это моя функция обработки zip-файлов:

Код: Выделить всё

def process_zip_and_get_data(ftp, zip_name, allowed_report_types):

results = []

# Open the ZIP file from the stream and list its contents
try:

# Stream ZIP file data into memory
zip_stream = io.BytesIO()
logger.info(f"Streaming ZIP file: {zip_name}")
ftp.retrbinary(f"RETR {zip_name}", zip_stream.write, blocksize=8192)
# Reset stream position
zip_stream.seek(0)

with zipfile.ZipFile(zip_stream) as zip_ref:
for zip_info in zip_ref.infolist():
if zip_info.filename.endswith('.csv'):

# Regex to match files
file_name_pattern = re.compile(
r'^(?P[A-Za-z0-9\-_]+)-\((?P\d{8})-(?P\d{8})\)-(?P\d{4}-\d{2}-\d{2})_.*\.csv')

match = file_name_pattern.fullmatch(zip_info.filename)

if match:

report_type = match.group("report_type")

# Skip files if the report_type is not in the allowed list
if allowed_report_types and report_type not in allowed_report_types:
logger.info(f"Skipped file due to disallowed report type: {zip_info.filename}")
continue

results.append ({
"file_name": zip_info.filename,
"report_type": match.group("report_type"),
"ftp_upload_date": datetime(*zip_info.date_time).date(),
"file_date_from": datetime.strptime(match.group("file_date_from"), "%Y%m%d").date(),
"file_date_to": datetime.strptime(match.group("file_date_to"), "%Y%m%d").date(),
"file_date_upload": match.group("file_date_upload"),
"size": zip_info.file_size,
"status": "Incomplete"
})
else:
logger.warning(f"Skipped subfolder: {zip_info.filename}")

except Exception as e:
logger.error(f"Error processing ZIP file {zip_name}: {e}")

return results
Как я уже сказал, это работает, когда я пытаюсь получить только метаданные zip-файла без использования io.BytesIO,
но я бы предпочел получать фактические метаданные изнутри CSV .

Подробнее здесь: https://stackoverflow.com/questions/793 ... ith-python
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Как успешно передавать данные по FTP для доступа к папкам в zip-архивах с помощью PYTHON
    Anonymous » » в форуме Python
    0 Ответы
    9 Просмотры
    Последнее сообщение Anonymous
  • Как успешно передавать/загружать zip-файлы по FTP с помощью PYTHON
    Anonymous » » в форуме Python
    0 Ответы
    14 Просмотры
    Последнее сообщение Anonymous
  • Удаление файлов на основе ввода, чтобы избежать доступа к родительским папкам
    Anonymous » » в форуме JAVA
    0 Ответы
    2 Просмотры
    Последнее сообщение Anonymous
  • Удаление файлов на основе ввода, чтобы избежать доступа к родительским папкам
    Anonymous » » в форуме JAVA
    0 Ответы
    2 Просмотры
    Последнее сообщение Anonymous
  • Удаление файлов на основе ввода, чтобы избежать доступа к родительским папкам
    Anonymous » » в форуме JAVA
    0 Ответы
    3 Просмотры
    Последнее сообщение Anonymous

Вернуться в «Python»