2017-02-28 1593 views
0

我试图创建一个从字典一个CSV创建CSV文件,但我收到的错误:类型错误:参数1必须有一个“写”的方法 - 从字典

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': '[email protected]', '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) 

回答

3

你应该通过你的文件,但没有文件名的作家:

with open('userInfo.csv', 'wb') as userInfoCsv: 
    writer = csv.writer(userInfoCsv) 
  • 你不应该有'。'符号在你的变量的名称,所以你的变量应该是userInfoCsvuser_info_csv

  • userInfo = open('userInfo.csv', 'wb')为什么你用这条线?你打开以后使用with open('userInfo.csv', 'wb')

  • 你的文件,你可以看到一个方法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) 
    
  • UPDATE 全功能与评论

    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) 
    
    +0

    更改代码以匹配更新代码你的修复,它似乎没有任何影响。同样的错误。在create_csv writer = csv.writer('userInfocsv') TypeError:参数1必须有一个“写入”方法 – Eric

    +0

    当然,open应该发生在循环之前。因为它是每个循环将再次打开文件并覆盖以前的内容。 – Matthias

    +0

    @Matthias当然,所以没有意义使用语句 –

    相关问题