首页 > 解决方案 > 使用 CSV 和多输出进行代码更正

问题描述

我有以下代码。它像我想要的那样完美地工作,但我有一些问题。1. CSV 文件没有被写入 2. 我得到一个对象的多次保存,而不是我想要的一个。(主要问题) 3. 如何将生成的模板作为电子邮件发送。

函数 LCR 的基本思想是这样的。

我在数据库中有一些城市或国家代码。我想将代码与用户上传的文件中的值进行比较。比较值后,我想看到以下结果 '1':[("PTCL","0.25"),("TATA","1.25")] 。. . 其中“1”是从用户文件“PTCL,TATA”获取的值,是用户,“0.25 & 1.25”是为该值提供的用户费率。

但我得到了这个

    {'25': ['Tata', ' 4.150', 'Tata', ' 4.150', 'Tata', ' 4.150', 'Tata', ' 4.150', 'Tata', ' 4.150', 'Tata', ' 4.150', 'PTCL', ' 0.888', 'PTCL', ' 0.888', 'PTCL', ' 0.888',
    'PTCL', ' 0.888', 'PTCL', ' 0.888', 'PTCL', ' 0.888'], 
    '21': ['Tata', ' 4.150', 'Tata', ' 4.150', 'Tata', ' 4.150', 'Tata', ' 4.150', 'Tata', ' 4.150', 'Tata', ' 4.150',
    'PTCL', ' 0.888', 'PTCL', ' 0.888', 'PTCL', ' 0.888', 'PTCL', ' 0.888', 'PTCL', ' 0.888', 'PTCL', ' 0.888'], 
    '48': ['Tata', ' 0.531', 'Tata', ' 0.531', 'Tata', ' 0.531',
    'Tata', ' 0.531', 'Tata', ' 0.531', 'Tata', ' 0.531'],
     '23': ['Tata', ' 4.150', 'Tata', ' 4.150', 'Tata', ' 4.150', 'Tata', ' 4.150', 'Tata', ' 4.150', 'Tata', ' 4.150',
    'PTCL', ' 0.888', 'PTCL', ' 0.888', 'PTCL', ' 0.888', 'PTCL', ' 0.888', 'PTCL', ' 0.888', 'PTCL', ' 0.888'], 
    '33': ['Zong', ' 0.87', 'Zong', ' 0.87', 'Zong', ' 0.87', 'Zong', ' 0.87', 'Zong', ' 0.87', 'Zong', ' 0.87'], 
    '47': ['Tata', ' 0.531', 'Tata', ' 0.531', 'Tata', ' 0.531', 'Tata', ' 0.531', 'Tata', ' 0.531', 'Tata', ' 0.531'], 
    '44': ['Tata', ' 0.531', 'Tata', ' 0.531', 'Tata', ' 0.531', 'Tata', ' 0.531', 'Tata', ' 0.531', 'Tata', ' 0.531'], 
  '42': ['Tata', ' 0.531', 'Tata', ' 0.531', 'Tata', ' 0.531', 'Tata', ' 0.531', 'Tata', ' 0.531', 'Tata', ' 0.531'], 
  '41': ['Tata', ' 0.531', 'Tata', ' 0.531', 'Tata', ' 0.531', 'Tata', ' 0.531', 'Tata', ' 0.531', 'Tata', ' 0.531'], 
 '98': ['Tata', ' 1.260', 'Tata', ' 1.260', 'Tata', ' 0.205', 'Tata', ' 0.205', 'Tata', ' 0.030', 'Tata', ' 0.030', 'Tata', ' 0.305', 'Tata', ' 0.305', 'Tata', ' 1.260', 'Tata', ' 1.260', 'Tata', ' 0.205', 'Tata', ' 0.205', 'Tata', ' 0.030', 'Tata', ' 0.030', 'Tata', ' 0.305', 'Tata', ' 0.305', 'Tata', ' 1.260', 'Tata', ' 1.260', 'Tata', ' 0.205', 'Tata', ' 0.205', 'Tata', ' 0.030', 'Tata', ' 0.030', 'Tata', ' 0.305', 'Tata', ' 0.305', 'PTCL', ' 0.150', 'PTCL', ' 0.150', 'PTCL', ' 0.005', 'PTCL', ' 0.005', 'PTCL', ' 0.305', 'PTCL', ' 0.305', 'PTCL', ' 0.150', 'PTCL', ' 0.150', 'PTCL', ' 0.005', 'PTCL', ' 0.005', 'PTCL', ' 0.305', 'PTCL', ' 0.305', 'PTCL', ' 0.150', 'PTCL', ' 0.150', 'PTCL', ' 0.005', 'PTCL', ' 0.005', 'PTCL', ' 0.305', 'PTCL', ' 0.305', 'Zong', '0.044', 'Zong', '0.044', 'Zong', ' 5.395', 'Zong', ' 5.395', 'Zong', '0.044', 'Zong', '0.044', 'Zong', ' 5.395', 'Zong', ' 5.395', 'Zong', '0.044', 'Zong', '0.044', 'Zong', ' 5.395', 'Zong', ' 5.395'], 
 '451': ['Tata', ' 0.531', 'Tata', ' 0.531', 'Tata', ' 0.531', 'Tata', ' 0.531', 'Tata', ' 0.531', 'Tata', ' 0.531'], 
'91': ['Tata', ' 1.260', 'Tata', ' 1.260', 'Tata', ' 0.205', 'Tata', ' 0.205', 'Tata', ' 0.030', 'Tata', ' 0.030', 'Tata', ' 0.305', 'Tata', ' 0.305', 'Tata', ' 1.260', 'Tata', ' 1.260', 'Tata', ' 0.205', 'Tata', ' 0.205', 'Tata', ' 0.030', 'Tata', ' 0.030', 'Tata', ' 0.305', 'Tata', ' 0.305', 'Tata', ' 1.260', 'Tata', ' 1.260', 'Tata', ' 0.205', 'Tata', ' 0.205', 'Tata', ' 0.030', 'Tata', ' 0.030', 'Tata', ' 0.305', 'Tata', ' 0.305', 'PTCL', ' 0.150', 'PTCL', ' 0.150', 'PTCL', ' 0.005', 'PTCL', ' 0.005', 'PTCL', ' 0.305', 'PTCL', ' 0.305', 'PTCL', ' 0.150', 'PTCL', ' 0.150', 'PTCL', ' 0.005', 'PTCL', ' 0.005', 'PTCL', ' 0.305', 'PTCL', ' 0.305', 'PTCL', ' 0.150', 'PTCL', ' 0.150', 'PTCL', ' 0.005', 'PTCL', ' 0.005', 'PTCL', ' 0.305', 'PTCL', ' 0.305', 'Zong', '0.044', 'Zong', '0.044', 'Zong', ' 5.395', 'Zong', ' 5.395', 'Zong', '0.044', 'Zong', '0.044', 'Zong', ' 5.395', 'Zong', ' 5.395', 'Zong', '0.044', 'Zong', '0.044', 'Zong', ' 5.395', 'Zong', ' 5.395'], 
 '93': ['Tata', ' 1.260', 'Tata', ' 1.260', 'Tata', ' 0.205', 'Tata', ' 0.205', 'Tata', ' 0.030', 'Tata', ' 0.030', 'Tata', ' 0.305', 'Tata', ' 0.305', 'Tata', ' 1.260', 'Tata', ' 1.260', 'Tata', ' 0.205', 'Tata', ' 0.205', 'Tata', ' 0.030', 'Tata', ' 0.030', 'Tata', ' 0.305', 'Tata', ' 0.305', 'Tata', ' 1.260', 'Tata', ' 1.260', 'Tata', ' 0.205', 'Tata', ' 0.205', 'Tata', ' 0.030', 'Tata', ' 0.030', 'Tata', ' 0.305', 'Tata', ' 0.305', 'PTCL', ' 0.150', 'PTCL', ' 0.150', 'PTCL', ' 0.005', 'PTCL', ' 0.005', 'PTCL', ' 0.305', 'PTCL', ' 0.305', 'PTCL', ' 0.150', 'PTCL', ' 0.150', 'PTCL', ' 0.005', 'PTCL', ' 0.005', 'PTCL', ' 0.305', 'PTCL', ' 0.305', 'PTCL', ' 0.150', 'PTCL', ' 0.150', 'PTCL', ' 0.005', 'PTCL', ' 0.005', 'PTCL', ' 0.305', 'PTCL', ' 0.305', 'Zong', '0.044', 'Zong', '0.044', 'Zong', ' 5.395', 'Zong', ' 5.395', 'Zong', '0.044', 'Zong', '0.044', 'Zong', ' 5.395', 'Zong', ' 5.395', 'Zong', '0.044', 'Zong', '0.044', 'Zong', ' 5.395', 'Zong', ' 5.395'], 
'96': ['Tata', ' 1.260', 'Tata', ' 1.260', 'Tata', ' 0.205', 'Tata', ' 0.205', 'Tata', ' 0.030', 'Tata', ' 0.030', 'Tata', ' 0.305', 'Tata', ' 0.305', 'Tata', ' 1.260', 'Tata', ' 1.260', 'Tata', ' 0.205', 'Tata', ' 0.205', 'Tata', ' 0.030', 'Tata', ' 0.030', 'Tata', ' 0.305', 'Tata', ' 0.305', 'Tata', ' 1.260', 'Tata', ' 1.260', 'Tata', ' 0.205', 'Tata', ' 0.205', 'Tata', ' 0.030', 'Tata', ' 0.030', 'Tata', ' 0.305', 'Tata', ' 0.305', 'PTCL', ' 0.150', 'PTCL', ' 0.150', 'PTCL', ' 0.005', 'PTCL', ' 0.005', 'PTCL', ' 0.305', 'PTCL', ' 0.305', 'PTCL', ' 0.150', 'PTCL', ' 0.150', 'PTCL', ' 0.005', 'PTCL', ' 0.005', 'PTCL', ' 0.305', 'PTCL', ' 0.305', 'PTCL', ' 0.150', 'PTCL', ' 0.150', 'PTCL', ' 0.005', 'PTCL', ' 0.005', 'PTCL', ' 0.305', 'PTCL', ' 0.305', 'Zong', '0.044', 'Zong', '0.044', 'Zong', ' 5.395', 'Zong', ' 5.395', 'Zong', '0.044', 'Zong', '0.044', 'Zong', ' 5.395', 'Zong', ' 5.395', 'Zong', '0.044', 'Zong', '0.044', 'Zong', ' 5.395', 'Zong', ' 5.395']}

我想在结果中看到每个用户一次,但我不确定为什么他们会多次显示。也许这是一个循环问题或其他什么。

第二个问题是我的 CSV 文件没有被写入,但这不是主要问题。请检查代码,看看是否有错误。

def LCR(request):
    template = "LCR\LCRGen.html"

    emailadd = Email.objects.all()
    dest = Destination.objects.values_list('dest_num', flat=True)

    ratelist = {}
    csv_file   =  { }
    data_set   =  { }
    io_string  =  { }


    vendor = RateFile.objects.values_list()
    v_count = vendor.count()

    for v_id, v_name, v_file in vendor:
        vendor_name = str(v_name)
#converted into a string so that i may be used to reference for file creation with the vendor name. like this (csv_fileTata)
        vendornames = str(v_name)
#converted into a string to use as an empty dict var name
        vendornames = { }

        for desNum in dest:
            desNum = str(desNum)


            for countvar in range(v_count):

                csv_file[vendor_name] = RateFile.objects.get(id=v_id).ven_file

                data_set[vendor_name] = csv_file[vendor_name].read().decode("UTF-8")

                io_string[vendor_name] = io.StringIO(data_set[vendor_name])
                next(io_string[vendor_name])


                for column in csv.reader(io_string[vendor_name], delimiter=str(u",")):

    #creates a dictionary with the name of the vendor,the number as key and rate as value

                    vendornames[column[0]] = column[1]



                # csvfile.close()


                for venNum, venValue in vendornames.items():



                    venlen = len(venNum)
                    deslen = len(desNum)



                    # csvfile = open('csvfile.csv','w')
                    if venlen >= deslen:


                        if desNum[:-1]==venNum[:-1] and desNum[:-2]==venNum[:-2] and desNum[:-3] == venNum[:-3]:
                            # print ('====================')
                            # print (venNum)
                            # print (desNum)
                            # print "Works well 1"
                            # print ('====================')

                            # ratelist[desNum] = [vendor_name, venValue]
                            # ratelist[desNum].append(venValue)
                            # rates = dict((desNum, tuple(vendor_name))
                            #              for desNum, vendor_name in ratelist.items())

                            # thewriter.writerow
                            # ({'Destinations':[desNum], 'Vendors':[vendor_name], 'Rates':[venValue] })

                            ratelist.setdefault(
                                desNum, []).append(vendor_name)
                            ratelist.setdefault(
                                desNum, []).append(venValue)
                            if vendor_name and venValue in desNum:
                                print 'stuff'
                            else:
                                ratelist.setdefault(
                                    desNum, []).append(vendor_name)
                            ratelist.setdefault(
                                desNum, []).append(venValue)




                        elif desNum[:-1] == venNum[:-2] and desNum[:-2] == venNum[:-3] and desNum[:-3] == venNum[:-4]:


                                    # print ('====================')
                                    # print (venNum)
                                    # print (desNum)
                                    # print (venValue)
                            # print "Works well 2"
                            # print ('====================')
                            # ratelist[desNum].append(vendor_name)
                            # rates = dict((desNum, tuple(venValue)) for desNum, vendor_name in ratelist.iteritems())


                            # thewriter.writerow({'Destinations':[desNum], 'Vendors':[vendor_name], 'Rates':[venValue]})




                            ratelist.setdefault(
                                desNum, []).append(vendor_name)
                            ratelist.setdefault(
                                desNum, []).append(venValue)
                            if vendor_name and venValue in desNum:
                                print 'stuff'
                            else:
                                ratelist.setdefault(
                                    desNum, []).append(vendor_name)
                            ratelist.setdefault(
                                desNum, []).append(venValue)


                        elif desNum[:-1] == desNum[:-3] and desNum[:-2] == venNum[:-4] and desNum[:-3] == venNum[:-5]:
                            # ratelist[desNum].append(vendor_name)
                            # rates = dict((desNum, tuple(venValue)) for desNum, vendor_name in ratelist.iteritems())
                            # thewriter.writerow
                            # ({'Destinations':[desNum], 'Vendors':[vendor_name], 'Rates':[venValue] })
                            ratelist.setdefault(
                                desNum, []).append(vendor_name)
                            ratelist.setdefault(
                                desNum, []).append(venValue)
                            if vendor_name and venValue in desNum:
                                print "STUFF"
                            else:
                                ratelist.setdefault(
                                    desNum, []).append(vendor_name)
                            ratelist.setdefault(
                                desNum, []).append(venValue)

                                    # print ('====================')
                                    # print (venNum)
                                    # print (desNum)
                                    # print (venValue)
                            # print "Works well3"
                            # print ('====================')

                        elif desNum[:-1] == venNum[:-4] and desNum[:-2] == venNum[:-5]:

                            # ratelist[desNum].append(vendor_name)
                            # rates = dict((desNum, tuple(venValue)) for desNum, vendor_name in ratelist.iteritems())
                            # thewriter.writerow
                            # ({'Destinations':[desNum], 'Vendors':[vendor_name], 'Rates':[venValue] })
                            ratelist.setdefault(
                                desNum, []).append(vendor_name)
                            ratelist.setdefault(
                                desNum, []).append(venValue)
                            if vendor_name and venValue in desNum:
                                print "FOUND"
                            else:
                                ratelist.setdefault(
                                    desNum, []).append(vendor_name)
                            ratelist.setdefault(
                                desNum, []).append(venValue)



                        elif desNum[:-1] == venNum[:-5] and desNum[:-2] == venNum[:-6]:

                            # ratelist[desNum].append(vendor_name)
                            # rates = dict((desNum, tuple(venValue))
                            #              for desNum, vendor_name in ratelist.iteritems())

                            # print rates
                            # thewriter.writerow
                            # ({'Destinations':[desNum], 'Vendors':[vendor_name], 'Rates':[venValue] })
                            ratelist.setdefault(
                                desNum, []).append(vendor_name)
                            ratelist.setdefault(
                                desNum, []).append(venValue)
                            if vendor_name and venValue in desNum:
                                print 'STUFF'
                            else:
                                ratelist.setdefault(
                                    desNum, []).append(vendor_name)
                            ratelist.setdefault(
                                desNum, []).append(venValue)




                        else:
                            # thewriter.writerow({'Destinations': [desNum], 'Vendors': [
                            #                    vendor_name], 'Rates': [venValue]})
                            print "HELLO WORLD"

                # thewriter.writerow(
                #     {'Destinations':desNum, 'Vendors':vendor_name, 'Rates':venValue})
                    # csvfile.close()


                    csvfile = open('csvfile.csv','w')
                    headers = ['Destinations', 'Vendors', 'Rates']

                    thewriter = csv.DictWriter(csvfile, fieldnames=headers)
                    thewriter.writeheader()
                    thewriter.writerow({'Destinations':venNum, 'Vendors':[vendor_name], 'Rates':[venValue] })



    return render (request, template, {"ratelist": ratelist, "emailadd": emailadd } )

我希望我的结果显示类似这样的内容。

{'25':['Tata','0.25','PTCL','1.002','Zong','0.090']
'15':['Tata','1.25','PTCL','0.12','Zong','0.90']}

标签: pythondjango

解决方案


推荐阅读