Использование argv для изменения каталога при запуске файла python

1

В настоящее время у меня есть файл python, который вместе с внешним параметром будет анализировать данные при запуске внутри временных файлов (например, я перемещаю readA3200dat.py и ParameterFile.ini в папку с именем 201806151534 и т.д.). Однако я хочу использовать argv чтобы исключить необходимость постоянного перемещения этих файлов в папки и из них.

Поскольку мой код довольно длинный, я надеялся написать функцию main, которая в основном переместилась бы в <FILENAME> при входе python readA3200dat.py <FILENAME> в командную строку и выполнить код как обычно.

Кроме того, поскольку мне требуется папка параметров, ParameterFile.ini находится в том же каталоге, я надеялся, что это будет перемещено, но поскольку это всегда одно и то же имя, мне не нужен argv.

Это мой код (сокращение немного): Примечание: код имеет значение только для отображения общей структуры кодирования - я включаю его строго, потому что я не уверен, где в коде я должен включить синтаксис argv.

import os
import numpy as np
import re

class DataStructure(object):  #Data File Class

    '''Object to contain data file information parsed in readA3200dat'''

    def __init__(self):
        self.AxisName = None
        ## more like this ##

def readA3200dat(filename): 
    ''' 
    Takes in the file path of dat file
    Returns Data structure with information from dat file
    '''
    if filename == None: # if filename is None, return None
        print("\nWARNING: Filename set to None, returning None")
        return None, None

    try: # try to open file
        f = open(filename, 'r')  #open the specified file

    except IOError as e:
        print ("\nI/O error({0}): {1}\n".format(e.errno, e.strerror))
        raise

    fileLine = f.readline() #read data in to fileLine list


### Data Reading and Analysis ##

cur_dir = os.getcwd()
folders = os.listdir(cur_dir)

for i in folders:
    name, ext = os.path.splitext(i)
    if ext == '.dat':
        data = readA3200dat(i)
        ## find average values, std, etc. ##
try:
    from configparser import ConfigParser
except ImportError:
    from ConfigParser import ConfigParser

config = ConfigParser()
config.read('ParameterFile.ini')

# read values from a section
GainAff = config.getfloat('Section 1', 'gainaff')
## more like this ##

## print values ##

if os.path.isfile("ResultingSettleTimes.txt") == False:
    y = open("ResultingSettleTimes.txt", 'w')
    y.write('#GainAff / GainVff /  FFA  / Traj.FIR /  RampRate  / SettleTime(avg)#')
    print '\nPrinting to ResultingSettleTimes.txt'
    ## Write a bunch of stuff to the .txt file ##

Поскольку я не sys.argv[0] с использованием синтаксиса argv, я не уверен, где добавить такие вещи, как sys.argv[0] и т.д.

Я попытался создать функцию __main__(argv) и сообщить ей об изменении каталогов, а затем выполнить остальную часть моего кода как обычно, но он не выполняет код. Вместо этого он говорит мне:

avg_set = avg_set/(len(settle_data))
ZeroDivisionError: integer division or modulo by zero

Я думаю, что это потому, что программа фактически не меняется в папку с временными метками, поэтому она не видит файлы.dat в папке.

Как я могу реализовать argv чтобы использовать этот код в другом файле?

Теги:
argv

1 ответ

0

Ваша предлагаемая стратегия прекрасна; ваша основная проблема заключается в том, что вы неправильно обрабатываете значение argv. Если вы хотите пойти с исходным планом, отлаживайте свой скрипт (см. Pdb), чтобы увидеть значение argv. Затем отрегулируйте свой код, чтобы захватить нужные части, и передайте их __main__.

Кроме того, я предлагаю вам использовать optparse а не argv. Это помогает вам следовать современным соглашениям для инструментов командной строки и предоставлять документацию.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню