AttributeError: __getitem__ в коде Python - PullRequest
0 голосов
/ 09 апреля 2019

Я пытаюсь открыть текстовый файл с именем FilterApps.txt, содержащий в качестве новых строк «app1.ear, app2.ear, app3.ear, app4.ear», передать его в список, а затем сравнить его с другим. список. Затем, наконец, вызовите функцию deploy в методе main (), но я получаю AttributeError: getitem в строке, выделенной ниже в коде:

appNames = ['/opt/app1.ear', '/opt/app2.ear', '/opt/app3.ear', '/opt/app4.ear']

def filteredApps():
    filteredAppsList = []
    appToDeploy = open("filteredApps.txt","r")
    for deploy in appToDeploy:   #Code breaks here
        filteredAppsList.append(deploy)
    return map(str.strip, filteredAppsList)

def main():
    finalListToDeploy = []
    listToDeploy = filteredApps() #Code breaks here as well

    for paths in appNames:
        for apps in listToDeploy:
            if apps in paths:
                finalListToDeploy.append(apps)
    deployApplication(finalListToDeploy)

if __name__ == "__main__":
    main()

Ответы [ 3 ]

1 голос
/ 09 апреля 2019

Продолжая из комментариев:

filteredApps.txt:

app1
app2
app3
app4

Следовательно

appNames = ['/opt/app1.ear', '/opt/app2.ear', '/opt/app3.ear', '/opt/app4.ear']

def filteredApps():
    filteredAppsList = []
    with open("filteredApps.txt","r") as appToDeploy:
      for apptodeploy in appToDeploy:
          # print(apptodeploy)
          filteredAppsList.append(apptodeploy)
    return map(str.strip, filteredAppsList)

def main():
    finalListToDeploy = []
    listToDeploy = list(filteredApps())
    for paths in appNames:
        for apps in listToDeploy:
            if apps in paths:
                # print(paths)
                finalListToDeploy.append(paths)
    return finalListToDeploy
    # deployApplication(finalListToDeploy)

if __name__ == "__main__":
    print(main())

OUTPUT

['/opt/app1.ear', '/opt/app2.ear', '/opt/app3.ear', '/opt/app4.ear']
0 голосов
/ 09 апреля 2019

Попробуйте использовать open следующим образом:

import io
from io import open
with open('tfilteredApps.txt', 'r', encoding='utf-8') as file :    
    for deploy in file :
        filteredAppsList.append(deploy)

Но если у вас все названия приложений в одной строке, это будет так с модулем рассола:

import pickle
with open('tfilteredApps.txt', 'r', encoding='utf-8') as file :
    word = pickle.load(file)
filteredAppsList = word.split(' ')
0 голосов
/ 09 апреля 2019

Попробуйте прочитать файл перед циклом по данным

 appToDeploy = open("filteredApps.txt","r") 
 contents = appToDeploy.readlines()
 appToDeploy.close()

 for deploy in contents:     
     filteredAppsList.append(deploy)
...