0

我有一个 python 脚本,它使用函数“get_users”从 REST API 收集数据,目前它只是打印到控制台。我从 GitHub 存储库中提取了它,我正在尝试对其进行修改以将该数据导出到 csv,但以前没有使用过 Python。csv 中的数据格式应包含以下列:“用户、电子邮件、电话、推送、短信”。这是代码:

import argparse
import sys
def get_users(session):
    sys.stdout.write("Listing All Users' Contact Methods:\n")
    for user in session.iter_all('users'):
        sys.stdout.write("User: ")
        sys.stdout.write(user['name'])
        sys.stdout.write("\n")
        get_contact_methods(user['id'], session)
        sys.stdout.write("-----\n")
get_users(session)

我尝试csv.writer(sys.stdout.write)在函数末尾使用但收到 TypeError: argument 1 must have a "write" 方法

任何帮助,将不胜感激。

4

1 回答 1

0

我认为您来自 Java,这就是您尝试通过sys.stdout.write. 在 python 中,您可以使用该print函数将某些内容打印到控制台,它自然会在其上附加一个换行符。所以,它会是这样的:

def get_users(session):
    print("Listing All Users' Contact Methods:")
    for user in session.iter_all('users'):
        print("User: ")
        print(user['name'])
        print(user['id'], session)
        print("-----")
get_users(session)

现在sys.stdout.write,正如您所见,这是一个将字符串打印到标准输出的函数。类似csv.writer地是一个将文件作为输入而不是函数的函数。

所以你的新代码将是:

#open file
file = open('rest.csv', 'w+', newline='')
#Notice how we pass the file as the argument
writer = csv.writer(file)
for user in session.iter_all('users'):
    #First row which contains the headers
    writer.writerow(["User","Email","Phone","Push","SMS"])
    #Now write all the data
    #I'm assuming the rest api returned a list of dictionary (json objects) in session
    writer.writerow([user['name'],user['email'],user['phone'],user['push'],user['sms'])
file.close()
于 2021-05-11T17:29:44.760 回答