備忘録(①csv.readerのAttributeError、②get_sheet_by_nameのDeprecationWarning、③.delete_colsが機能しない)
・今日の進捗
基本機能の確認として下図の処理を全部できるようにした。相変わらず細かいエラーが多い。
発生したミスを忘れないように書いておく
①大文字小文字はキッチリと。
import csv
csvfile = open('/content/drive/My Drive/Colab Notebooks/testB.csv',encoding="shift-jis")
reader = csv.Reader(csvfile)
for row in reader:
print(row)
AttributeError Traceback (most recent call last)
<ipython-input-14-bb1b8be4844f> in <module>()
3 csvfile = open('/content/drive/My Drive/Colab Notebooks/testB.csv',encoding="shift-jis")
----> 4 reader = csv.Reader(csvfile)
5 for row in reader:
AttributeError: module 'csv' has no attribute 'Reader'
csv.reader() と csv.Reader() 、大文字小文字を間違えたのでAttribute Errorが発生。
csv.DictReaderから書き換えた時に頻発しそうなので覚えておく
②get_sheet_by_nameは使わないほうがいい
import openpyxl
wb=openpyxl.load_workbook('/content/drive/My Drive/Colab Notebooks/testB.xlsx')
wb.get_sheet_names()
/usr/local/lib/python3.6/dist-packages/ipykernel_launcher.py:3: DeprecationWarning:
Call to deprecated function get_sheet_names (Use wb.sheetnames).
This is separate from the ipykernel package so we can avoid doing imports until
['Sheet1']
Deprecationは非推奨という意味。機能はするけどあんま良くないので使うなってことらしく、更に推奨の関数も書いてある。
言われてみれば分かりやすいが、バーっと出てきた文字列を見て「は?なんで?」ってなって無駄に時間を使った。
ちゃんと英語は読まないとダメだね、本当に・・・。
③ hogehoge.delete_cols コマンドのhogehogeの部分は変数名である
import openpyxl
wb=openpyxl.load_workbook('/content/drive/My Drive/Colab Notebooks/testB.xlsx')
ws = wb.worksheets[0]
sheet.delete_cols(2)
wb.save('/content/drive/My Drive/Colab Notebooks/testC.xlsx')
ファイルは出力されたが、エクセルの2列目が削除できていなかった。
今見ると、色々なサイトをツマミ食いして完全におかしくなっている。
import openpyxl
wb=openpyxl.load_workbook('/content/drive/My Drive/Colab Notebooks/testB.xlsx')
ws = wb.worksheets[0]
ws.delete_cols(2)
wb.save('/content/drive/My Drive/Colab Notebooks/testC.xlsx')
wb=openpyxl.load_workbook() で、xlsxのデータを変数wbに詰め込む
ws=wb.worksheets[0] で、wbの中のxlsxのデータから引数(0)頁目のワークシートのデータを変数wsに詰め込む
ws.delete.cols(2) で、ワークシートのデータwsに対し、列数2列目(引数)を削除する
wb.save() で保存して成功・・・あれ?
最終的に出力されたtestC.xlsxはちゃんと2列めが消えたデータになるのだが、何故だろう?
wsのデータはwbからコピーしてきたものなので、wb.saveをする前に、wbにwsのデータを戻さないと本当はダメな気がする。
ws=wb.worksheets[]を使った時点で、wsとwbのデータが同期しているんだろうか・・・?
調べて分からなければ、質問を書いてみるか・・・?
~~追記~~
配列は参照される、という回答をいただけたのリンクを貼付。
https://qiita.com/wellwell3176/questions/d42efcba6482528e1556
Author And Source
この問題について(備忘録(①csv.readerのAttributeError、②get_sheet_by_nameのDeprecationWarning、③.delete_colsが機能しない)), 我々は、より多くの情報をここで見つけました https://qiita.com/wellwell3176/items/09b73369bad2006d211f著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .