【发布时间】:2018-06-16 04:42:25
【问题描述】:
我目前有一个 python 文件,连同一个外部参数,将在时间戳文件夹内运行时分析数据(例如,我将 readA3200dat.py 和 ParameterFile.ini 移动到名为 201806151534 的文件夹中,等等)。但是我想使用argv 来消除不断将这些文件移入和移出文件夹的需要。
因为我的代码很长,所以我希望能够编写一个名为main 的函数,它基本上会在将python readA3200dat.py <FILENAME> 输入到命令行并像往常一样执行代码时移动到<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 ##
因为我没有使用argv 语法的经验,我不确定在哪里添加sys.argv[0] 等内容。
我试图创建一个函数__main__(argv) 并告诉它更改目录,然后正常执行我的其余代码,但它不执行代码。相反,它告诉我:
avg_set = avg_set/(len(settle_data))
ZeroDivisionError: integer division or modulo by zero
我认为这是因为程序实际上并没有更改为带时间戳的文件夹,所以它看不到文件夹中的 .dat 文件。
我将如何实现argv 以便能够在不同的文件中使用此代码?
【问题讨论】:
-
os.chdir(sys.argv[1])?尚不完全清楚您要问什么,但我敢打赌,您发布的代码至少有 90% 是无关紧要的。 -
抱歉 - 我包含了很多代码,因为我不确定是否应该在大部分代码中引用
argv,或者只是在函数readA3200dat()之外。我正在尝试确定如何获取所有这些代码并在将python readA3200dat.py <FILENAME>放入命令行时指定为<FILENAME>的任何文件中运行它。 -
不确定您所说的“获取所有这些代码并在任何文件中运行它”是什么意思;您几乎肯定希望在数据文件夹之外有一个脚本,只需将其指向不同的目录。你没有把你的代码放在任何不同的地方。