首先查看文件都有哪些内置函数
>>> dir(file)
1,打开文件
在某个文件夹下面建立了一个文件,名为:hello.txt,并且在里面输入了如下内容:
hello python
my name is python
this is good!
我存储在D:\2018-01-15下
然后读取并输出文件内容:
>>> f =
open
("D://2018-01-15//hello.txt") #打开文件
>>> for line in f:
print line
hello python
my name is python
this is good!
从打印的结果可以看出,打印的每一行内容跟文件中每一行的内容是一样的,只是行与行之间多了个空行,前面显示文章内容的时候,并没有这个空行。
在原文中,每行结束都有结束符号\n,表示换行。在for语句汇总,print line表示每次打印完line的对象之后就换行,也就是打印完line的对象之后会增加一个\n。这样看来,在每行末尾就有两个\n,即:\n\n,于是在打印中就出现了一个空行。
>>> f1 =
open
("D://2018-01-15//hello.txt")
>>> for line1 in f1:
print line1, #后面加一个逗号,就去掉了原来默认增加的\n了
hello python
my name is python
this is good!
2,创建文件
上面时打开文件,如何创建文件:
>>> f2 =
open("D://2018-01-15//zhangsan.txt","w")
#创建文件,以写的方式
>>> f2.write("hello python!") #写入一句话
>>> f2.flush() #
当没有使用
flush()
或
close()
时,要写入的内容依然在缓冲区中,没有写入文件,如果中途终止,文件里就会没有内容。
用open()打开文件,可以有不同的打开模式:
模式
|
描述
|
r
|
以读方式打开文件,可读取文件信息
|
w
|
以写方式打开文件,可向文件写入信息。如文件存在,则清空该文件,再写入新内容
|
a
|
以追加模式打开文件(打开文件,文件指针自动移到文件末尾),如果文件不存在,则创建
|
r+
|
以读写方式打开文件,可对文件进行读和写操作
|
w+
|
消除文件内容,然后以读写方式打开文件
|
a+
|
以读写方式打开文件,并把文件指针移到文件尾
|
b
|
以二进制模式打开文件,而不是以文本模式。该模式只对windows或DOS有效,类UNIX的文件是用二进制模式进行操作的
|
不难看出,在不同模式下打开文件,可以进行相关的读写。
>>> f #第一个例子,看出什么都不写默认是读的方式打开
<open file 'D://2018-01-15//hello.txt', mode 'r' at 0x02FBBD30>
在对文件进行写入操作之后,一定要牢记一件事情:
file.close()
以
with就不用close()了,而且这种方法更有Python味道,或者说更符合Pythonic的一个要求
>>>
with open
("D://2018-01-15//hello.txt","a") as f:
f.write("\n this is test")
>>> with open("D://2018-01-15//hello.txt","r") as f:
print f.read()
hello python
my name is python
this is good!
this is test
3,read/readline/readlines
在用dir(file)的时候会看到三个函数:read/readline/readlines
>>> help(file.read)
>>> help(file.readline)
>>> help(file.readlines)
分别查询三个函数的帮助文档:
read:如果指定了参数size,就按照该指定长度从文件中读取内容,否则,就读取全文。被读出来的内容,全部塞到一个字符串里面。这样有好处,就是东西都到内存里面了,随时取用,比较快捷;“成也萧何败也萧何”,也是因为这一点,如果文件内容太多,内存会吃不消的。
readline:那个可选参数size的含义同上。它以行为单位返回字符串,也就是每次读一行,依次循环,如果不限定size,直到最后一个返回的是空字符串,意味着到文件末尾了(EOF)。
readlines:size同上。它返回的是以行为单位的列表,即相当于先执行readline(),得到每一行,然后把这一行的字符串作为列表中的元素塞到一个列表中,最后将此列表返回。
>>> f = open("D://2018-01-15//hello.txt")
>>> c =
f.read()
>>> c
'hello python\nmy name is python\nthis is good!\n this is test'
>>> f.close()
请仔细观察,得到的是一个大大的字符串,但是这个字符串里面包含着一些符号\n,因为原文中有换行符。
提示:养成一个好习惯,就一定要随手关闭不用的文件。如果不关闭,它还驻留在内存中,后面又没有对它的操作,既浪费内存空间,也增加了文件安全的风险。
用readline()读取,则是这样的:
>>> f = open("D://2018-01-15//hello.txt")
>>>
f.readline()
'hello python\n'
>>> f.readline()
'my name is python\n'
>>> f.readline()
'this is good!\n'
>>> f.close()
显示出一行一行读取了,每操作一次f.readline(),就读取一行,并且将指针向下移动一行,如此循环。
也用readlines()来读取此文件:
>>> f = open("D://2018-01-15//hello.txt")
>>> c =
f.readlines()
>>> c
['hello python\n', 'my name is python\n', 'this is good!\n', ' this is test']
返回的是一个列表,列表中每个元素都是一个字符串,每个字符串中的内容就是文件的一行文字,含行末的符号。
当要读很大的文件,不能用read()或者readlines()一次性将全部内容读入内存,可以使用while循环和readlin()来完成这个任务。
在对付很大的文件时,就有一个模块供我们驱使:fileinput模块:
>>>
import fileinput
>>> for a in
fileinput.input
("D://2018-01-15//hello.txt"):
print a,
hello python
my name is python
this is good!
this is test