TypeError: 参数 1 必须有一个“write”方法——从 dict 创建 csv

Eri*_*ric 0 python csv python-3.x

我正在尝试从 dict 创建 csv,但收到错误:

in create_csv
    writer = csv.writer('userInfo.csv')
TypeError: argument 1 must have a "write" method
Run Code Online (Sandbox Code Playgroud)

代码:

#Create dict file to test
userInfoDict = {'orgID': '17', 'firstName': 'TestFirstName', 'lastName': 'TesLastName',
                'emailAddress': 'test@test.com', 'phoneNumber': '123-456-7890',
                'isoCountryCode': 'US'}

def create_csv(userInfoDict):
    import csv

    userInfo = open('userInfo.csv', 'wb')

    for key in userInfoDict:
        if len(userInfoDict['orgID']) == 0:
            print('Not a valid user: No orgID')
            return None
        elif len(userInfoDict['firstName']) == 0:
            print('Not a valid user: No First Name')
            return None
        elif len(userInfoDict['emailAddress']) == 0 or len(userInfoDict['phoneNumber']) == 0:
            print('Not a valid user: No Email or Phone')
            return None
        else:
            writer = csv.writer(userInfo, delimiter=',')
            for key, value in userInfoDict.items():
                writer.writerow([key], [value])
        return

create_csv(userInfoDict)
Run Code Online (Sandbox Code Playgroud)

Ole*_*kov 5

您应该将文件而不是文件名传递给作者:

with open('userInfo.csv', 'wb') as userInfoCsv:
    writer = csv.writer(userInfoCsv)
Run Code Online (Sandbox Code Playgroud)
  1. 您不应该有“.” 变量名称中的符号,因此变量应该是userInfoCsvuser_info_csv

  2. userInfo = open('userInfo.csv', 'wb')你为什么用这条线?您稍后使用打开文件with open('userInfo.csv', 'wb')

  3. 你可以看到一个方法csv.DictWriter

    with open('userInfo.csv', 'wb') as user_info_csv:
        writer = csv.DictWriter(user_info_csv, fieldnames=['your', 'column', 'names'], delimiter=';')
        writer.writerow(userInfoDict)
    
    Run Code Online (Sandbox Code Playgroud)

使用 注释更新更新完整的函数代码

def create_csv(userInfoDict):
    import csv

    with open('userInfo.csv', 'wb') as userInfo:

        for key in userInfoDict:
            if len(userInfoDict['orgID']) == 0:
                print('Not a valid user: No orgID')
                return None
            elif len(userInfoDict['firstName']) == 0:
                print('Not a valid user: No First Name')
                return None
            elif len(userInfoDict['emailAddress']) == 0 or len(userInfoDict['phoneNumber']) == 0:
                print('Not a valid user: No Email or Phone')
                return None
            else:
                writer = csv.DictWriter(userInfo, fieldnames=userInfoDict.keys(), delimiter=';')
                # writer.writeheader()  # If you want to add header
                writer.writerow(userInfoDict)
Run Code Online (Sandbox Code Playgroud)