2015-06-02 28 views
1

我試圖將csvfile的內容複製到csvfile2。我不能看到這個subject.and我也想一個值value追加到csvfile2 .Eg的第一行的幫助:value = 1 輸出應該像在兩個csv文件之間複製內容django

`1_dog 1_cat 1_frog ` 

value=2結果應該是

​​

1和csv文件線的總無之間的值的範圍(totalrows

我的試驗代碼:

def csvupload(request, template_name='upload_csv.html'): 

if request.method == 'POST': 
    form = CSVUploadForm(request.POST, request.FILES) 
    if form.is_valid(): 
     error_list = set() 
     value = 1 
     csvfile = request.FILES['file'] 
     file_name = csvfile.name 
     file_name = unicodedata.normalize('NFKD', file_name).encode('ascii','ignore') 
     csvfile2 = settings.MEDIA_ROOT + '/new/sample.csv' 
     writer = csv.writer(outfile, dialect='excel') 
     csvfile.open() 
     line_entries = csv.DictReader(csvfile, dialect='excel') 
     try: 
      csvfile.read() 
      line_entries = csv.DictReader(csvfile, dialect='excel', delimiter=',') 
      rows1 = list(csvfile) 
      totalrows = len(rows1) 
      success = True 
     except: 
      messages.error(request, "Could not parse file, invalid format") 
      success = False 
      return redirect('home') 


     if success: 
      messages.success(request, "File read..") 
     else: 
      for err in error_list: 
       messages.error(request, err) 
    else: 
     messages.error(request, "No file selected") 
else: 
    form = CSVUploadForm() 
context = { 
    'form': form 
} 
return render_to_response(template_name, context, context_instance=RequestContext(request)) 

此代碼不完整。我是一個新的python和confused.Can有人可以幫助嗎?

+1

'1_dog 1_cat 1_frog'並不顯得CSV。你能告訴我們幾行嗎? – Wtower

+0

我的意思是,如果csv文件上的數據就像是狗,貓,青蛙......那麼新的csv文件應該顯示如1_dog – Aamy

+0

的值看起來像你有如何打開文件以及如何使用'csv '模塊。首先讓你的代碼在django之外工作,然後你可能有機會在django裏面工作...... –

回答

0

我沒有python解釋器,所以我無法測試。以後我可以提供更完整的答案。

你需要這樣的事 -

要閱讀 -

>>> import csv 
>>> with open('names.csv') as csvfile: 
...  reader = csv.DictReader(csvfile) 
...  for row in reader: 
...   print(row['first_name'], row['last_name']) 

撰寫 -

import csv 

with open('names.csv', 'w') as csvfile: 
    fieldnames = ['first_name', 'last_name'] 
    writer = csv.DictWriter(csvfile, fieldnames=fieldnames) 

    writer.writeheader() 
    writer.writerow({'first_name': 'Baked', 'last_name': 'Beans'}) 
    writer.writerow({'first_name': 'Lovely', 'last_name': 'Spam'}) 
    writer.writerow({'first_name': 'Wonderful', 'last_name': 'Spam'}) 

因此,首先,將文件保存在一個臨時位置在服務器 -

def handle_uploaded_file(f): # method to save to a temporary location 
    with open('some/file/name.csv', 'wb+') as destination: 
     for chunk in f.chunks(): 
      destination.write(chunk) 

T如文檔中提到的那樣,母雞加載並逐行閱讀。 https://docs.python.org/2/library/csv.html#csv.DictReader

所以,你的代碼可能是這樣的 -

def csvupload(request, template_name='upload_csv.html'): 

if request.method == 'POST': 
    form = CSVUploadForm(request.POST, request.FILES) 
    if form.is_valid(): 
     error_list = set() 
     value = 1 
     handle_uploaded_file(request.FILES['file']) # save the file 

     file_name = csvfile.name 
     file_name = unicodedata.normalize('NFKD', file_name).encode('ascii','ignore') 
     csvfile2 = settings.MEDIA_ROOT + '/new/sample.csv' 
     writer = csv.writer(outfile) 
     row_number = 0 
     try: 
      with open(csvfile2, 'w') as writtenFile: 
       fieldnames = ... # use some code to determine the column names dynamically, may be read the first row and then populate the field names 
       writer = csv.DictWriter(writtenFile, fieldnames=fieldnames) 
        writer.writerow({...}) # write header row 
       with open('some/file/name.csv') as csvfile: 
        line_entries = csv.DictReader(csvfile) 
        for row in line_entries: 
         row_number = row_number + 1 
         valueDict = [...] # populate the rows as a dict 
         writer.writerow(valueDict); 
      success = True 
     except: 
      messages.error(request, "Could load file, invalid format") 
      success = False 
      return redirect('home') 


     if success: 
      messages.success(request, "File read..") 
     else: 
      for err in error_list: 
       messages.error(request, err) 
    else: 
     messages.error(request, "No file selected") 
else: 
    form = CSVUploadForm() 
context = { 
    'form': form 
} 
return render_to_response(template_name, context, context_instance=RequestContext(request)) 
相關問題