Python 在函数中定义变量时出现名称定义错误

Python 在函数中定义变量时出现名称定义错误,python,function,for-loop,variables,scope,Python,Function,For Loop,Variables,Scope,我有一段代码,它接受一个带有文件名列表的.csv作为输入,然后将文件名分解为其组成部分,并将其与一些附加字符一起重新排序 输入示例: 3006419_3006420_ENG_FRONT.jpg ;E3006419_3006420_FRONT_Image_Container; 输出示例: 3006419_3006420_ENG_FRONT.jpg ;E3006419_3006420_FRONT_Image_Container; 但是,我想创建for循环的一部分,该部分将文件名拆分成一个可以

我有一段代码,它接受一个带有文件名列表的.csv作为输入,然后将文件名分解为其组成部分,并将其与一些附加字符一起重新排序

输入示例:

3006419_3006420_ENG_FRONT.jpg
;E3006419_3006420_FRONT_Image_Container;
输出示例:

3006419_3006420_ENG_FRONT.jpg
;E3006419_3006420_FRONT_Image_Container;
但是,我想创建for循环的一部分,该部分将文件名拆分成一个可以在其他地方调用的函数,这样我就可以在另一个for循环中重新使用它,以不同的格式输出。然而,当我试图定义一个函数时,我的变量似乎有一个作用域错误,无法在output.write语句中使用它们

工作代码

from csv import reader
import sys

if len(sys.argv) != 2:
    print('USAGE ERROR:\nRun like "python <script.py> <input file.csv>"') #error message if code is not run with correct number of arguments
    exit()

file = open(sys.argv[1]) #open input file
output = open('output.impex','w+') #define output impex file

for line in file:
    nameAndExtension = line.split('.') #split file into filename and file extension
    name = nameAndExtension[0] 
    extension = nameAndExtension[1].replace('\n','') #save file extension as variable extension and remove \n
    elements = name.split('_') #split filename into constituent elements. Filenames are formatted as PARENTSKU_CHILDSKU_LANG_ANGLE.extension, eg '3006419_3006420_ENG_FRONT.jpg'
    parentSKU = elements[0]
    childSKU = elements[1]
    lang = elements[2]
    angle = elements[3]

    output.write(";E" + parentSKU + "_" + childSKU + "_" + angle + '_Image_Container;\n') 
来自csv导入读取器的

导入系统
如果len(sys.argv)!=2:
打印('USAGE ERROR:\nRun like“python”')#如果代码没有使用正确数量的参数运行,则显示错误消息
退出()
file=open(sys.argv[1])#打开输入文件
output=open('output.impex','w+')#定义输出impex文件
对于文件中的行:
nameAndExtension=line.split('.')#将文件分为文件名和文件扩展名
名称=名称和扩展[0]
扩展名=名称扩展名[1]。替换('\n','')#将文件扩展名另存为变量扩展名并删除\n
elements=name.split(“”“)#将文件名拆分为组成元素。文件名的格式为PARENTSKU\u CHILDSKU\u LANG\u ANGLE.extension,例如“3006419\u 3006420\u ENG\u FRONT.jpg”
parentSKU=元素[0]
childSKU=元素[1]
lang=元素[2]
角度=元素[3]
output.write(“;E”+parentSKU+“\u”+childSKU+“\u”+angle+”\u Image\u Container;\n')
非工作代码:

from csv import reader
import sys

if len(sys.argv) != 2:
    print('USAGE ERROR:\nRun like "python <script.py> <input file.csv>"') #error message if code is not run with correct number of arguments
    exit()

file = open(sys.argv[1]) #open input file
output = open('output.impex','w+') #define output impex file

def lineSplitting(x):
    nameAndExtension = x.split('.') #split file into filename and file extension
    name = nameAndExtension[0] 
    extension = nameAndExtension[1].replace('\n','') #save file extension as variable extension and remove \n
    elements = name.split('_') #split filename into constituent elements. Filenames are formatted as PARENTSKU_CHILDSKU_LANG_ANGLE.extension, eg '3006419_3006420_ENG_FRONT.jpg'
    parentSKU = elements[0]
    childSKU = elements[1]
    lang = elements[2]
    angle = elements[3]

for line in file:
    lineSplitting(line)
    output.write(";E" + parentSKU + "_" + childSKU + "_" + angle + '_Image_Container;\n') 
来自csv导入读取器的

导入系统
如果len(sys.argv)!=2:
打印('USAGE ERROR:\nRun like“python”')#如果代码没有使用正确数量的参数运行,则显示错误消息
退出()
file=open(sys.argv[1])#打开输入文件
output=open('output.impex','w+')#定义输出impex文件
def管路拆分(x):
nameAndExtension=x.split('.')#将文件分为文件名和文件扩展名
名称=名称和扩展[0]
扩展名=名称扩展名[1]。替换('\n','')#将文件扩展名另存为变量扩展名并删除\n
elements=name.split(“”“)#将文件名拆分为组成元素。文件名的格式为PARENTSKU\u CHILDSKU\u LANG\u ANGLE.extension,例如“3006419\u 3006420\u ENG\u FRONT.jpg”
parentSKU=元素[0]
childSKU=元素[1]
lang=元素[2]
角度=元素[3]
对于文件中的行:
行拆分(行)
output.write(“;E”+parentSKU+“\u”+childSKU+“\u”+angle+”\u Image\u Container;\n')

我得到了“NameError:name'parentSKU'未定义”,我认为这是因为变量作用域的原因——但我不知道需要做什么才能使变量在for循环中可重用。我需要做什么才能将所有的拆分和变量定义变成一个函数?

您应该从函数返回您的值

def lineSplitting(x):
    nameAndExtension = x.split('.') #split file into filename and file extension
    name = nameAndExtension[0] 
    extension = nameAndExtension[1].replace('\n','') #save file extension as variable extension and remove \n
    elements = name.split('_') #split filename into constituent elements. Filenames are formatted as PARENTSKU_CHILDSKU_LANG_ANGLE.extension, eg '3006419_3006420_ENG_FRONT.jpg'
    parentSKU = elements[0]
    childSKU = elements[1]
    lang = elements[2]
    angle = elements[3]

    return parentSKU,childSKU,angle 

for line in file:
    parentSKU,childSKU,angle =lineSplitting(line)
    output.write(";E" + parentSKU + "_" + childSKU + "_" + angle + '_Image_Container;\n') 
下一个代码将调用该函数

def lineSplitting(x):
    nameAndExtension = x.split('.') #split file into filename and file extension
    name = nameAndExtension[0] 
    extension = nameAndExtension[1].replace('\n','') #save file extension as variable extension and remove \n
    elements = name.split('_') #split filename into constituent elements. Filenames are formatted as PARENTSKU_CHILDSKU_LANG_ANGLE.extension, eg '3006419_3006420_ENG_FRONT.jpg'
    parentSKU = elements[0]
    childSKU = elements[1]
    lang = elements[2]
    angle = elements[3]

    return parentSKU,childSKU,angle 

for line in file:
    parentSKU,childSKU,angle =lineSplitting(line)
    output.write(";E" + parentSKU + "_" + childSKU + "_" + angle + '_Image_Container;\n') 

你不能从我看到的函数中返回任何东西!第二部分叫什么?在这里你把变量设置为函数的输出值?那就行了!是否有一个名称用于设置等于函数输出的变量?您必须返回函数中的值,这些值将在函数外部使用,所有这些都是函数内部的局部变量。