テキストファイルを読み込む

Reading textfile – StackOverflow

問題の本質は,質問以外の部分にありそうだけど.それはさておき.

import random


members = 5
participants=[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20]
random.shuffle(participants)

with open("myfile1.txt", 'w') as tf:
    for i in range(len(participants) // members + 1):
        group = participants[i*members:i*members + members]
        for participant in group:
            tf.write(str(participant))
            tf.write("\n")

with open('myfile1.txt','r') as file:
    a = file.read()

a

’12\n16\n10\n6\n11\n8\n4\n9\n3\n2\n15\n1\n18\n13\n5\n19\n7\n20\n17\n14\n’

結局,書き込まれているのは20行のデータに過ぎない.

これの合計を計算したい場合,「\n」を消してint型にする必要がある.
改行や空白やもろもろ消したい場合は,.split()が便利.
(何も指定しなければ,全部消せる;.split(‘\n’)だと別途スペースの処理が必要※)

sum(map(int, a.split()))

210

勿論,numpy.loadtxt()も使えて,

import numpy as np

data = np.loadtxt("myfile1.txt")
data

array([ 9., 11., 18., 14., 2., 4., 1., 17., 16., 20., 8.,
10., 15., 7., 12., 5., 19., 13., 6., 3.])

data.sum()

210.0

行で分割したい場合,「.splitlines()」がある.

with open('myfile1.txt','r') as file:
    print(file.read().split())

[’12’, ’16’, ’10’, ‘6’, ’11’, ‘8’, ‘4’, ‘9’, ‘3’, ‘2’, ’15’, ‘1’, ’18’, ’13’, ‘5’, ’19’, ‘7’, ’20’, ’17’, ’14’]

with open('myfile1.txt','r') as file:
    print(file.read().splitlines())

[’12’, ’16’, ’10’, ‘6’, ’11’, ‘8’, ‘4’, ‘9’, ‘3’, ‘2’, ’15’, ‘1’, ’18’, ’13’, ‘5’, ’19’, ‘7’, ’20’, ’17’, ’14’]

この例だと分かり難いけど,

"One line\n".split()#スペース,改行で分割

[‘One’, ‘line’]

"One line\n".split('\n')#改行で分割

[‘One line’, ”]

"One line\n".splitlines()#改行で分割

[‘One line’]

「.split(‘\n’)」と「.splitlines()」の違いは,

''.split('\n')

[”]

''.splitlines()

[]

従って,行末の改行後に空文字列が含まれた時,「.split(‘\n’)」では「”」が残り,「.splitlines()」では取り除かれる.「split splitlines python」で検索すると,かなり上位の記事でありながら,ちょっと語弊のある説明がみられたので,注意しないといけない.

例えば,こういうとき.

with open("myfile2.txt", 'w') as file:
    for _ in range(5):
        for i in range(5):
            file.write(str(i) + ' ')
        file.write("\n")

with open('myfile2.txt','r') as file:
    a = file.read()
a

‘0 1 2 3 4 \n0 1 2 3 4 \n0 1 2 3 4 \n0 1 2 3 4 \n0 1 2 3 4 \n’

data2 = np.loadtxt("myfile2.txt")
data2

array([[ 0., 1., 2., 3., 4.],
[ 0., 1., 2., 3., 4.],
[ 0., 1., 2., 3., 4.],
[ 0., 1., 2., 3., 4.],
[ 0., 1., 2., 3., 4.]])

a.split()

[‘0’,
‘1’,
‘2’,
‘3’,
‘4’,
‘0’,
‘1’,
‘2’,
‘3’,
‘4’,
‘0’,
‘1’,
‘2’,
‘3’,
‘4’,
‘0’,
‘1’,
‘2’,
‘3’,
‘4’,
‘0’,
‘1’,
‘2’,
‘3’,
‘4’]

a.split('\n')

[‘0 1 2 3 4 ‘, ‘0 1 2 3 4 ‘, ‘0 1 2 3 4 ‘, ‘0 1 2 3 4 ‘, ‘0 1 2 3 4 ‘, ”]

a.splitlines()

[‘0 1 2 3 4 ‘, ‘0 1 2 3 4 ‘, ‘0 1 2 3 4 ‘, ‘0 1 2 3 4 ‘, ‘0 1 2 3 4 ‘]

それぞれ,名前の通りの機能を示す.
行が欲しい場合は,「.splitlines()」,単一要素が欲しい場合は,「.split()」.

広告
カテゴリー: 未分類 パーマリンク

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中