DjangoでCSVのファイルをアップロードして、文字コードをチェックボックスで指定してアップロードして、変換してDLさせたい
理解しました。以下は、CSV ファイルをアップロードし、文字コードを指定して変換し、ダウンロードさせるための Django プロジェクト内の簡単なサンプルです。このサンプルでは、pandas と chardet ライブラリを使用しています。
charset_converterアプリケーション内のviews.pyファイルに以下のようなビューを作成します。
python
# charset_converter/views.py
from django.shortcuts import render
from django.http import HttpResponse
from django.core.files.storage import FileSystemStorage
import pandas as pd
import chardet
def convert_csv(request):
if request.method == 'POST' and request.FILES['file']:
uploaded_file = request.FILES['file']
selected_encoding = request.POST.get('selected_encoding', 'utf-8')
try:
# アップロードされた CSV ファイルを一時的な場所に保存
fs = FileSystemStorage()
filename = fs.save(uploaded_file.name, uploaded_file)
file_path = fs.url(filename)
# ファイルの文字コードを判定
result = chardet.detect(uploaded_file.read(10000))
detected_encoding = result['encoding']
confidence = result['confidence']
print(f"Detected encoding: {detected_encoding}, Confidence: {confidence}")
# ファイルを再度開いてから読み込み
with fs.open(filename, 'rb') as f:
df = pd.read_csv(f, encoding=detected_encoding)
# 指定されたエンコーディングに変換
converted_csv = df.to_csv(encoding=selected_encoding, index=False)
# ダウンロード用のレスポンスを作成
response = HttpResponse(converted_csv, content_type='text/csv')
response['Content-Disposition'] = f'attachment; filename="{uploaded_file.name}_converted.csv"'
return response
except Exception as e:
return render(request, 'charset_converter/result.html', {'error_message': str(e)})
return render(request, 'charset_converter/convert_csv.html')
charset_converterフォルダ内にtemplatesフォルダを作成し、その中にconvert_csv.htmlとresult.htmlテンプレートを作成します。
html
<!-- charset_converter/templates/charset_converter/convert_csv.html -->
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>CSV Converter</title>
</head>
<body>
<h2>CSV Converter</h2>
<form method="post" action="{% url 'convert_csv' %}" enctype="multipart/form-data">
{% csrf_token %}
<label for="file">Upload CSV File:</label>
<input type="file" name="file" accept=".csv" required><br>
<label for="selected_encoding">Select Target Encoding:</label>
<select name="selected_encoding">
<option value="utf-8">UTF-8</option>
<option value="shift-jis">Shift_JIS</option>
<!-- 追加のエンコーディングが必要な場合はここに追加 -->
</select><br>
<input type="submit" value="Convert and Download">
</form>
</body>
</html>
html
<!-- charset_converter/templates/charset_converter/result.html -->
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Conversion Result</title>
</head>
<body>
<h2>Conversion Result</h2>
{% if error_message %}
<p>Error: {{ error_message }}</p>
{% endif %}
</body>
</html>
urls.pyファイルを以下のように変更します。
python
# charset_converter/urls.py
from django.urls import path
from .views import convert_csv
urlpatterns = [
path('convert_csv/', convert_csv, name='convert_csv'),
]
- プロジェクトの
urls.pyファイルも変更します。
python
# your_project/urls.py
from django.contrib import admin
from django.urls import path, include
urlpatterns = [
path('admin/', admin.site.urls),
path('charset_converter/', include('charset_converter.urls')),
]
これで、http://127.0.0.1:8000/charset_converter/convert_csv/ にアクセスすると、CSV ファイルをアップロードし、変換してダウンロードできるフォームが表示されます。

ディスカッション
コメント一覧
まだ、コメントがありません