首页 > 解决方案 > 在 Python 中使用另一个类的函数和数据

问题描述

我是 Python 新手,这听起来很基础,但我有 2 个文件/类,task1.py 和 task2.py。我想在 task2.py 上访问 task1.py 函数和数据。换句话说,无论 task1.py 打印出什么,我都想使用该输出并使用它,在这种情况下,我正在使用该输出将其导出到 CSV 文件。

这就是我的 task1.py 的样子:

def matchCountry():
    userName = raw_input("Enter user's name: ")
    with open('listOfUsers.json') as f:
        data = json.load(f)


    def getId(name):
        for userId, v in data.items():
            if v['Name'][0].lower() == name:
                return userId;
    id = getId(userName)
    for k, v in data.items():
        if any(x in data[id]['Country'] for x in v['Country']):
            if v['Name'][0].lower() != userName.lower():
                result = (v['Name'][0] + " : " + ", ".join(v['Country']))
                print result

这就是我的 task2.py 的样子:

def exportCSV():
    with open('output.csv', 'w') as csvfile:
        csvwriter = csv.writer(csvfile, f, lineterminator='\n')
        csvwriter.writerow(["Name", "Country"])

        for k, v in data.items():
            if any(x in data[id]['Country'] for x in v['Country']):
                if v['Name'][0].lower() != userName.lower():
                    csvwriter.writerow([v['Name'][0], ", ".join(v['Country'])])

我的 JSON 文件供参考:

{  
   "user1":{  
      "Country":[  
         "China",
         "USA",
         "Nepal"
      ],
      "Name":[  
         "Lisbon"
      ]
   },
   "user2":{  
      "Country":[  
         "Sweden",
         "China",
         "USA"
      ],
      "Name":[  
         "Jade"
      ]
   },
   "user3":{  
      "Country":[  
         "India",
         "China",
         "USA"
      ],
      "Name":[  
         "John"
      ]
   }
}

标签: pythonjsonpython-2.7

解决方案


首先,您指的是其他函数中不起作用的函数变量,例如数据和用户名。

如果您想使用另一个 python 文件中的函数/类,您可以导入它并调用它以获取有关导入的更多信息,请参见此线程,另请参见以下示例:

任务1.py

from task2 import exportCSV
userName = raw_input("Enter user's name: ")

def matchCountry():
    with open('listOfUsers.json') as f:
        data = json.load(f)
        return data


def getId(name):
    for userId, v in data.items():
        if v['Name'][0].lower() == name:
            return userId;
data = matchCountry()
id = getId(userName)
for k, v in data.items():
    if any(x in data[id]['Country'] for x in v['Country']):
        if v['Name'][0].lower() != userName.lower():
            result = (v['Name'][0] + " : " + ", ".join(v['Country']))
            print result

exportCSV(data, id, userName)

任务2.py:

def exportCSV(data, id, userName):
    with open('output.csv', 'w') as csvfile:
        csvwriter = csv.writer(csvfile, f, lineterminator='\n')
        csvwriter.writerow(["Name", "Country"])

        for k, v in data.items():
            if any(x in data[id]['Country'] for x in v['Country']):
                if v['Name'][0].lower() != userName.lower():
                    csvwriter.writerow([v['Name'][0], ", ".join(v['Country'])])

推荐阅读