Ошибка определения имени при определении переменных в функции - PullRequest
0 голосов
/ 31 января 2020

У меня есть немного кода, который принимает .csv со списком имен файлов в качестве входных данных, затем разбивает имя файла на его составные части и переупорядочивает их вместе с некоторыми дополнительными символами.

Ввод Пример:

3006419_3006420_ENG_FRONT.jpg

Пример вывода:

;E3006419_3006420_FRONT_Image_Container;

Однако я хотел бы сделать часть для l oop, которая разбивает имя файла на функцию, которую я Можно вызвать в другом месте, так что я могу повторно использовать его в секунду для l oop, который выводит в другом формате. Тем не менее, когда я пытаюсь определить функцию, мне кажется, что у меня ошибка определения области видимости с моими переменными, и я не могу использовать их в своем выражении 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') 

нерабочий код:

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') 

Я получаю «NameError: имя« parentSKU »не определено» I думаю из-за область видимости переменной - но я не знаю, что мне нужно сделать, чтобы переменную можно было повторно использовать в for-l oop. Что мне нужно сделать, чтобы все это разбиение и определение переменной превратились в функцию?

1 Ответ

0 голосов
/ 31 января 2020

вы должны вернуть значение из функции

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') 
...