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

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

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

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Q&A

解決済

3回答

10634閲覧

n行2列のcsvファイルから、欲しい範囲のデータだけを出力させたいです。

rainrain

総合スコア31

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

0グッド

0クリップ

投稿2018/06/19 06:13

前提・実現したいこと

パイソンを初めて1週間の私を助けてください。
numpyを使ってcsvファイルを読み取って表示させたいのですが、表示させたい形式が少し特殊でやり方が分からず困っています。

具体的に説明すると、、、
まずcsvはn行2列です。
そこから特定の行を指定します。特定の行を指定すると、その前後30行が出力されるプログラムが作りたいです。
例えば、50行目を指定したとすると、20行目から80行目が表示されることが理想です。

色々調べたのですが、範囲を指定する方法がさっぱり分かりません。
もっと自分で1から勉強すべきなのですが、どうしても早急に必要なので、大変申し訳ないのですがpythonに詳しい方、ぜひサンプルコードを教えていただきたいです。
よろしくお願いいたします。

簡単な図解(数字は適当です)

1,100
2,95
3,90



20,5(ここから)



50,-145(この行を指定)



80,-295(ここまで)


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

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

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

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

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

guest

回答3

0

ベストアンサー

パイソンを初めて1週間の私を助けてください。

numpyを使う前に単純に考えてみましょう。

  • CSVファイルを読み込む

python

1import csv 2 3lines = [] 4 5# ファイル名は適当です 6with open("test.csv", "r") as csvfile: 7 rows = csv.reader(csvfile) 8 for row in rows: 9 # 行毎にcsvfileの中身を格納してゆきます 10 lines.append(row)

Python Doc - 14.1. csv — CSV ファイルの読み書き

  • 番号リスト 特定の行を指定して、その前後30行を計算して求める

python

1 2line_number = 50 3 4before_line_number = line_number - 30 5after_line_number = line_number + 30
  • 求めた前後の行が出力される

python

1for idx, line in enumerate(lines, 1): 2 if before_line_number <= idx <= after_line_numer: 3 print(line) 4

こんな感じでしょうか。
とりあえずで組んだのでline_numberが0以下になる場合は何も考えていないです、そこはご自分で考えるようにしてください。

投稿2018/06/19 14:06

wakame

総合スコア1170

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

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

rainrain

2018/06/20 03:35

ご丁寧にありがとうございます! また何かあればよろしくお願いします!
guest

0

スライスを使ってください。

Pythonのスライス

python

1>>> import numpy as np 2>>> a = np.arange(20).reshape(10,2) 3>>> a 4array([[ 0, 1], 5 [ 2, 3], 6 [ 4, 5], 7 [ 6, 7], 8 [ 8, 9], 9 [10, 11], 10 [12, 13], 11 [14, 15], 12 [16, 17], 13 [18, 19]]) 14>>> a[3:7] 15array([[ 6, 7], 16 [ 8, 9], 17 [10, 11], 18 [12, 13]])

指定したindexのプラスマイナス30をスライスに与えれば大筋では大丈夫ですが、その数字が0以下とか配列のサイズ以上になっちゃったときの処理は別途考える必要があります。
あと、スライスのstart側は指定した数字のindexの要素が含まれますが、end側は含まれないので、1を足してやる必要があるかも。

投稿2018/06/19 06:21

hayataka2049

総合スコア30933

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

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

0

pythonの勉強より所定のファイルを早急に得る事の方が最優先であるなら、grep で対処してはどうでしょうか。

egrep -C30 '^30,' input.txt | 標準入力を受けとる適当なpyスクリプト

投稿2018/06/19 09:02

KojiDoi

総合スコア13669

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問