質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
CSV

CSV(Comma-Separated Values)はコンマで区切られた明白なテキスト値のリストです。もしくは、そのフォーマットでひとつ以上のリストを含むファイルを指します。

ファイル

ファイルとは、文字列に基づいた名前又はパスからアクセスすることができる、任意の情報のブロック又は情報を格納するためのリソースです。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Q&A

解決済

2回答

679閲覧

コマンドライン引数で読み込んだ数字をcsvで読み込んだ数字と掛け算するコードのエラー

退会済みユーザー

退会済みユーザー

総合スコア0

CSV

CSV(Comma-Separated Values)はコンマで区切られた明白なテキスト値のリストです。もしくは、そのフォーマットでひとつ以上のリストを含むファイルを指します。

ファイル

ファイルとは、文字列に基づいた名前又はパスからアクセスすることができる、任意の情報のブロック又は情報を格納するためのリソースです。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

0グッド

0クリップ

投稿2018/06/20 05:16

編集2018/06/20 09:10

前提・実現したいこと

コマンドライン引数で読んだ数字とcsvで読み込んだ数字とを掛け算して
結果を一覧として表示させるコードを書いています。
ファイルから数値データを読み込む方法の参考記事

発生している問題・エラーメッセージ

このエラーなくすには、どのようにコードを修正すればいいかわからず困っています。
アドバイスいただけますと幸いです。

$ python sample.py 2 Traceback (most recent call last): File "sample.py", line 3, in <module> csv_obj = csv.render(open("arraynum.csv", "r")) AttributeError: module 'csv' has no attribute 'render'

該当のソースコード

python

1import sys 2import csv 3csv_obj = csv.render(open("arraynum.csv", "r")) 4data = [ v for v in csv_obj] 5 6args = sys.argv 7inputNum= args[1] 8num = int(inputNum) 9 10data = [[ int(elm) for elm in v] for v in csv.render(open("data", "r"))] 11 12for i in range(0,len(data),1): 13 ans = data[i] * num 14 print(ans)

arraynum.csv(excelで一列に入力し、csvで書き出し)

4 7 2 3 9 0 8

試したこと

コマンドライン引数で読み込んだ数字を配列の数字と掛け算することは
以下のコードでできました。

python

1import sys 2args = sys.argv 3 4inputNum= args[1] 5num = int(inputNum) 6 7data = [4, 7, 2, 3, 9, 0, 8] #ここの値をcsvから取得したい 8 9for i in range(0,len(data),1): 10 ans = data[i] * num 11 print(ans)

###ご回答を受けて修正した後のエラー
ご回答を受けて以下のように修正しましたが、別のエラーが発生しました。

python

1import sys 2import csv 3 4args = sys.argv 5inputNum= args[1] 6num = int(inputNum) 7 8data = [[ int(elm) for elm in v] for v in csv.reader(open("arraynum.csv", "r"))] 9 10for i in range(0,len(data),1): 11 ans = data[i] * num 12 print(ans)

エラー文

$ python csvUse.py 2 Traceback (most recent call last): File "csvUse.py", line 8, in <module> data = [[ int(elm) for elm in v] for v in csv.reader(open("arraynum.csv", "r"))] File "csvUse.py", line 8, in <listcomp> data = [[ int(elm) for elm in v] for v in csv.reader(open("arraynum.csv", "r"))] File "csvUse.py", line 8, in <listcomp> data = [[ int(elm) for elm in v] for v in csv.reader(open("arraynum.csv", "r"))] ValueError: invalid literal for int() with base 10: '\ufeff4'

補足情報(FW/ツールのバージョンなど)

Python 3.6.3
Mac OS High Sierra

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

AttributeError: module 'csv' has no attribute 'render'

csv には、render というアトリビュートがない、と言ってます

投稿2018/06/20 05:26

y_waiwai

総合スコア87719

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2018/06/20 05:38

ご回答いただきましてありがとうございます。 ご回答を受けて修正した後のエラーを追記させていただきました。 可能でしたらこちらのエラーについてもアドバイスいただけますと幸いです。 よろしくお願いいたします。
guest

0

ベストアンサー

おそらく参考記事の誤字です。×render(→○reader(

追記

読みやすいコードで書いてみました。

Python

1import csv 2data = [] 3with open('data.csv', 'r') as f: 4 reader = csv.reader(f) 5 for line in reader: 6 if len(line) >= 1: # もし空行だったとしても読み飛ばす 7 val = int(line[0]) 8 data.append(val) 9num = 2 10for d in data: 11 ans = d * num 12 print(ans)

data.csv

PlainText

11 22 33

投稿2018/06/20 05:23

編集2018/06/20 09:22
can110

総合スコア38233

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2018/06/20 05:38

ご回答いただきましてありがとうございます。 ご回答を受けて修正した後のエラーを追記させていただきました。 可能でしたらこちらのエラーについてもアドバイスいただけますと幸いです。 よろしくお願いいたします。
can110

2018/06/20 05:41

カレントディレクトリに「data」というファイルが存在しないのが原因だと思います。 よく分からなければフルパスで指定するのが確実です。
退会済みユーザー

退会済みユーザー

2018/06/20 08:19

お返事いただきましてありがとうございます。 こちらですが、参考記事にもありますように data = [ v for v in csv_obj] としているのでdataはファイルではないと思います。
can110

2018/06/20 08:30

参考記事のコードには「 実は一発で書けて」と書いてあります。 つまりdataへの読込は data = [ v for v in csv_obj] あるいは data = [[ int(elm) for elm in v] for v in csv.render(open("data", "r"))] のどちらかのみを実行すればよいです。 ですが記事にはもうひとつ誤字があり「"data"」は「"data.csv"」が正しい(はず)です。 この記事はちょっとアレなので、鵜呑みにせず、内容を理解しご自身でコードを組む必要があります。
退会済みユーザー

退会済みユーザー

2018/06/20 09:13

ご回答いただきましてありがとうございます。 修正いたしましたが、また別のエラーが表示されてしまいました。
can110

2018/06/20 09:16

ファイル先頭に不要なBOMが付いてしまっています。 macのExcelなりでCSVを編集し保存しなかったでしょうか? BOMを外すのは面倒なので、普通のテキストエディタでCSVファイルを作り直した方が簡単です。
hayataka2049

2018/06/20 09:28 編集

open("arraynum.csv", "r", encoding="utf-8-sig") でBOMがあってもなくても問題ないはずなので、頻繁に他のツールでCSVをいじるつもりなら、openで開くときは基本的に encoding="utf-8-sig"しておいても損はしないかもしれません
退会済みユーザー

退会済みユーザー

2018/06/20 09:40

ありがとうございました。 解決しました。
hayataka2049

2018/06/20 09:47

なるほど、UTF-16ですか。たしかに扱いに一工夫要りそうですね
can110

2018/06/20 09:59

せっかくBOMがついているのにencoding指定しないとエラーになってしまうという python側の挙動も、ちょっと腑に落ちないところなのですが。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問