

以下のコードで実行するとcsvファイルに入力データは保存されますが、データがラベルに対してずれてしまい、「登録者」のデータがない事になっています。  
読み込みが悪いのか？ファイルのラベルが悪いのか？  
解決策のご教授をお願い致します。

[code]

    import tkinter as tk
    import csv
    
    
    
    
    class file1_1:
        def file1_2(self):
            mn = tk.Tk()
            mn.geometry('1500x1000')
            mn.title("在庫管理システム")
    
            def new1_1():
                mn.destroy()
                file1().file2()
    
            lab1_1 = tk.Label(text="メインモニター", font=("",45))
            lab1_1.place(x=40, y=20)
            lab1_2 = tk.Label(text="入出庫処理メニュー", font=("",30))
            lab1_2.place(x=40, y=110)
    
            bot1_1 = tk.Button(mn, text="入庫処理", font=("",50), width=20, command=new1_1)
            bot1_1.place(x=40, y=170)
            bot1_2 = tk.Button(mn, text="出庫処理", font=("",50), width=20)
            bot1_2.place(x=750, y=170)
    
            mn.mainloop()
    
    
    class file1:
        def file2(self):
            lt = tk.Tk()
            lt.geometry('600x600')
            lt.title("登録モニター")
    
            def bot1_1():
                detaset = []
                detaset.append(txt1.get())
                detaset.append(txt2.get())
                detaset.append(txt3.get())
                detaset.append(txt4.get())
    
    
                with open('deta.csv', 'a') as csvFile:
                    writer = csv.writer(csvFile)
                    writer.writerow(detaset)
    
                txt1.delete(0, tk.END)
                txt2.delete(0, tk.END)
                txt3.delete(0, tk.END)
                txt4.delete(0, tk.END)
    
                return
    
            def exit_1():
                lt.destroy()
                file1_1().file1_2()
    
    
            lab1 = tk.Label(text="商品登録", font=("",40))
            lab1.place(x=20, y=30)
            lab2 = tk.Label(text="ID", font=("",30))
            lab2.place(x=20, y=120)
            lab3 = tk.Label(text="品名", font=("",30))
            lab3.place(x=20, y=190)
            lab4 = tk.Label(text="数量", font=("",30))
            lab4.place(x=20, y=260)
            lab5 = tk.Label(text="登録者", font=("",30))
            lab5.place(x=20, y=330)
    
            txt1 = tk.Entry(font=("",30), width=15)
            txt1.place(x=200, y=120)
            txt2 = tk.Entry(font=("",30), width=15)
            txt2.place(x=200, y=190)
            txt3 = tk.Entry(font=("",30), width=15)
            txt3.place(x=200, y=260)
            txt4 = tk.Entry(font=("",30), width=15)
            txt4.place(x=200, y=330)
    
            bot1 = tk.Button(lt, text="登録", font=("",40), width=5, command=bot1_1)
            bot1.place(x=120, y=450)
            bot2 = tk.Button(lt, text="終了", font=("",40), width=5, command=exit_1)
            bot2.place(x=320, y=450)
    
            lt.mainloop()
    
    
    s1 = file1_1()
    s1.file1_2()
    
[/code]

実行結果のファイルの中身

[code]

    ID,品名,数量,登録者
    0  1,test1,1,masaya
    
[/code]


CC BY-SA 4.0
2020-05-10T07:14:07.653
66480
2020-06-24T11:06:20.753
2020-05-10T13:32:03.377
40070
40070
question
python csv
csvファイルへの書き込みについて


プログラムの構成などに色々と突っ込みどころは有るようですが、入力されたデータをファイルに書き込むことに関しては正常に動作しているでしょう。

ファイルに書き込まれたのは入力されたデータにちゃんと対応していて、登録者データは(入力されていれば)存在しています。

コメントに書いたように、ID欄に間に空白を含む`0
1`と入力されたので、csvファイルにそのように書かれたと考えられます。質問記事の登録者の部分には`masaya`というデータが存在しています。

例えば登録者欄を空白のまま「登録」ボタンをクリックすれば、それは確かにデータは無いまま書かれます。

他も含めてデータの内容に制限や仕様(最小最大桁数や入力可能文字種/文字列/形式など)があるなら、ファイルに書き込む前にフォーマットチェックを行いましょう。

あるいは、出来たファイルをExcelで見たり、Accessやデータベースの登録プログラムを通したら、データが欠落したといった現象が発生していたりしませんか？

つまり、 **「データがラベルに対してずれてしまい、「登録者」のデータがない」** というのはどのような場面・手段で確認されたのか？ということです。

もしそうならばそれは質問記事に問題現象の一部として追記してください。

* * *

なお今のところ可能性として考えられなくも無いのは、OSがLinux系/MacOSでラベル(ヘッダ)行として用意したファイルの改行コードがCRLFでは無くLFのみで、実行結果を読み取るソフトウェアがcsvファイルの改行コードの仕様(CRLF)をチェックしていて、でもそれなりに処理しようとして何かおかしなことになっているとか、ファイルのUTF-8
BOM有無の条件が想定と違っていて処理がおかしくなっている、といったくらいでしょうか。


CC BY-SA 4.0
2020-05-10T14:15:34.620
66492
2020-05-10T22:59:40.710
2020-05-10T22:59:40.710
26370
26370
66480
answer