62320


csvで読み込んだ行に情報(synonym='great')を追加して新しいファイルを作ろうと試みました。

[code]

    import csv
    
    synonym = 'great'
    
    def csv_start():
        with open("svl1.csv", 'r', encoding='utf-8-sig') as csv_file:
            csv_reader = csv.reader(csv_file)
            with open("new_svl1.csv", 'w', encoding='utf-8', newline='') as new_file:
                csv_writer = csv.writer(new_file)
                for line in csv_reader:
    
                    # mkrowがNone
                    mkrow = line.append('synonym')
                    csv_writer.writerow(mkrow)
    csv_start()
    
[/code]

以上を実行したらエラーが返ってきて、mkrowがNoneだそうです。

[code]

    Traceback (most recent call last):   File "func.py", line 24, in
    <module>
        csv_start()   File "func.py", line 22, in csv_start
        csv_writer.writerow(mkrow)
    _csv.Error: iterable expected, not NoneType
    
[/code]

試しにlineだけプリントしてみたらしっかりcsvから読み込んだリストが返ってきます。どうしたら、リストに値を追加できるのでしょうか？


CC BY-SA 4.0
2020-01-17T05:46:49.997
62319
2020-01-17T06:27:42.250
2020-01-17T05:52:17.990
3060
36091
question
python python3 csv
csvで読み込んだリストに情報を加えたいがNoneが返ってくる


リスト操作(`append`等)の戻り値は処理結果のオブジェクトを返していません。

[5\. データ構造](https://docs.python.org/ja/3.7/tutorial/datastructures.html)

>
> `insert`,`remove`,`sort`などのリストを操作するメソッドの戻り値が表示されていないことに気が付いたかもしれません。これらのメソッドは`None`を返しています。[1]
> これは Python の変更可能なデータ構造全てについての設計上の原則となっています。

この場合は`line`そのものが書き換えられていますので、それを使えば良いでしょう。

ただし「csvで読み込んだ行に情報(synonym='great')を追加して」という意図と、`line.append('synonym')`という処理が合っているようには見えないのですが。


CC BY-SA 4.0
2020-01-17T06:21:51.707
62320
2020-01-17T06:27:42.250
2020-01-17T06:27:42.250
26370
26370
62319
answer