Trying to read a config file in order to connect to twitter API

Question:

I am brand new at all of this and I am completely lost even after Googling, watching hours of youtube videos, and reading posts on this site for the past week.

I am using Jupyter notebook

I have a config file with my api keys it is called config.ipynb

I have a different file where I am trying to call?? (I am not sure if this is the correct terminology) my config file so that I can connect to the twitter API but I getting an attribute error

Here is my code

    import numpy as np
    import pandas as pd
    import tweepy as tw
    import configparser



    #Read info from the config file named config.ipynb

    config = configparser.ConfigParser()
    config.read(config.ipynb)
    api_key = config[twitter][API_key]

                      
    print(api_key) #to test if I did this correctly`
---------------------------------------------------------------------------
AttributeError                            Traceback (most recent call last)
Cell In [17], line 4
  1 #Read info from the config file named config.ipynb
  3 config = configparser.ConfigParser()

—-> 4 config.read(config.ipynb)
5 api_key = config[twitter][API_key]

AttributeError: 'ConfigParser' object has no attribute 'ipynb'

After fixing my read() mistake I received a MissingSectionHeaderError.

MissingSectionHeaderError: File contains no section headers. 
file: 'config.ipynb', line: 1 '{n'. 

My header in my config file is [twitter] but that gives me a NameError and say [twitter] is not defined… I have updated this many times per readings but I always get the same error.

My config.ipynb file code is below:

['twitter']

API_key = "" #key between the ""

API_secret =  "" #key between the ""
        
Bearer_token = "" #key between the ""

Client_ID = "" #key between the ""

Client_Secret = "" #key between the ""

I have tried [twitter], [‘twitter’], and ["twitter"] but all render a MissingSectionHeaderError:

Asked By: IDK

||

Answers:

You are using the read() method incorrectly, the input should be a string of the filename, so if your filename is config.ipynb then you need to set the method to

config.read('config.ipynb')
Answered By: brance

Per your last comment in Brance’s answer, this is probably related to your file path. If your file path is not correct, configparser will raise a KeyError or NameError.

Tested and working in Jupyter:

Note that no quotation marks such as "twitter" are used

# stackoverflow.txt
[twitter]
API_key = 6556456fghhgf
API_secret =  afsdfsdf45435
import configparser
import os

# Define file path and make sure path is correct
file_name = "stackoverflow.txt"

# Config file stored in the same directory as the script.
# Get currect working directory with os.getcwd()
file_path = os.path.join(os.getcwd(), file_name)

# Confirm that the file exists.
assert os.path.isfile(file_path) is True 
# Read info from the config file named stackoverflow.txt
config = configparser.ConfigParser()
config.read(file_path)

# Will raise KeyError if the file path is not correct
api_key = config["twitter"]["API_key"]
print(api_key)
Answered By: sitWolf