PYthon Django csv関連

このQ&Aのポイント
  • Python初心者のためのDjangoを使用したCSV操作の方法について詳しく説明します。
  • ローカルにExcelの内容をデータベースにインポートして、管理者用のアプリに表示する方法について困っています。
  • Views.pyとimportcsv.htmlのコード例を示します。
回答を見る
  • ベストアンサー

PYthon Django csv関連

初めまして、 Python初心者です。 やりかたがわからなくて困っています、誰かがご教授お願い致します。 質問はローカルにExceの内容をデータベースに入れてAdmin作ったアプリに表示したいですがなかなかできなくて困っています。 コード以下です: Views.py def import_csv(request): if request.method == 'POST' and request.FILES.has_key('csv_file'): csv_file = request.FILES['csv_file'] row = [] for row in csv.reader(csv_file): row.append(row.decode('utf-8')) args = {} args.update(csrf(request)) args['row'] = User.objects.all() return render_to_response('importcsv.html',args) importcsv.html {% extends "base.html" %} {% block content %} {% if form.errors %} <p style="color: red;"> Please correct the error{{ form.errors|pluralize }} below. </p> {% endif %} <div> <form action="/import_csv/" method="POST" enctype="multipart/form-data"> {% csrf_token %} {{ form.as_table }} <input type="file" name="csvfile"> <input type="submit" value="import" id="Save"> </form> </div> {% endblock %}

質問者が選んだベストアンサー

  • ベストアンサー
  • kmee
  • ベストアンサー率55% (1857/3366)
回答No.2

Django自体は使ったことが無いので詳しくは知りませんが、これだけの間違いがあると、サーバーのログ等に残っているはずです。 まずは、エラーが出たらどうなるかを調べましょう。 もしかしたら「そもそも実行されていない」ということも含めて確認する必要があるかもしれません。 row = [] での変数row と row.append(row.decode('utf-8')) での変数rowとでは別のオブジェクトになっている、ということは理解していますか? また row.append(row.decode('utf-8')) でのrowはどんなクラスになっているか理解していますか? そのクラスには、appendやdecodeはあるのでしょうか?

hito2014
質問者

補足

ご指摘ありがとうございます! 正直私はまだ、あまりよく知りません!勉強させていただきます! どうぞ、ご教授ください!

その他の回答 (1)

  • kmee
  • ベストアンサー率55% (1857/3366)
回答No.1

こまかくは見てませんが row = [] for row in csv.reader(csv_file): row.append(row.decode('utf-8')) ここでエラーになりませんか? rowをutf-8でdecodeして、rowにappend って、あきらかに間違ってます。

hito2014
質問者

お礼

みなさん、ありがとうございました。 できました

hito2014
質問者

補足

ご指摘ありがとうございます! >>row = [] >>for row in csv.reader(csv_file): >>row.append(row.decode('utf-8')) >>ここでエラーになりませんか? >>rowをutf-8でdecodeして、rowにappend って、あきらかに>>間違ってます。 エラーにはなっていませんでした。 何もない < Noneに >なっていました。 どうしたらできるか是非ご教授お願いいたします。

関連するQ&A

  • Django Python csv エラー

    下記のようなエラーでて解決できないです。 Unicodeのエラー? 解決できるやり方がわからなくて困っています。誰かがご教授お願いいたします。 データベースに保存しょうと思ったら不正な文字列値のエラーがでてきました。 ご教授お願いいたします! エラー: (1366, "Incorrect string value: '\\x8E\\x81\\x96\\xBC\\x83J...' for column 'user_name' at row 1") 私のViews.py def import_csv(request): response = HttpResponse(mimetype='application/vnd.ms-excel; charset=UTF-8') response['Content-Disposition'] = 'attachment; filename=file.csv' reader = csv.reader(response) with open('C:\Users\hasichaolu\Desktop\mkc\Py_meshi\sample.csv', 'r+b') as f: reader = csv.reader(f) for row in reader: tmp = User.objects.create() tmp.UserID = row[0] tmp.user_name = row[1] tmp.first_kana = row[2] tmp.save()

  • php アップロードファイルが*.csv指定の問題

    <form name="csvupload" id="csvupload" action="csvread.php" method="post" enctype="multipart/form-data" > <input type="hidden" name="MAX_FILE_SIZE" value="30000" /><br /> csvfile:<input type="file" name="uploadfile" size="50" accept="text/comma-separated-values" /> <input type="submit" name="hyosi" value="ファイル表示" /><br /> </form> htmlからファイルが選択して、php言語でそのファイルが*.csv拡張子で指定して、アップロードする。以下わたし作ったのサンプルで*.exeだとうまくいかなかった。初心者です。急ぎです。誰か助けてください。 if(isset($_POST['hyosi'])){ $file_dir = 'C:\apaches\Apache2\htdocs\practice\csvupload\csvfile\\'; $file_path = $file_dir.$_FILES['uploadfile']['name']; if(!is_uploaded_file($_FILES['uploadfile']['tmp_name'])){ print'*.csvhh拡張子のファイルを参照してください。'; exit; } elseif(strtoupper(substr(trim($_FILES['uploadfile']['name']),-4))!=".CSV"){ print'*.csv拡張子のファイルを参照してください。'; exit; } elseif(strtoupper(substr(trim($_FILES['uploadfile']['name']),-3))=="EXE"){ print'*.csvrrr拡張子のファイルを参照してください。'; exit; /* elseif(preg_match("/^.*\.(?!csv)$/",$_FILES['uploadfile']['name'])){ print'*.csv拡張子のファイルを参照してください。'; exit; */ } elseif($_FILES['uploadfile']['name'] == '' && $_FILES['uploadfile']['size'] == 0){ print'ngngng'; exit; } else{ if(move_uploaded_file($_FILES['uploadfile']['tmp_name'],$file_path)){ $csv_dir = "./csvfile/"; $csv_path = $csv_dir.$_FILES['uploadfile']['name']; $sfile = addslashes($csv_path); $_SESSION['file'] =$sfile; $file=fopen($sfile ,'r'); }else{ print '正常にアップロード処理されませんでした。'; exit; } } }

    • 締切済み
    • PHP
  • Python Django csv について

    PYthon Django  csv unicod 下記のエラーがでました3時間もやって解決できません、誰かがご教授くだい。 困っています。お願いいたします。 エラー: [u"'\u767b\u9332\u65e5' value has an invalid date format. It must be in YYYY-MM-DD format."] views.py:は以下: def import_csv(request): response = HttpResponse(mimetype='application/vnd.ms-excel; charset=UTF-8') response['Content-Disposition'] = 'attachment; filename=file.csv' reader = csv.reader(response) with open('\Desktop\mkc\Py_meshi\sample.csv', 'r+b') as f: reader = csv.reader(f) for row in reader: tmp = User.objects.create() tmp.UserID = row[0] tmp.user_name = row[1]

  • CSVを使ったパスワード変更処理について

    CSVを使ったパスワード変更処理について 以下のソースをどういじれば変更が可能か申し訳御座いませんが、 どなたか分かるかたご教授願いますでしょうか? $post = $_POST; $org_file=fopen("logindata.csv","r"); $tmp_file=fopen("guest.tmp","w+"); flock($org_file,LOCK_SH); flock($tmp_file,LOCK_EX); $line =date("Ymd-H:i:s").","; $line.=$_POST['mail'].","; $line.=$_POST['pw2'].","; fputs($tmp_file,$line."\n"); while($row=fgets($org_file,1024)){ if($temp[1]==$post['mail'] && $temp[2]==$post['pw']){ } else{ fputs($tmp_file,$row); } } flock($tmp_file,LOCK_UN); flock($org_file,LOCK_UN); fclose($tmp_file); fclose($org_file); unlink("logindata.csv"); rename("guest.tmp","logindata.csv"); echo "パスワード変更しました。"; exit;

    • 締切済み
    • PHP
  • PHPでファイルアップロードがうまくいきません

    PHP初心者なんで宜しくお願い致します。 ファイルアップロードのシステムを作っているんですが どうもうまくいきません。 <form action="<? $_SERVER['PHP_SELF']; ?>" method="post" enctype="multipart/form-data"> 写真:<input type="file" name="file" size="40" /> <input type="submit" name="new_write" value=" 登録 "> </form> <? if(isset($_POST['new_write'])){ $filename = $_FILES['file']['name']; $updir = "./image/".$filename; if(move_uploaded_file($_FILES['file']['tmp_name'], $updir)){ print "OK"; }else{ print "NG"; } } ?> 上記の記述をしています。 そしてphpinfo()で情報を確認しても file_uploadsはONになっています。 そしてPHPのバージョンは4.4.2です。 単純なことかもしれませんが、宜しくお願い致します。

    • ベストアンサー
    • PHP
  • textareaに改行を入れても、CSV上では一セルに収まる方法は?

    結論から言いますと、 textareaに改行を入れると、CSVファイルが下段に移ってしまいます。 やりたいとこ textareaに改行を入れても、CSV上では一セルに収まってほしいです。 いろいろ調べたのですが、以下のどこを書き換えればよいか分からないんです。 初心者なため困っております。宜しくお願い致します。 △△△△△△△△△△△△△△△△ ファイル名:input.php ▽▽▽▽▽▽▽▽▽▽▽▽▽▽▽▽ <html> <head> <title>インプット</title> </head> <body> <h1 style="background:#cccccc">(書き込み)</h1> <form method="POST" action="write.php"> お名前: <input type="text" name="name" size="20" maxlength="30" /><br /> メッセージ: <textarea name="message" rows="4" cols="40">ここに感想を記入してください。</textarea> <br /> <input type="submit" value="送信" /> </form> </body> </html> △△△△△△△△△△△△△△△△ ファイル名:write.php ▽▽▽▽▽▽▽▽▽▽▽▽▽▽▽▽ <?php $file=fopen("good.csv","a"); flock($file,LOCK_EX); $line =date("Y年 m月 d日 H:i:s")."\t"; $line.=$_POST['name']."\t"; $line.=$_POST['message']."\t"; fputs($file,$line."\n"); flock($file,LOCK_UN); fclose($file); header("Location: input.php"); ?>

    • ベストアンサー
    • PHP
  • アップローダーの作製

    お世話になります。 アップローダーでmp4をUPしたいです。 下記の様なフォームを記述したところ、jpegはUP出来たのですが、mp4はアップできませんでした。 フォーム-------------------------------------------------------------------------------------- <?php //アップローダー function upload(){ $filename = $_GET["onamae"]; $max = 1024*1024*10; $array = array("01.jpg","02.jpg","03.jpg","pv.mp4"); for($i = 0; $i < count($array); ++$i){ ?> <div> <form method="post" enctype="multipart/form-data" action="uploader.php"> <input type="hidden" name="MAX_FILE_SIZE" value="<?php print $max; ?>"> <input name="userfile" type="file"> <input type="submit" value="アップロード" name="up"> <input name="filename" type="hidden" value="<?php print $array[$i]; ?>"> <input name="filemei" type="hidden" value="<?php print $filename; ?>"> </form> </div> <?php } } ?> uploader.php--------------------------------------------------------------------------------- <?php $filedir = "../girl/" . $_POST["filemei"] . "/" . $_POST["filename"]; $file_path = $filedir ; if(move_uploaded_file($_FILES['userfile']['tmp_name'], $file_path)){ ?> <div class="message">ファイルのアップロードに成功しました。</div> <?php } else{ ?> <div class="message">ファイルのアップロードに失敗しました</div> <?php } ?> ---------------------------------------------------------------------------------------------- 記述ミスあるかもです。すいません。

    • 締切済み
    • PHP
  • csvに中身が書き込まれない

    作成してみたものがうまく動かず、どこがおかしいのかよく分からないため、 質問させていただきます。 もともとtest.csvにはUTF-8で作成した中身があります。 ひとつ前の画面でPOST送信しているフォームがあり、 中身のデータは下記です。 <form action="kakikomi.php" method="post"> <input type="hidden" name="aaa" value="bbb,ccc,ddd"> </form> #kakikomi.php(UTF-8) $csvFileName="test.csv";$csv=array(); foreach($_POST as $val){$csv[]=explode(",",$val);} setlocale(LC_ALL,"ja_JP.UTF-8"); if( $pointer=fopen($csvFileName,"w")): foreach($csv as $line){fputcsv($pointer,$line);} fclose($pointer); //print_r($csv); else:die('メッセージ'); endif; この結果はcsvの中身は真っ白になってしまいます。 fputcsvのマニュアル例からそのまま引用したのですがどこかおかしいのでしょうか。

    • 締切済み
    • PHP
  • PHPでCSVをへんしゅうするには?

    CSVで編集をする際の動作にどうしても詰まってしまい困っています。 いろんなことを試したのですがうまくいきません。 追加と削除ができなので、それを合体すれば出来るのかなって思ったのですが、 ファイルの中身が消えてしまって、先に進まない状態なのです。 // 変更 if(isset($_POST["submit_upd"])){ // 押下したボタン番号を取得 $upd = isset($_POST["sbumit_upd_del"])? $_POST["sbumit_upd_del"]: ""; // POSTされたデータを取得 $number = $_POST["number"]; $category = htmlspecialchars($_POST["category"], ENT_QUOTES); $dating = htmlspecialchars($_POST["dating"], ENT_QUOTES); //csvファイルに書き込み $data_all = @file($filecsv); $file_csv = @fopen($filecsv, "w"); flock($file_csv,2); for($i=0; $i<count($data_all);$i++){ $data_array = explode(",", $data_all[$i]); if($data_array[0] != $upd){ //csvファイルに書き込み $current = @file_get_contents($filecsv); $current .= "$number,$category,$dating\n"; file_put_contents($filecsv, $current); } } flock($file_csv,3); fclose($file_csv); unset ($data_all); header("Location: index.php"); exit; }

    • ベストアンサー
    • PHP
  • PHP CSV 出力

    失礼します。 現在PHPで指定したパスに置いてあるCSVを出力したいのですが、 CSVは出力できているのですが、HTMLが先頭に入ってしまいます。 htmlファイルに設置したボタンに対して phpファイルで処理をしています。 どこかおかしい部分があればご教授頂きたいです。 HTMLファイル <?php $self = $_SERVER["SCRIPT_NAME"]; ?> <form method='POST' action='<?php $self ?>'> <input type='submit' value='CSV出力' name='get_csv'> </form> PHPファイル function This_Month(){ $filepath = 'hoge.csv'; //ダウンロードしたいファイルパス $filename = 'test.csv'; //ダウンロードした際のファイル名 if(!file_exists($filepath)){ die("Error:File(".$filepath.") does not exist"); } //オープンできるか確認 if(!($fp = fopen($filepath,"r"))) { die("Error:Cannot open the file(".$filepath.")"); } fclose($fp); //ファイルサイズの確認 if(($content_length = filesize($filepath)) == 0){ die("Error:File size is 0.(".$filepath.")"); } //ファイルの処理方法 header('Content-Disposition: attachement; filename="'.$filename.'"'); //ファイルタイプ指定 header('Content-Type: application/octet-stream'); header('Content-Transfer-Encoding:binary'); //ファイルサイズ header('Content-Length: '.filesize($filepath)); mb_convert_encoding($filepath,'utf-8','shift-jis'); readfile($filepath); exit(); } //ボタンに合わせて条件を変えていく if(isset($_POST["get_csv"])){ //ユーザーから来たデータをエスケープする $csv_output = htmlspecialchars($_POST["get_csv"], ENT_QUOTES, "UTF-8"); switch ($csv_output) { case "CSV出力": ”This_Month();  break; default: echo "エラー"; exit; } }

    • ベストアンサー
    • PHP

専門家に質問してみよう