パソコン日記

気づいたこと まとめてみる

Pythonでファイル処理をやってみる(準備編)

Pythonを使おう!

みなさん、プログラミング言語Pythonを使っていますか? 理系の方なら実験などのデータの処理や、計算など自動化できたらいいな、ということがあると思います。文系の方でも、統計的な処理をしたいときがあると思います。 そんな時、プログラミングができたら非常に楽です! このブログでは、数多あるプログラミング言語の中でも、誰でも簡単に使うことができる"Python"についても紹介したいと考えております。

Pythonのインストール??

さて、Pythonを始めるには使用しているパソコンにPythonをインストールしないといけないのですが、インストールについて説明しているウェブサイトはたくさんあるので今回は説明いたしません、ごめんなさい… もしかしたらこのブログでも紹介するかもしれません。また、基本的な使い方も省略いたします。

ファイル処理がしたい?

実験データなどを処理する際、必ずといって必要となるのがファイルを読み込んだり、書き込んだりすることです。ファイルの読み込み、書き込みについて説明したかったのですが、元となるファイルがないから説明できないじゃん!となったので、今回はランダムな文字列を出力するプログラムを作っていきたいと思います。

ランダムな文字列を生成するプログラム

はじめにランダムな文字列を生成するプログラムを作ってみました。Pythonのバージョンは3系です。 残念ながら自分の頭ではあまりいい感じに文字列を生成する方法を思いつかなかったので力づくでつくりました。 とりあえず一単語

#!python3
import random

abc = "abcdefghijklmnopqrstuvwxvz"
n = 6
s = ""
for i in range(n):
    s = s + random.choice(abc)
print(s)

結果は、

gxzmej

謎の文字列が出力されましたね!これは実行するたびに値が変わります。 使いやすいようにとりあえず、次の関数のようにまとめておきます。

#!python3
import random

def randomabc(strs,n):
    s = ""
    for i in range(n):
        s = s + random.choice(abc)
    return s

if __name__ == "__main__":
    abc = "abcdefghijklmnopqrstuvwxvz"
    print(randomabc(abc,6))

一応、このスクリプトが直接実行されたとき、

if __name__ == "__main__":

の中が実行されます。

次に単語をいくつか出力してみます。 以下の部分を変更してみました。

if __name__ == "__main__":
    abc = "abcdefghijklmnopqrstuvwxvz"
    for i in range(10):
        print(randomabc(abc,6) ,end=" ")
    print("")

そうすると、

xdglfm ppttav vtbvrb afdhap gpdkdd auxxun lmpmdv rezzgx akwhma vdtqju

謎の文字列がたくさん出力されましたね。 一単語の文字数が同じなので

print(randomabc(abc,6) ,end=" ")

を次のようにしてみました。

print(randomabc(abc,random.randint(3,10)) ,end=" ")

すると、

ddjnvcb kdt kuqi pqehbz zwti uwq dzaal cczlovf bqcvc iudart

となり謎の文字列がバリエーションをもってきました。 まだ一行だけなので、複数行表示してみます。単純にforループを一行増やしてみました。

if __name__ == "__main__":
    abc = "abcdefghijklmnopqrstuvwxvz"
    for i in range(10):
        for j in range(10):
            print(randomabc(abc,random.randint(3,10)) ,end=" ")
        print("")

そうすると、

zaff pttg tzmop sdqpeqwbp djxssvcjle umbtbco kpljzz ghwmmwgza gfthonfi ajqvv
eiwtqila ttidoxcrg izujantc mcvefgpqw uzw vuzrqbqlei pauwhbldp iebucgdsvo obatgbqv fov
wgrmpvxm egdno pvo dofw wawp lgbhul hbdv udlkt xvilddmw rzeaabi
jijdovqjuh wukhrrv wcofm qsfewl whqgisss npt iqdx vdiw kkuclv laxzd
vavvxlqk mofsgmxh qfapvzpjrf div jnmdaxhxxx vtrzckn lvr fvxbalfwz ifentvajl enqubbbwk
jnrzntsdhv aspa trx emsiso kex sie alk vhq mfne aagxnonsm
wsks aodiv sioasvpqx gzavichimu vzgzhxzb zsbgvlne uve npt zgjrnsxt ncbj
foolfzfe svffqzvl fjwkvbimi pczj jbo bbbcqz ncxp lzwlo vgjvko iwekj
pme iolr gifstxxb lfkovs ftjsz vvfe pvqverh zigqn gtroinxx mlxfloq
pzeta igqvl eimxhf oteuss mmtnvvqtvi olrhltl fvrgp robaewvqeu jrwfhhmv teqfz

きちんと動きましたが、もう謎ですね。

最後に、これらの文字列をファイルに書き込みます。 ファイル全体を次のようにしてみました。

#!python3
import random

def randomabc(strs,n):
    s = ""
    for i in range(n):
        s = s + random.choice(abc)
    return s

if __name__ == "__main__":
    abc = "abcdefghijklmnopqrstuvwxvz"
    f = open("test.txt","w")
    lines = 10
    count = 10
    for i in range(lines):
        for j in range(count):
            s = randomabc(abc,random.randint(3,10))
            f.write(s + " ")
        f.write("\n")
    f.close()

これで"test.txt"に謎の文字列たちが出力されます。 また、このプログラムだとそれぞれの列の最後に空白が挿入されてしまいます。 これを取るには無理やりですが、次にようにしてみました。

if __name__ == "__main__":
    abc = "abcdefghijklmnopqrstuvwxvz"
    f = open("test.txt","w")
    lines = 10
    count = 10
    for j in range(lines):
        for i in range(count):
            s = randomabc(abc,random.randint(3,10))
            if i != count-1:
                f.write(s + " ")
            else:
                f.write(s)
        f.write("\n")
    f.close()

まぁ、とりあえずできた。