TypeError:参数1必须有"写"方法 - 从dict创建csv

时间:2017-02-28 13:04:32

标签: python python-3.x csv

我试图从字典创建一个csv,但我收到错误:

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

代码:

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

1 个答案:

答案 0 :(得分:3)

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

with open('userInfo.csv', 'wb') as userInfoCsv:
    writer = csv.writer(userInfoCsv)
  1. 你不应该拥有'。'您的变量名称中的符号,因此您的变量应为userInfoCsvuser_info_csv

  2. userInfo = open('userInfo.csv', 'wb')为什么要使用此行?您稍后使用with open('userInfo.csv', 'wb')

  3. 打开文件
  4. 您可以看到方法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)
    
  5. <强>更新 包含评论更新的完整功能代码

    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)