Skip to content
Advertisement

Python How do i filter out multiple strings from a big string then put it in a .txt file

So i have this piece of code here:

    Outlook='https://www.myfxbook.com/api/get-community-outlook.json?session=' + session_id
    Outlook_response = requests.get(Outlook, verify = False)
    Outlook_data = Outlook_response.json()['symbols']

I get everything i want from here but so i can f.write i need to put it into a string lstr = ' '.join(map(str, Outlook_data))

So now im just left with this:

{'name': 'EURUSD', 'shortPercentage': 19, 'longPercentage': 81, 'shortVolume': 5241.27, 'longVolume': 22432.81, 'longPositions': 50708, 'shortPositions': 17864, 'totalPositions': 68572, 'avgShortPrice': 1.0925, 'avgLongPrice': 1.1103} {'name': 'GBPUSD', 'shortPercentage': 20, 'longPercentage': 80, 'shortVolume': 2319.04, 'longVolume': 9272.55, 'longPositions': 28637, 'shortPositions': 8572, 'totalPositions': 37209, 'avgShortPrice': 1.3014, 'avgLongPrice': 1.3248} {'name': 'USDJPY', 'shortPercentage': 79, 'longPercentage': 21, 'shortVolume': 13172.25, 'longVolume': 3475.09, 'longPositions': 4530, 'shortPositions': 23878, 'totalPositions': 28408, 'avgShortPrice': 118.2402, 'avgLongPrice': 122.0914} {'name': 'GBPJPY', 'shortPercentage': 78, 'longPercentage': 22, 'shortVolume': 1476.39, 'longVolume': 421.39, 'longPositions': 1820, 'shortPositions': 5248, 'totalPositions': 7068, 'avgShortPrice': 155.8968, 'avgLongPrice': 160.6128} etc.

My problem is that i need to filter out multiple 'name': 'xxx', 'shortVolume': xxx, 'longVolume': xxx

then i need to save them into multiple txt files. For example EURUSD.txt contains name short volume and long volume, then another file GBPUSD.txt etc.

Any help is appreciated thanks in advance

Advertisement

Answer

from what I understand it, all you need is a dynamic file location that is based on name

# sample data
temp_data = [{'name': 'EURUSD', 'shortPercentage': 19, 'longPercentage': 81, 'shortVolume': 5241.27, 'longVolume': 22432.81, 'longPositions': 50708, 'shortPositions': 17864, 'totalPositions': 68572, 'avgShortPrice': 1.0925, 'avgLongPrice': 1.1103} ,{'name': 'GBPUSD', 'shortPercentage': 20, 'longPercentage': 80, 'shortVolume': 2319.04, 'longVolume': 9272.55, 'longPositions': 28637, 'shortPositions': 8572, 'totalPositions': 37209, 'avgShortPrice': 1.3014, 'avgLongPrice': 1.3248}, {'name': 'USDJPY', 'shortPercentage': 79, 'longPercentage': 21, 'shortVolume': 13172.25, 'longVolume': 3475.09, 'longPositions': 4530, 'shortPositions': 23878, 'totalPositions': 28408, 'avgShortPrice': 118.2402, 'avgLongPrice': 122.0914}, {'name': 'GBPJPY', 'shortPercentage': 78, 'longPercentage': 22, 'shortVolume': 1476.39, 'longVolume': 421.39, 'longPositions': 1820, 'shortPositions': 5248, 'totalPositions': 7068, 'avgShortPrice': 155.8968, 'avgLongPrice': 160.6128} ]

# base folder location
folder_loc = './'

for data in temp_data:
    # txt contains name short volume and long volume
    with open(f'{folder_loc}{data["name"]}.txt', 'w') as f:
        f.write(f'{data["name"]} {data["shortVolume"]} {data["longVolume"]}')

enter image description here

PS: you can format the file contents and the file location as required

Advertisement