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

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

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

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

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

データマイニング

データマイニングは、購買履歴やクレジットカードの利用履歴、電話の通話履歴など企業にある大量のデータを解析して、その中に隠れたパターンやルールを探し出す技術です。DMと略されることもあります。

Q&A

解決済

1回答

2406閲覧

python DATデータから抽出し、CSVに出力

ekTJ

総合スコア109

CSV

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

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

データマイニング

データマイニングは、購買履歴やクレジットカードの利用履歴、電話の通話履歴など企業にある大量のデータを解析して、その中に隠れたパターンやルールを探し出す技術です。DMと略されることもあります。

0グッド

0クリップ

投稿2020/11/30 02:28

編集2020/11/30 02:42

苦戦しています。このような数字の羅列されたDATデータから任意の数字を抜きたいです。
[20303015035130001 025838518000082785000011505 0003 000101061926 ,
20303015035130001 1 83858000000001040 0001000101062001 ,]
実現したいこと...
①各列20文字目の[0or1]で抽出部分を変更したい
②20文字が1だった場合のデータは0だった場合のデータに追加したい
具体的に言うとこの辺りの書き方で混乱しております。

f = open(file_text.get(), 'r')
if pd.read_fwf(f,colspec = [(19,20)]) == 0:
colspecs = [(22,25), (25,28),(28,30),(30,32),(47,51)]
names = ["SCAN", now.strftime("%Y%m%d"), now.strftime('%H%M%S'),"通番",sc,cc," "]
df = pd.read_fwf(f, skiprows=1,header=None, names=names,colspecs=colspecs, dtype=str)
else:
pd.read_fwf(f,colspec = [(19,20)]) == 1:
colspecs = [(51,54),(54,57),(57,59),(59,61),(72,76)]

import tkinter as tk #GUIライブラリ import tkinter.messagebox as tkm from pathlib import Path #ファイルシステムのパスを扱えるライブラリ import pandas as pd #csv扱うライブラリ import datetime as dt import cx_Oracle from tkinter import filedialog now = dt.datetime.now() #時刻 time = now.strftime('%Y%m%d-%H%M%S') def OpenFileDlg(tbox): ftype = [('','*')] dir = '.' # ファイルダイアログ表示 filename = filedialog.askopenfilename(filetypes = ftype, initialdir = dir) # ファイルパスをテキストボックスに表示 tbox.insert(0, filename) #ボタン関数 def btn_click(): cc=str(txt1.get()) sc=str(txt2.get()) if not len(cc) == 6 : tkm.showerror("入力エラー", "顧客番号は6桁です") return elif not len(sc) == 7 : tkm.showerror("入力エラー", "社員番号は7桁です") return elif file_text.get() == '': tkm.showerror('エラー','データファイルを指定してください') return else: tkm.showinfo("情報", "CSVを保存中です") f = open(file_text.get(), 'r') if pd.read_fwf(f,colspec = [(19,20)]) == 0: colspecs = [(22,25), (25,28),(28,30),(30,32),(47,51)] names = ["SCAN", now.strftime("%Y%m%d"), now.strftime('%H%M%S'),"通番",sc,cc," "] df = pd.read_fwf(f, skiprows=1,header=None, names=names,colspecs=colspecs, dtype=str) else: pd.read_fwf(f,colspec = [(19,20)]) == 1: colspecs = [(51,54),(54,57),(57,59),(59,61),(72,76)] df.to_csv(cc+"_{}.csv".format(time), index= False,encoding="shift-jis") tkm.showinfo("情報", "CSVを保存しました") #画面表示 root = tk.Tk() root.geometry('500x400+600+300') root.title('入力画面') #顧客番号 lbl1 = tk.Label(text='顧客番号',font=(u'MS ゴシック', 11, 'bold')) lbl1.place(x=85, y=145) txt1 = tk.Entry(width=30) txt1.place(x=160, y=150) btn = tk.Button(root, text='CSV出力',width=20, font=("Menlo",11),command=btn_click) btn.place(x=155, y=220) #社員番号 lbl2 = tk.Label(text='社員番号',font=(u'MS ゴシック', 11, 'bold')) lbl2.place(x=85, y=175) txt2 = tk.Entry(width=30) txt2.place(x=160, y=180) btn1 = tk.Button(root, text="終了", width=20, font=("Menlo",11),command=root.destroy) btn1.place(x=155, y=250) # Excelファイルダイアログ label = tk.Label(root, text='データファイル',font=(u'MS ゴシック', 10, 'bold')) label.place(x=100, y=95) file_text = tk.Entry(root, width=40) file_text.place(x=100, y=115) fdlg_button = tk.Button(root, text='ファイル選択', command = lambda: OpenFileDlg(file_text) ) fdlg_button.place(x=360, y=110) root.mainloop() #表示保持

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

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

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

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

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

guest

回答1

0

ベストアンサー

問題解決にあたり、混乱しているのであれば、問題をシンプルにしてわからないところは最小限にすることをお勧めします。少なくとも、現状tkを利用する必要はなく、固定値でデータを取得し、結果だけを表示したいのであればprintで十分です。

python

1if pd.read_fwf(f,colspec = [(19,20)]) == 0:

また、上記ですが、期待通りに動作することは確認していますか?
まずは、以下のようなコードを利用し、valが期待した値になっているのか、型は一致しているのかなど確認することをお勧めします。

python

1val = pd.read_fwf(f,colspec = [(19,20)]) 2print(val) 3 4if val == 0:

上記は一例ですが、不明点があれば、期待通りに動作するのか否かを一つずつ確認をしていけば良いです。

投稿2020/11/30 05:18

t_obara

総合スコア5488

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

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

ekTJ

2020/11/30 05:46

if val == 0: print(val) を実行したところ下記のエラーが出現しました。 The truth value of a DataFrame is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問