ここ 2 日間、体調が悪く、毎日講義をするという約束を怠ってしまいました、お許しください。
赤毛のファイルは、ある国では特別なものです。Python では必要ありません。Python が扱う必要があるのは、テキスト、画像、オーディオ、ビデオなどのファイルです。 Linux では、すべてがファイルに保存されるのではありませんか? Python のファイルは、学習した文字列や数値などと同じオブジェクトです。
まず、対話モードでファイルにどのような属性があるかを確認します:
>>> dir(file) ['__class__', '__delattr__', '__doc__', '__enter__', '__exit__', '__format__', '__getattribute__', '__hash__', '__init__', '__iter__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', 'close', 'closed', 'encoding', 'errors', 'fileno', 'flush', 'isatty', 'mode', 'name', 'newlines', 'next', 'read', 'readinto', 'readline', 'readlines', 'seek', 'softspace', 'tell', 'truncate', 'write', 'writelines', 'xreadlines']
その後、いくつかの属性について詳しく説明しますが、それを学ぶのはあなた次第です。
ファイルを開く
特定のフォルダーの下に 130.txt という名前のファイルが作成され、その中に次の内容が入力されました:
<code>learn python http://qiwsir.github.io qiwsir@gmail.com</code>
このファイルは 3 行です。
下の画像は、このファイルが保存されている場所を示しています:
上のスクリーンショットでは、現在の場所に Python を入力し (環境変数を設定しました。環境変数がない場合は、起動時の Python コマンドの完全なパスを記述する必要があります)、対話モードに入ります。この対話モードでは、次の操作を行います:
>>> f = open("130.txt") #打开已经存在的文件 >>> for line in f: ... print line ... learn python http://qiwsir.github.io qiwsir@gmail.com
開いたファイルを変数fに代入し、変数fとオブジェクトファイル130.txtを線(オブジェクト参照)で結びます。
次に、以前に学習した list、str、tuple などのシーケンス オブジェクトを読み取るのと同じように、for を使用してファイルの内容を読み取り、読み取ったファイルの各行を変数 line に代入します。 for ループがファイルの内容を 1 行ずつ読み取ることもわかります。行がスキャンされるたびに、行末記号 n は行の終わりを示し、その後に次の行が続きます。
印刷結果から、すべてが前に確認したファイル内容のすべての行と同じであることがわかります。行間に余分な空白行が入っているだけです。先ほど記事の内容を表示したときは、そのような空白行はありませんでした。おそらくこれは重要ではありませんが、理解するにはさらに深く掘り下げる必要があります。
元のテキストでは、各行の最後に改行を示す行末記号 n があります。 for ステートメントの要約では、print line は、line オブジェクトが印刷されるたびに新しい行が追加されることを意味します。つまり、line オブジェクトの印刷後に n が追加されます。この観点から見ると、各行の末尾に 2 つの n、つまり nn があるため、印刷時には空白行が表示されます。
>>> f = open('130.txt') >>> for line in f: ... print line, #后面加一个逗号,就去掉了原来默认增加的\n了,看看,少了空行。 ... learn python http://qiwsir.github.io qiwsir@gmail.com
上記の操作を実行するときに、このような状況に遭遇したことはありますか?
>>> f = open('130.txt') >>> for line in f: ... print line, ... learn python http://qiwsir.github.io qiwsir@gmail.com >>> for line2 in f: #在前面通过for循环读取了文件内容之后,再次读取, ... print line2 #然后打印,结果就什么也显示,这是什么问题? ... >>>
読者が上記の問題に遭遇しない場合は、試してみてください。これに遭遇すると、混乱が解消されます。これはエラーではありません。ファイルの内容が以前に読み取られ、ファイルの終わりに達したためです。この操作を繰り返して、最後から読み続けます。もちろん何も表示されませんが、後で説明するように、この読み取りの前にコンテンツがファイルに追加されている可能性があるため、Python はこれがエラーであるとは考えません。それで、もう一度読みたい場合はどうすればよいでしょうか?もう一度やり直してください。
閲覧者への特別な注意事項。現在の対話モードはファイルが置かれているディレクトリで開始されるため、この時点で、ファイル 130.txt が同じディレクトリにあるのと同じです。ファイル130.txt、このディレクトリにファイルが存在しない場合は、パスを明確に記述する必要があります。
例: 上位レベルのディレクトリ (~/Documents/ITArticles/BasicPython) で、そのディレクトリに参加し、対話モードを実行して、130.txt ファイルを開いてみてください。
>>> f = open("130.txt") Traceback (most recent call last): File "<stdin>", line 1, in <module> IOError: [Errno 2] No such file or directory: '130.txt' >>> f = open("./codes/130.txt") #必须得写上路径了(注意,windows的路径是\隔开,需要转义。对转义符,看官看以前讲座) >>> for line in f: ... print line ... learn python http://qiwsir.github.io qiwsir@gmail.com >>>
ファイルの作成
上記の実験では、既存のファイルが開かれました。ファイルを作成するにはどうすればよいですか?
>>> nf = open("131.txt","w") >>> nf.write("This is a file")
ファイルを作成したばかりですか?ファイルの内容を書きましたか?見てみましょう:
実際にはこのように新しいファイルが作成され、その中にその文が含まれています。
お気づきかと思いますが、今回は open() 関数も使用していますが、ファイルを開くためにどのモードを使用するかを Python に指示する追加の「w」が付いています。つまり、open() を使用してファイルを開くと、さまざまなモードでファイルを開くことができます。以下の表を見てください:
从表中不难看出,不同模式下打开文件,可以进行相关的读写。那么,如果什么模式都不写,像前面那样呢?那样就是默认为r模式,只读的方式打开文件。
>>> f = open("130.txt") >>> f <open file '130.txt', mode 'r' at 0xb7530230> >>> f = open("130.txt","r") >>> f <open file '130.txt', mode 'r' at 0xb750a700>
可以用这种方式查看当前打开的文件是采用什么模式的,上面显示,两种模式是一样的效果。下面逐个对各种模式进行解释
"w":以写方式打开文件,可向文件写入信息。如文件存在,则清空该文件,再写入新内容
131.txt这个文件是存在的,前面建立的,并且在里面写了一句话:This is a file
>>> fp = open("131.txt") >>> for line in fp: #原来这个文件里面的内容 ... print line ... This is a file >>> fp = open("131.txt","w") #这时候再看看这个文件,里面还有什么呢?是不是空了呢? >>> fp.write("My name is qiwsir.\nMy website is qiwsir.github.io") #再查看内容 >>> fp.close()
查看文件内容:
$ cat 131.txt #cat是linux下显示文件内容的命令,这里就是要显示131.txt内容 My name is qiwsir. My website is qiwsir.github.io
"a":以追加模式打开文件(即一打开文件,文件指针自动移到文件末尾),如果文件不存在则创建
>>> fp = open("131.txt","a") >>> fp.write("\nAha,I like program\n") #向文件中追加 >>> fp.close() #这是关闭文件,一定要养成一个习惯,写完内容之后就关闭
查看文件内容:
$ cat 131.txt My name is qiwsir. My website is qiwsir.github.io Aha,I like program
其它项目就不一一讲述了。看官可以自己实验。
本讲先到这里,明天继续文件。感冒药吃了,昏昏欲睡。