デカ文字Python

デカ文字&短文でPythonを簡潔にまとめたブログ

Python SoloLearn Exceptions & Files

 

ここの章はFile以外難しいところはなかったので軽めです。

Assertions

 

AssertionError exceptions can be caught and handled like any other exception using the try-except statement, but if no handled, this type of exception will terminate the program.

 "AssertionErrorの例外はtry-exceptステートメント同様に、補足され、処理されます。しかし、処理がなければ、このタイプの例外はプログラムを終了させてしまいます。"

 

???????

直訳だとまったく意味わからないのだが……

 

assertステートメントとtry-exceptステートメントの違い

Falseのとき、assertステートメントはAssertErrorを発生させ処理を強制終了する。

print(1)
a = "string"
assert 1 + 1 == 3,a
print("This line is never done.")

1
Traceback (most recent call last):
File "C:/Users/pokio/PycharmProjects/hazime/hhh.py", line 3, in <module>
assert 1 + 1 == 3,a
AssertionError: string

一方、try-exceptステートメントはexcept以下のステートメントが実行されるのみで、処理は継続される。

try:
print(1)
print(10 / 0)

except:
print("Error is occurred")

finally:
print("This is executed last.")

print("Program goes on.")

1
Error is occurred
This is executed last.
Program goes on.

tryステートメント内ではエラーが発生しても、exceptステートメントに移行して、

プログラムが中断されていないことがわかる。

 

Opening Files

Pythonでは、テキストファイルをオブジェクト化しPython内で扱うことができる。

その際は、Open関数を使い、オブジェクト化したいテキストファイル名を

その引数に渡す。

 

The argument of the open function is the path to the file.

If the file is in the current working directory of the program,

you can specify only its name.

 "open関数の引数にはテキストファイルのpathを入れる。

そのファイルが動いているプログラムと同じディレクトリにあれば、

(pathの記述は必要なく)そのファイル名だけを特定したらよい。"

 

 実際にやってみる。

myfile = open("hatena.text", "r")
print(myfile.read())
myfile.close()

C:\Users\pokio\AppData\Local\Programs\Python\Python36\python.exe
C:/Users/pokio/PycharmProjects/hazime/hhh.py


This has been written to a file.

上で水色で書いてあるものが、Pycharmにおける実行環境と

プログラムの存在場所である。

C:\Users\pokio\AppData\Local\Programs\Python\Python36\python.exe 

に位置するPythonを用いて、

C:/Users/pokio/PycharmProjects/hazime/hhh.py

に位置するプログラムhhh.pyを実行した結果だ。

f:id:pokita:20180901191933p:plain

ここと同じフォルダ内にhatena.textは位置しているため、

pathが省略された名前のみの引数でオブジェクト化することができた。

 

Reading Files

 

To read only a certain amount of a file, you can provide a number

as an argument to read function. This determines the number of

bytes that should be read.

With no argument, read returns the rest of the file.

 

"ある程度の量をファイルから読み込むためには、

read関数に数字を引数として渡すことでできます。

こうすることで、読み取るビット数をきめることができます。

引数がない場合は、read関数はファイル内の残りすべてを返します。"

 

f:id:pokita:20180901204927p:plain

というテキストファイルを次のようなプログラムで走らせてみる。

myfile = open("hatena.text","r")
print(myfile.read(6), end="")
print(myfile.read(6), end="")
print(myfile.read(6), end="")
print(myfile.read(6), end="")
print(myfile.read(6), end="")
print("==============")
print(myfile.read())

Line1
Line2
Line3
Line4
Line5
==============
Line6
Line7
Line8
Line9
Line10


引数が6なのは、LineXの5文字+改行(\n)の1文字=6文字なため。

print関数の第2引数がend=""なのは、

print関数にデフォルトで設定されている改行を入れないようにするため。 

In the output, the lines are separated by blank lines,

as the print function automatically adds a new line

at the end of its output.

print(myfile.read(6))が実行されるたび、hatena.txtの上から順に行が吐き出される。

print(myfile.read())が実行されると、hatena.txtの残りの文字が全部吐き出される。

 

To retrieve each line in a file, you can use the readlines method

to return a list in which each element is a line in the file.

"file内の各行を取得するためには、readlinesメソッドを使って、

listオブジェクトを戻します。そのlistオブジェクトでは、

各要素がファイル内の行となっています。"

 

readメソッドが文字単位で戻す。

myfile = open("hatena.text", "w")
for i in range(1,11):
Linex = "Line" + str(i) +"\n"
myfile.write(Linex)
myfile.close()
myfile = open("hatena.text", "r")
w = myfile.read()

print(w[1])
print(type(w))
print(len(w))
myfile.close()

i
<class 'str'>
61

readlinesメソッドは行単位で戻す。

myfile = open("hatena.text", "w")
for i in range(1,11):
Linex = "Line" + str(i) +"\n"
myfile.write(Linex)
myfile.close()
myfile = open("hatena.text", "r")
w = myfile.readlines()

print(w[1])
print(type(w))
print(len(w))
myfile.close()

Line2

<class 'list'>
10

 

 今回はこんな感じ。