#python #pandas #download #python-requests
#python #панды #Скачать #python-запросы
Вопрос:
Я пытаюсь загрузить файл на Python с URL-адреса https://marketdata.theocc.com/position-limits?reportType=change .
Я могу преобразовать его в DataFrame, просто используя:
df = pd.read_csv('https://marketdata.theocc.com/position-limits?reportType=change')
Но то, что я хочу, — это также получить имя файла.
итак, если вы загружаете файл непосредственно из браузера, имя полученного файла будет «POSITIONLIMITCHANGE_20201202.txt «.
Может кто-нибудь предложить эффективный способ сделать это на Python? Спасибо.
Ответ №1:
если вы используете requests
библиотеку, информация о файле содержится в заголовке ответа (словаре).:
response = requests.get('https://marketdata.theocc.com/position-limits?reportType=change')
print(response.headers['content-disposition'])
Выходной сигнал:
attachment; filename=POSITIONLIMITCHANGE_20201202.txt
Ответ №2:
Пример кода на Python для извлечения файла из URL, извлечения имени файла, сохранения в локальный файл и импорта в фрейм данных Pandas.
import io
import requests
import re
import pandas as pd
url = 'https://marketdata.theocc.com/position-limits?reportType=change'
r = requests.get(url)
# NOTE: filename is found in content-disposition HTTP response header
s = r.headers.get('content-disposition')
# use regexp with w to match only safe characters in filename
# this will prevent accepting paths or drive letters as part of name
m = re.search(r'filename=(w )', s)
if m:
filename = m.group(1)
else:
# set default if filename not provided or name has bad characters
filename = "out.csv"
print("filename:", filename)
text = r.text
# if you want to write out file with filename provided
with open(filename, 'w') as fp:
fp.write(text)
# to read from string in-memory wrap with io.StringIO()
df = pd.read_csv(io.StringIO(text))
print(list(df.columns))
Выходной сигнал:
filename: POSITIONLIMITCHANGE_20201202.txt
['Equity_Symbol',' ','Start_Date','Start_Pos_Limit','End_Date','End_Pos_Limit','Action']