【问题标题】:Values not returning from main没有从 main 返回的值
【发布时间】:2020-07-04 20:36:20
【问题描述】:

我有以下代码,我希望将输入文件和输出文件拉入其他函数,但是,这些代码似乎没有返回。如果这很简单,仍然很新,所以很抱歉。

# PYTHON 3.76 ONLY
# Version 0.0.1

import xml.etree.cElementTree as et
import pandas as pd

import sys, getopt

def main(argv):
    inputfile = ''
    outputfile = ''
    try:
        opts, args = getopt.getopt(argv,"hi:o:",["ifile=","ofile="])
    except getopt.GetoptError:
        print ('test.py -i <inputfile> -o <outputfile>')
        sys.exit(2)
    for opt, arg in opts:
        if opt == '-h':
            print ('test.py -i <inputfile> -o <outputfile>')
            sys.exit()
        elif opt in ("-i", "--ifile"):
            inputfile = arg
        elif opt in ("-o", "--ofile"):
            outputfile = arg

    print ('Input file is "', inputfile)
    print ('Output file is "', outputfile)

    return inputfile, outputfile

if __name__ == "__main__":
    main(sys.argv[1:])

# convert XML to dataframe

def xml2df(xml_data):
    tree = et.parse(xml_data)
    print (tree.getroot())
    root = tree.getroot()
    print ("tag=%s, attrib=%s" % (root.tag, root.attrib))

    #iterate over each value for room and each user and add to rows
    rows = []

    for child in root.iter('rooms'):
        roomId, roomTitle = 'id', 'ttl'
    for it in child:
        if it.tag == 'room':
            roomId = it.findtext('roomID')
            roomTitle = it.findtext('roomTitle')
            roomStatus = it.findtext('status')
            isAnonymous = it.findtext('isAnonymous')
        elif it.tag == 'users':
            rows.append([roomId, roomTitle, roomStatus, isAnonymous, it.findtext('uuid'), it.findtext('bbgEmail'),
                it.findtext('corpEmail'), it.findtext('fullName'), it.findtext('firmName'), it.findtext('accountNumber'),
                      it.findtext('city'), it.findtext('accountName'), it.findtext('inviteDate'), it.findtext('removalDate')])

    df = pd.DataFrame(rows, columns=['roomId', 'roomTitle', 'roomStatus', 'isAnonymous', 'uuid', 'bbgEmail', 
                                 'corpMail', 'fullName', 'firmName', 'accountNumber', 'city', 'accountName', 'inviteDate', 'removalDate'])

    return df


df = xml2df(inputfile)
#output to csv
df.to_csv(ooutputfile+".csv", sep=',', index=False)

返回错误

Traceback(最近一次调用最后一次):文件“parse_pChatDump.py”,行 63,在 df = xml2df(inputfile) NameError: name 'inputfile' is not defined

【问题讨论】:

  • inputfile和outputfile是main方法的局部变量,外部无法访问

标签: python main


【解决方案1】:

您在 main 方法中创建 inputfileoutputfile 并返回它但是您没有将它们存储在脚本启动的变量中,因此您以后无法访问它们,请执行以下操作:

def main(argv):
    inputfile = ''
    outputfile = ''
    # ...
    return inputfile, outputfile


def xml2df(xml_data):
    # ...
    return df


if __name__ == "__main__":
    inputfile, outputfile = main(sys.argv[1:])
    df = xml2df(inputfile)
    df.to_csv(outputfile + ".csv", sep=',', index=False)

【讨论】:

  • 嗯是有道理的。我知道这很简单,但就是想不通。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-05-26
  • 2014-08-06
相关资源
最近更新 更多