Загрузите zip-файл локально в tempfile, извлеките файлы во tempfile и перечислите файлы

#python-3.x #zipfile

#python-3.x #застежка — молния

Вопрос:

Я пытаюсь вернуться к python, и я не уверен, с чего начать, но я хочу загрузить zip-файл локально в temp, извлечь файлы, а затем перечислить файлы (которые в 99,99% случаев являются CSV-файлами). Я хочу перечислить файлы, чтобы я мог в дальнейшем обрабатывать один из файлов на основе логики с преимуществом автоматического удаления временного каталога.

Я могу сделать большую часть из вышеперечисленного на R довольно кратко, но мои требования заключаются в том, чтобы сопоставить эту идею с python, и из моих первоначальных поисковых запросов в Google решения, которые я нахожу, не кажутся простыми и не делают именно то, что я ищу.

Любая помощь была бы очень признательна.

Комментарии:

1. Вероятно, лучше всего использовать tempfile .

Ответ №1:

Мы начинаем с загрузки файла с помощью запросов

 import requests

results = requests.get('<url_to_zip>')
with open('/tmp/zip_folder.zip', 'wb') as f:
    f.write(results.content)
 

Затем мы извлекаем zip-файл в /tmp с помощью zipfile

 import zipfile
file = zipfile.ZipFile('/tmp/zip_folder.zip')
file.extractall(path='/tmp')
 

Затем мы перечисляем файлы.

 files = os.listdir('/tmp/zip_folder')
for file in files:
    if 'csv' in file:
        print(file)
 

Комментарии:

1. Это фантастика. В первом блоке я предполагаю, что так и должно быть f.write(results.content) . Возможно, это выходит за рамки, но в том же блоке, где внешний zip-файл записывается локально, это тоже может быть во временном файле?

2. Еще раз спасибо. Последней частью был поиск файлов csv, но я смог сделать это с import glob; files = glob.glob(path "*csv*") помощью where path = "/tmp/" .

3. tempfile в python — это реальная вещь, а не идея. То, что вы сделали здесь, — это загрузка во «временный файл». Google ищет unzip в tempfile, неправильно привел меня сюда.