Pythonでテキストファイルを読み取るスクリプトを作成しました。
これがコードです。
parser = argparse.ArgumentParser(description='script')
parser.add_argument('-in', required=True, help='input file',
type=argparse.FileType('r'))
parser.add_argument('-out', required=True, help='outputfile',
type=argparse.FileType('w'))
args = parser.parse_args()
try:
reader = csv.reader(args.in)
for row in reader:
print "good"
except csv.Error as e:
sys.exit('file %s, line %d: %s' % (args.in, reader.line_num, e))
for ln in args.in:
a, b = ln.rstrip().split(':')
ファイルが存在し、空のファイルではないかどうかを確認したいのですが、このコードでエラーが発生します。
また、プログラムが出力ファイルに書き込めるかどうかを確認したいと思います。
コマンド:
python script.py -in file1.txt -out file2.txt
エラー:
good
Traceback (most recent call last):
File "scritp.py", line 80, in <module>
first_cluster = clusters[0]
IndexError: list index out of range
ファイルが存在し、空ではないかどうかを確認するには、 _os.path.exists
_ と-の組み合わせを呼び出す必要があります _os.path.getsize
_ 「and」条件付き。例えば:
_import os
my_path = "/path/to/file"
if os.path.exists(my_path) and os.path.getsize(my_path) > 0:
# Non empty file exists
# ... your code ...
else:
# ... your code for else case ...
_
alternativeとして、 _try/except
_とともに_os.path.getsize
_を使用することもできます(_os.path.exists
_)を使用しないでください。これは、ファイルが存在しない場合、またはファイルにアクセスする権限がない場合に OSError
を発生させるためです。例えば:
_try:
if os.path.getsize(my_path) > 0:
# Non empty file exists
# ... your code ...
else:
# Empty file exists
# ... your code ...
except OSError as e:
# File does not exists or is non accessible
# ... your code ...
_
参考文献Python 3ドキュメント
パスのサイズをバイト単位で返します。ファイルが存在しないか、アクセスできない場合は、
OSError
を上げます。
空のファイルの場合、_0
_を返します。例えば:
_>>> import os
>>> os.path.getsize('README.md')
0
_
一方、 os.path.exists(path)
は:
パスが既存のパスまたは開いているファイル記述子を参照している場合は、
True
を返します。壊れたシンボリックリンクに対してFalse
を返します。一部のプラットフォームでは、パスが物理的に存在していても、要求されたファイルで
os.stat()
を実行する許可が与えられていない場合、この関数はFalse
を返します。