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

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

新規登録して質問してみよう
ただいま回答率
85.31%
Python 2.7

Python 2.7は2.xシリーズでは最後のメジャーバージョンです。Python3.1にある機能の多くが含まれています。

Q&A

解決済

1回答

5518閲覧

Python 1行ずつ読み込み、条件に応じて要素を変更

ynwa

総合スコア12

Python 2.7

Python 2.7は2.xシリーズでは最後のメジャーバージョンです。Python3.1にある機能の多くが含まれています。

0グッド

1クリップ

投稿2016/08/23 21:18

name.txt

sakura tsubaki suzuran ajisai kiku

text.txt

sakura|0 ume|0 bara|0 tsubaki|0 suzuran|0 ajisai|0 kiku|0 yuri|0 ```###前提・実現したいこと text.txtの1列目がname.txtに含まれるならば、text.txtの2列目を1にしたいです。

sakura|1
ume|0
bara|0
tsubaki|1
suzuran|1
ajisai|1
kiku|1
yuri|0

###自分で考えたソースコード text.txtを一列ずつ読み込んで、if文の条件に当てはまるならばその都度、text.txtの2列目を1としたいです. if文以降をうまく書いてできればよいのですが,よくわかりません。 実際はかなり大きいデータに応用するつもりです.

#-- coding:utf-8 -

import csv

for row in csv.reader(open('name.txt', 'r')):
for row2 in csv.reader(open('text.txt', 'r'),delimiter = '|'):
if (row[0] == row2[0]):

f.close()

###コメント Pythonをはじめて間もなく、初歩的なこともまだ理解できておりませんが、ご教授お願い致します。

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

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

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

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

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

guest

回答1

0

ベストアンサー

ファイルをオープンする場合は、with文を使いましょう。
処理の途中でエラーになっても、withブロックを抜けたときに必ずファイルを閉じてくれます。
(裏でf.close()をやってくれます。)

かなり大きいデータにするとのことですが、
name.txtのほうはメモリーに読み込めるサイズと仮定して話を進めます。
名前の出現する順番が決まってないので、毎回必ずファイルを全部読み込む必要があるからです。

あらかじめ、名前リストを作っておきます。

lang

1names = [] 2with open('name.txt', 'r') as f: 3 for row in csv.reader(f): 4 names.append(row[0])

names.txtは1列だけなので、csv.readerを使う必要はないですが、改行文字の扱いのことを考えて、あえて使います。
csv.readerを使わない方法は別途考えてみて下さい。

text.txtの方は、1行ずつ読み込んでいきます。

それぞれ読み込んだ列は変数に入れておくと分かりやすくなります。
countは数値(int)に変換しておきます。

リストのnamesに名前が含まれているかどうかはname in namesで判定します。

lang

1with open('text.txt', 'r') as f2: 2 for row in csv.reader(f2, delimiter='|'): 3 name = row[0] 4 count = int(row[1]) 5 if name in names: 6 count += 1 7 print name, count

読み込んだファイルにそのまま書き込むのは、このケースだとちょっと難しいと思いますので、
いったん別のファイルに書き出すようにしたほうが良いかも知れません。

投稿2016/08/23 23:39

argius

総合スコア9396

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.31%

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

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

質問する

関連した質問