データ:提供されてはいないが、生成方法などの記述があったが、うまく生成できなかったので郵便局のHPより生データを利用。 (1) #! /usr/bin/en python # -*- coding: utf-8 -*- #(1) 行数をカウントしたもの.確認にはwcコマンドを用いよ #アプローチ:F.readlines()で行ごとに読み込みリスト化、 #そのリストの要素数カウントをlen()関数で行う。 f = open("../43KUMAMO.CSV", "r") Content = f.readlines() print len(Content) f.close() (2) タブ1文字につきスペース1文字に置換したもの.とあるが生データはCSV(コンマで区切られたデータとなっていたのでコンマをスペースに置き換える設問にした。) #! /usr/bin/en python # -*- coding: utf-8 -*- #(2) タブ1文字につきスペース1文字に置換したもの.確認にはsedコマンド,trコマンド,もしくはexpandコマンドを用いよ. #アプローチ:F.split(), F.join関数の利用 #設定変更:タブ1文字につき→コンマ1文字につき f = open("../43KUMAMO.CSV", "r") for line in f.readlines(): print " ".join(line.split(",")) f.close() #! /usr/bin/en python # -*- coding: utf-8 -*- #(3) 各行の1列目だけを抜き出したものをcol1.txtに,2列目だけを抜き出したものをcol2.txtとしてファイルに保存せよ.確認にはcutコマンドを用いよ #アプローチ:for文とsplit関数の利用、書き出しにwrite関数 f = open("../43KUMAMO.CSV", "r") wfF = open("col1.txt","w"); wfS = open("col2.txt","w"); for line in f.readlines(): line = line.split(",") FirCol = line[0] SecCol = line[1] print u"1列目: %s" % FirCol, print u"2列目: %s" % SecCol wfF.write(FirCol+"\n") wfS.write(SecCol+"\n") f.close() wfF.close() wfS.close() #! /usr/bin/en python # -*- coding: utf-8 -*- #(4) (3)で作ったcol1.txtとcol2.txtを結合し,元のタブ区切りテキストを復元したもの.確認にはpasteコマンドを用いよ. #アプローチ:for文とsplit関数の利用、書き出しにwrite関数 f = open("../43KUMAMO.CSV", "r") wfF = open("first_col.col","w"); wfS = open("second_col.col","w"); wfR = open("復元.txt","w"); for line in f.readlines(): line = line.split(",") FirCol = line[0] SecCol = line[1] wfR.write(FirCol+"\t"+SecCol+"\n") f.close() wfF.close() wfS.close() wfR.close() (5), (6) # !/usr/bin/env python # -*- coding: utf-8 -*- # (6) 自然数Nをコマンドライン引数にとり,入力のうち末尾のN行だけ.確認にはtailコマンドを用いよ # アプローチ: import sys N = int(sys.argv[1]) # $python 006.py 1 のようにファイル名の次に数値が来ると仮定 #if(isinstance(N, int)):#http://www.gossamer-threads.com/lists/python/python/97153 # print "it is an int" # print N #else: # print "it is not an int" # print N f = open("43KUMAMO.CSV","r") lines = f.readlines() for num in range(0, N): #(5) #for num in range(N, len(lines)):#(6) print lines[num] f.close() (7) # !/usr/bin/env python # -*- coding: utf-8 -*- #(7) 1コラム目の文字列の異なり数(種類数).確認にはcut, sort, uniq, wcコマンドを用いよ. #line[a,b,c,d,e,f]とあったらaがline[0], line[1], line[2],・・・で異なるline要素が何個あるかってこと? #アプローチ:aの内容をリスト file = open("43KUMAMO.CSV", "r") NewList = set() for line in file.readlines(): item = line.split(",") NewList.add(item[0]) print len(NewList) file.close() (9) #! /usr/bin/env python # -*- encoding: utf-8 -*- #(9) 各行を2コラム目,1コラム目の優先順位で辞書の逆順ソートしたもの(注意: 各行の内容は変更せずに並び替えよ).確認にはsortコマンドを用いよ(この問題は結果が合わなくてもよい). #アプローチ:sorted関数の利用(key値の使用) #参考: #みんなのPython 柴田淳 #http://docs.python.jp/2/howto/sorting.html import csv file = open("43KUMAMO.CSV","r") contents = csv.reader(file) NewList = [] for line in contents: #print line[3], #print line[4], #print line[5], #print line[6], #print line[7], #print line[8] NewList.insert(len(NewList), [line[4], line[5], line[7], line[8]]) NewList.sort(key=lambda x:(x[1],x[0]), reverse=True) for line in NewList: print line[0], print line[1], print line[2], print line[3] file.close() #! /usr/bin/env python #-*- encoding: utf-8 -*- #(10) 各行の2コラム目の文字列の出現頻度を求め,出現頻度の高い順に並べよ.ただし,(3)で作成したプログラムの出力(col2.txt)を読み込むプログラムとして実装せよ.確認にはcut, uniq, sortコマンドを用い #はしょり:(3)で作成したプログラムの出力(col2.txt)を読み込むプログラムとして実装せよ #アプローチ: 読み込みファイルより[文字列, 頻度]のリストを作成 #List = [["abd","asbd"],["wbd","zzdbd","wbd"],["abd","asbd"]] #List = [[1,2],[3,4,5],[1,2]] #print List #NewList = set(List) #print NewList #上を実行すると以下の結果となる """ [['abd', 'asbd'], ['wbd', 'zzdbd', 'wbd'], ['abd', 'asbd']] Traceback (most recent call last): File "010.py", line 15, in <module> NewList = set(List) TypeError: unhashable type: 'list' """ #多重リストにsetは適用不可? import csv file = open("43KUMAMO.CSV","r") Contents = csv.reader(file) FreqList = [] #[対象文字列(str)、頻度(int)] for lineContents in Contents: #コンテンツのループ fInList = False #リスト用フラグ for itemFreqList in FreqList: #リストのループ if(lineContents[4]==itemFreqList[0]):#リストの中とのマッチング itemFreqList[1] += 1 fInList = True #リストの中にあったらフラグを立てる if(fInList == False): #フラグがたってなかったら、 #print lineContents[4] FreqList.insert(len(FreqList), [lineContents[4], 0])#リストに追加 FreqList.sort(key=lambda x:(x[1]), reverse=True) for item in FreqList: print item[0],item[1] file.close() |