2016-06-13 6 views
3

djangoのアップロードされたcsvファイルの最初の列をリストに変換しようとすると問題が発生します。アップロードされたcsvファイルをDjangoのリストに変換する

with open("export.csv") as f: 
    my_list = [row["BASE_NAME"] for row in DictReader(f)] 

しかしdjangoを使用してユーザー・インタフェースを開発する際、私は上記のような必要なmy_listを持っていないよ、私は間違って何をやっている:もともと、私のコードは、ジャンゴを使用せずに、このようなものでしたか?

from django.db import models 
from django.forms import ModelForm 

class Upload(models.Model): 
    pic = models.FileField("pic", upload_to="images/") 
    upload_date=models.DateTimeField(auto_now_add =True) 

# FileUpload form class. 
class UploadForm(ModelForm): 
    class Meta: 
     model = Upload 
    fields = '__all__' 

は私が助けに感謝:ここに私のmodel.pyここに私の view.py:

def handle_csv_data(csv_file): 

    logging.warning('Watch out!') # will print a message to the console 
    #print(csv_file) 
    # with open(csv_file) as f: 
    # my_list = [row["BASE_NAME"] for row in DictReader(f)] 
    users = [] 
    for row in csv_file: 
     users.append(row) 

    return (users) 

def home(request): 
    if request.method=="POST": 
     img = UploadForm(request.POST, request.FILES) 
     if img.is_valid(): 
      logging.warning('Watch out!') # will print a message to the console 
      # paramFile = request.FILES['pic'] 
      paramFile =TextIOWrapper(request.FILES['pic'].file).read() 
      portfolio1 = csv.DictReader(paramFile) 

      # portfolio = csv.DictReader(request.FILES['pic'].file) 
      # csv_file = request.FILES['pic'].file 
      # with open(default_storage.path('images/' + "500 clusters.csv"), 'wb+') as destination: 
      #  for chunk in csv_file.chunks(): 
      #   destination.write(chunk) 
      # ifile = open("500 clusters.csv", "r") 
      # data = [row for row in DictReader(csv_file.read().splitlines())] 
      # print(users) 
      # paramFile = csv_file.read() 
      # portfolio1 = csv.DictReader(paramFile) 
      #ifile = open('sample.csv', "r") 
      #read = csv.reader(ifile) 
      #for row in read: 
      # print(row) 
      #data = [row for row in DictReader(csv_file.read().splitlines())] 
      # for row in portfolio: 
      # my_list = [row["BASE_NAME"]] 

      #print(my_list) 
      portfolio= handle_csv_data(portfolio1) 
      print(portfolio) 
      # my_list = portfolio 

      # return HttpResponseRedirect(reverse('portfolio')) 
      return render(request, 'home.html', {'portfolio': portfolio}) 
    else: 
     img=UploadForm() 
    images=Upload.objects.all() 
    return render(request,'home.html',{'form':img,'images':images}) 

されている

:私はあなたがコメントしたコードで見ることができる多くの方法を試してみました。

答えて

0
paramFile =io.TextIOWrapper(request.FILES['pic'].file) 
    portfolio1 = csv.DictReader(paramFile) 
    print(type(paramFile)) 
    users = [] 
    users = [row["BASE_NAME"] for row in portfolio1] 
    print(len(users)) 

どういうわけか、ローカルホストページのローカル変数を調べることで、これを修正できました。

3
paramFile =TextIOWrapper(request.FILES['pic'].file).read() 
portfolio1 = csv.DictReader(paramFile) 

DictReader、各文字列が行を表す文字列の反復可能(通常のファイルオブジェクト)を、期待します。 .read()を呼び出したので、paramFileは文字列です。これは文字列の繰り返し可能ですが、それぞれの文字列は文字であり、行ではありません。 .read()を削除します。

関連する問題