質問編集履歴

1

自作コードを追記

2018/07/03 02:01

投稿

chibi144
chibi144

スコア64

test CHANGED
File without changes
test CHANGED
@@ -105,3 +105,107 @@
105
105
 
106
106
 
107
107
  Python:3.6
108
+
109
+
110
+
111
+ ### 追記
112
+
113
+
114
+
115
+ ひとまず書けるところまで書いてみました。(当初の考え方とは変わってしまいましたが…)
116
+
117
+ 思っているような結果が出ることは確認済みです。
118
+
119
+ メソッドの書き方がこれで本当に正しいのかは自信がありません。
120
+
121
+
122
+
123
+ ```python
124
+
125
+ class Sample:
126
+
127
+
128
+
129
+ def __init__(self, readCsvFile, writeCsvFile):
130
+
131
+ self.readCsvFile = readCsvFile
132
+
133
+ self.writeCsvFile = writeCsvFile
134
+
135
+
136
+
137
+ def read(self):
138
+
139
+ import pandas as pd
140
+
141
+ return pd.read_csv(self.readCsvFile).values.tolist()
142
+
143
+
144
+
145
+ def edit(self, df):
146
+
147
+ from itertools import groupby
148
+
149
+
150
+
151
+ # 大分類初出リスト
152
+
153
+ firstAppearanceList = []
154
+
155
+ # 項目リスト
156
+
157
+ itemsList = []
158
+
159
+
160
+
161
+ for key, group in groupby(df, key=lambda x: x[0]):
162
+
163
+ # 大分類をまたいだ項目の重複は可とする(野菜のスイカと果物のスイカは別扱い)
164
+
165
+ seen = []
166
+
167
+ firstAppearanceList.append(key)
168
+
169
+ itemsList.append(','.join([x[1] for x in list(group) if x[1] not in seen and not seen.append(x[1])]))
170
+
171
+
172
+
173
+ return list(zip(firstAppearanceList, itemsList))
174
+
175
+
176
+
177
+ def write(self, list):
178
+
179
+ import csv
180
+
181
+ f = open(self.writeCsvFile, 'w')
182
+
183
+ writer = csv.writer(f, lineterminator='\n')
184
+
185
+ writer.writerows([x for x in list])
186
+
187
+
188
+
189
+ def done(readCsvFile, writeCsvFile):
190
+
191
+ sample = Sample(readCsvFile, writeCsvFile)
192
+
193
+ df = sample.read()
194
+
195
+ list = sample.edit(df)
196
+
197
+ sample.write(list)
198
+
199
+
200
+
201
+ print('インポート(加工)したいcsvのファイル名を入力してください。')
202
+
203
+ readCsvFile = input('>> ') or 'test.csv'
204
+
205
+ print('エクスポートする際のcsvのファイル名を入力してください。')
206
+
207
+ writeCsvFile = input('>> ') or 'tmp.csv'
208
+
209
+ done(readCsvFile, writeCsvFile)
210
+
211
+ ```