Sponsored Link

カテゴリー別アーカイブ: ファイル

(39) シェルスクリプトファイルを作成・実行

(39) シェルスクリプトファイルを作成・実行

シェルスクリプトファイル exec.sh を作成し、実行属性を付与する。

>>> fh = open('exec.sh','w')
>>> fh.write('#!/bin/sh\n')
>>> fh.write('export LD_LIBRARY_PATH=/usr/local/lib\n')
>>> fh.write('gcc --version\n')
>>> fh.write('#end')
>>> fh.close()
>>>
>>> import subprocess as sp
>>> args = ['chmod','+x','./exec.sh']
>>> sp.call(args)
0

作成したシェルスクリプトファイルを実行する。

>>> import subprocess as sp
>>> args = ['./exec.sh']
>>> sp.call(args)
gcc (GCC) 4.9.0
Copyright (C) 2014 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

0

(38) ファイル、ディレクトリのフルパスを取得

(38) ファイル、ディレクトリのフルパスを取得

os.path.abspath を使用し、ファイル、ディレクトリのフルパスを取得する。

>>> import os
>>>
>>> os.path.abspath('./')
'/home/user/tmp'
>>>
>>> os.path.abspath('data.txt')
'/home/user/tmp/data.txt'
>>>
>>> os.path.abspath('../data.txt')
'/home/user/data.txt'

(35) numpyでCSVファイルの読み書き

(35) numpyでCSVファイルの読み書き

6行3列のデータ配列を持つ CSVファイル を用意した。

[user@linux]$ cat test.csv
10,11,12,13,14,15
20,21,22,23,24,25
30,31,32,33,34,35

このファイルを numpy.loadtxt でリードしてみる。

>>> import numpy as np
>>> a = np.loadtxt('test.csv', delimiter=',')
>>> a
array([[ 10.,  11.,  12.,  13.,  14.,  15.],
       [ 20.,  21.,  22.,  23.,  24.,  25.],
       [ 30.,  31.,  32.,  33.,  34.,  35.]])

全要素の値を2倍した後、その配列を numpy.savetxt で CSVファイルとしてセーブしてみる。

>>> b = a * 2
>>> b
array([[ 20.,  22.,  24.,  26.,  28.,  30.],
       [ 40.,  42.,  44.,  46.,  48.,  50.],
       [ 60.,  62.,  64.,  66.,  68.,  70.]])
>>> np.savetxt('out.csv', b, delimiter=',', fmt='%d')

正しく出力できている!

[user@linux]$ cat out.csv
20,22,24,26,28,30
40,42,44,46,48,50
60,62,64,66,68,70

(24) テキストファイルを1行ずつ読み込み(その2)

(24) テキストファイルを1行ずつ読み込み(その2)

(20) テキストファイルを1行ずつ読み込み の別の方法です。
enumerate() を使います。

>>> fh = open('data.txt')
>>> for a,b in enumerate(fh):
...     print a
...     print b
...
0
book

1
car

2
pen

3
house

4
ball

行番号の初期値はstart=xxxxxで指定できる。

>>> fh = open('data.txt')
>>> for a,b in enumerate(fh, start=1):
...     print a
...     print b
...
1
book

2
car

3
pen

4
house

5
ball

ファイルから読み込んだ各行の改行文字はrstrip()で削除できる。

>>> fh = open('data.txt')
>>> for a,b in enumerate(fh, start=1):
...     print a
...     print b.rstrip()
...
1
book
2
car
3
pen
4
house
5
ball

(20) テキストファイルを1行ずつ読み込み

(20) テキストファイルを1行ずつ読み込み

読み込むのは以下のようなテキストファイルとする。

[user@dog-server]$ ls
data.txt
[user@dog-server]$ cat data.txt
book
car
pen
house
ball

pythonでこのテキストファイルを1行ずつ読み込む。

>>> fh = open('data.txt')
>>> line = fh.readline()
>>> while line != '':
...     print line
...     line = fh.readline()
...
book

car

pen

house

ball

改行文字まで含まれているようだ。
読み込んだ1行分のデータを split() を使って改行文字「\n」で分割し、前側のデータを表示してみる。

>>> fh = open('data.txt')
>>> line = fh.readline()
>>> while line != '':
...     line = line.split('\n')
...     print line[0]
...     line = fh.readline()
...
book
car
pen
house
ball

改行文字が消えた。

改行文字は rstrip() でも除去できる。

>>> fh = open('data.txt')
>>> line = fh.readline()
>>> while line != '':
...     print line.rstrip()
...     line = fh.readline()
...
book
car
pen
house
ball

(19) テキストファイルの読み書き

(19) テキストファイルの読み書き

まずはテキストファイルを作成する。

>>> fh = open('data.txt','w')
>>> fh.write('hello\n')
>>> fh.write('see you!\n')
>>> fh.close()
>>>
[user@dog-server]$ ls
data.txt
[user@dog-server]$
[user@dog-server]$ cat data.txt
hello
see you!

次に、作成したファイルを読み込む。

>>> fh = open('data.txt','r')
>>>
>>> data = fh.read()
>>> data
'hello\nsee you!\n'
>>>
>>> print data
hello
see you!
>>>
>>> ary = data.split('\n')
>>> ary
['hello', 'see you!', '']
>>> ary[0]
'hello'
>>> ary[1]
'see you!'