よちよちpython

独習 python/Qpython/Pydroid3/termux/Linux

ファイル内容とコマンドライン引数の比較

作業ディレクトリ内のファイル内容と、コマンドライン引数との比較をするプログラムのメモ。



ディレクトリ内


適当なディレクトリを作り、次の2つのファイルを保存しておく。

.
├── check_equal.py
└── text1.txt

0 directories, 2 files
  • テキストファイル(text1.txt)
  • テキストファイル(text1.txt)の内容ど、コマンドライン引数が同じかどうかを調べるプログラム(check _equal.py)



ファイル内容

1. テキストファイル

大阪府庁  大阪市役所 通天閣
大阪城

メモ帳で適当に作ったもの。スペースや改行も適当に入れる。

2. 比較するためのpyファイル

import os
import sys

# コマンドライン引数
args = sys.argv[1:]

# text1.txtの読み込み
with open("text1.txt", "r") as f:
    s = f.read()

    s = s.replace("\n", " ") # 改行の削除
    s = s.split(" ")  # スペースで区切ってリスト化
    s = [i for i in s if i != '' "]  # リストから空白を削除

print("コマンドライン引数\n", args)
print("-"*25)
print("ファイル内容\n", s)

# コマンドライン引数とファイル文字列の比較
if args == s:
    print("equal")
else:
    print("not equal")



実行


実行はターミナルで行う。

$ python check_equal.py 大阪府庁 大阪市役所 通天閣 大阪城

実行されると、↑で与えたコマンドライン引数と、読み込んだファイル(text1.txt)の内容が等しいかどうかを判別し、表示する。



コマンドライン引数はlist型で返る。インデックスの1番以降が実際に入力して与えた引数。
一方、ファイル内容の読み込みはstr型で、改行コード(\n)が自動的に入る。それをreplaceで空に置換しリスト化しただけでは空白要素が入ってしまった。そのため、「テキスト文字列.remove(" ")」とすれば良さそうだと思ったが、これは「None」が返って上手く行かなかった。
詳しくはコチラを参考



簡単そうで、意外と奥が深い…
以上です。