как получить конкретные данные из файла с помощью сценария python? - PullRequest
0 голосов
/ 04 августа 2020

Я хочу извлечь некоторые данные из файла и использовать их в скрипте. Не могли бы вы помочь мне, как это сделать?

Пример: filename - information.txt

Application_Name - 'Text Miner'
     output_file - medaff_text_miner.csv
     s3_location - itx-ags-medaff-prd-sourcefiles/Refined_Layer/
     delimiter - '|'
     input_query - medaff_text_miner_query.txt

Application_Name - 'Text Extraction'
     output_file - medaff_text_extraction.csv
     s3_location - itx-ags-medaff-prd-sourcefiles/Refined_Layer/
     delimiter - ','
     input_file - medaff_text_extraction_query.txt

У меня есть сценарий python, в котором мне нужно использовать приведенную выше информацию. В аргументе я передаю application_name. Поэтому на основе имени приложения следует выбрать соответствующую информацию из файла и использовать ее в скрипте. Не могли бы вы помочь мне, как это сделать?

Python скрипт, который я использую:

def generate_Canada_Event_metadata_file():
    try:
        logging.info("Generating the File............[started]")
        conn = redshift_conn()

        with conn.cursor() as cur:
            path = input_path + input_query

            sql_file = open(path, 'r')
            sql_query = sql_file.read()
            print(sql_query)
            cur.execute(sql_query)
            result = cur.fetchall()
            #print(result)
            conn.commit()
            column = [i[0] for i in cur.description]

            df = pd.DataFrame(result, columns= column)
            os.system('rm -f '+ ec2_output + 'Canada_Event.csv')
            df.to_csv(ec2_output + output_file, index= False, sep =delimiter)
            os.system('chmod 777 '+ ec2_output + 'Canada_Event.csv')
            logging.info("Generating the Canada_Event File............[Ended]")
            s3_copy()
    except Exception as ex:
            print(ex)
            logging.info("Generating the Canada_Event File............[ERROR]")
            logging.error(ex)
            sys.exit(1)

1 Ответ

0 голосов
/ 04 августа 2020

Не тестировал, но вы можете попробовать что-то вроде этого:

def parse_applications_infos(filepath):
    apps = {}
    with open(filepath, 'r') as f:
        for line in f.readlines():
            if 'Application_Name' not in line:
                app_info.append(line)
            else:
                if len(app_info) != 0:
                     apps[line.rsplit('-').strip()[-1]] = (read_stats(app_info))
     return apps

def read_stats(application_info):
    info = {}
    for line in application_info:
        key, value = application_info.split('-').strip()
        info[key] = value
        return info

application_data = parse_applications_info('C:\Users\Bob\Desktop\Apps.txt')

for k, v in application_data['Text Miner'].iteritems():
    # do something with the flag/arg and value
    my_cmds.append(f"{k} {v}")

Он ищет разделитель «Application_Name» и затем создает dict с именами приложений в качестве ключей. , и dicts как значения с каждым из аргументов / флагов и значений как kv этого dict.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...